Claude Code のセッション管理(再開・命名・分岐)

Claude Code エンジニアリング 7分で読めます

Claude Code の会話は、プロジェクトごとに「セッション」として保存されています。終了しても続きから戻れますし、名前を付けて行き来したり、途中から分岐して別のやり方を試したりもできます。この記事では、公式ドキュメントの Manage sessions をもとに、再開・命名・ピッカー操作・分岐・保存場所を順に説明します。

セッションとは何か

セッションとは、プロジェクトのディレクトリに紐づいて保存される会話のことです。Claude Code は作業中のやり取りを継続的にローカルへ書き出しているため、いったん終了した後で続きから再開したり、別のアプローチを試すために会話を分岐させたり、複数のタスクを行き来したりできます。

セッションの履歴はインターフェースごとに独立して管理されます。デスクトップアプリ、Claude Code on the web、VS Code 拡張はそれぞれ自分の履歴を持ちます。このページで扱うのは CLI のセッションです。

セッションを再開する

終了した後でも /clear を実行した後でも、保存済みのトランスクリプトから会話に戻れます。入口は次の5つです。

コマンド動作
claude --continue現在のディレクトリで最後に使ったセッションを再開する
claude --resumeセッションピッカーを開く
claude --resume <name>名前を指定して直接再開する
claude --from-pr <number>そのプルリクエストに紐づくセッションだけに絞ってピッカーを開く
/resumeセッションの中から別の会話へ切り替える

claude -p(非対話モード)や Agent SDK で作られたセッションはピッカーには出てきませんが、セッションIDを渡せば再開できます。ただしIDの検索範囲は現在のプロジェクトディレクトリとその worktree に限られるため、別の場所で作ったセッションを指定すると No conversation found with session ID になります。作成元のディレクトリで実行してください。

再開したセッションが復元するのは、会話履歴(ツールの呼び出しと結果を含む)に加えて、そのセッションが使っていたモデル、--agent で指定していたエージェント、パーミッションモード、終了時に有効だった goal、期限切れでないスケジュールタスクです。

一方で、起動時のフラグがすべて復元されるわけではありません。--mcp-config / --settings / --plugin-dir / --fallback-model--add-dir で足したディレクトリに依存していたセッションは、再開時にもう一度同じフラグを渡す必要があります。settings.json のような設定ファイルは起動時に読み直されるので、渡し直す必要はありません。

パーミッションモードのうち planbypassPermissions は決して復元されません。auto はアカウントが auto モードの条件を満たしている場合にだけ戻ります。

セッションに名前を付ける

複数の作業を並行させるときほど、名前が効きます。名前を付ける方法は4つあります。

# 起動時に名前を付ける
claude -n auth-refactor

名前を付けたセッションは claude --resume <name> または /resume <name> で戻れます。

紛らわしいのは「表示名」と「再開に使える名前」が別物である点です。名前を付けていない対話セッションにも、作業ディレクトリ名に2文字の接尾辞を足した既定の表示名(例 my-app-3f)が付きます。さらに、最初のプロンプトを要約したセッションタイトルが小型モデルによって自動生成されます。しかしこれらは再開のハンドルにはなりません。--resume <name> やピッカーの名前一致が見るのは、自分で付けた名前だけです。

セッションピッカーの操作

セッション中に /resume、または引数なしの claude --resume で対話的なピッカーが開きます。

キー動作
上下キーセッション間を移動する
左右キーグループ化されたセッションを展開・折りたたむ
Enter選択中のセッションを再開する
Space内容をプレビューする
Ctrl+R選択中のセッションの名前を変える
Ctrl+Aこのマシンの全プロジェクトのセッションを表示する
Ctrl+Wリポジトリの全 worktree のセッションを表示する
Ctrl+B現在の git ブランチのセッションだけに絞る
Escピッカーや検索モードを抜ける

既定では、現在の worktree のセッションと、/add-dir で現在のディレクトリを追加した外部のセッションが並びます。各行には、名前(無ければ自動生成タイトルや最初のプロンプト)、最終更新からの経過時間、git ブランチ、ファイルサイズが出ます。

検索モードでは、GitHub / GitHub Enterprise / GitLab / Bitbucket のプルリクエストURLを貼り付けると、そのPRを作ったセッションを探せます。

同じリポジトリの別 worktree のセッションを選ぶと、その場で再開されます。無関係なプロジェクトのセッションを選んだ場合は、代わりに cd と再開コマンドがクリップボードにコピーされます。

会話を分岐する(/branch)

分岐は、それまでの会話のコピーを作ってそちらへ移る操作です。元のセッションはそのまま残るので、別のアプローチを試したいが今の道筋も捨てたくない、という場面で使います。

/branch try-streaming-approach

名前を省略すると、会話の最初のプロンプトから命名されます。コマンドラインからは --continue または --resume--fork-session を組み合わせます。

claude --continue --fork-session

/branch の確認表示には、移動先の新しいセッションIDと元のセッションIDの2つが出ます。元はディスク上で変更されずピッカーにも残るので、/resume <元の名前> やIDの指定で戻れます。

引き継がれるものと引き継がれないものの境目は、「トランスクリプトをコピーして、同じプロセスの書き込み先を切り替える」という実装から決まります。

なお、フォークせずに同じセッションを2つのターミナルで再開すると、両方のメッセージが1本のトランスクリプトに混ざります。単一セッション内でコードと会話を巻き戻したいだけなら、分岐ではなくチェックポイントの方が適しています。

トランスクリプトの保存場所

トランスクリプトは既定で ~/.claude/projects/<project>/<session-id>.jsonl に JSONL 形式で保存されます。<project> は作業ディレクトリのパスの英数字以外を - に置き換えたものです。

ただし、この1行1行のエントリ形式は Claude Code の内部仕様で、バージョン間で変わります。これらのファイルを直接パースするスクリプトはリリースのたびに壊れる可能性があるため、セッションのデータを使いたいときは /export かスクリプト向けのインターフェースを使ってください。

# 既存セッションに追加の質問を投げて、結果を jq で読む
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'

保存先・保持期間・書き込みの有無は次のように変えられます。

やりたいこと設定場所
保存先を ~/.claude の外へ移すCLAUDE_CONFIG_DIR環境変数
30日の保持期間を変えるcleanupPeriodDayssettings.json
すべてのモードで書き込みを止めるCLAUDE_CODE_SKIP_PROMPT_HISTORY環境変数
非対話の1回だけ書き込みを止める--no-session-persistenceclaude -p のフラグ

会話を人が読む形で取り出したいときは /export を実行します。メニューからクリップボードへのコピーかファイル保存を選べ、ファイル名を引数で渡すとメニューを飛ばして直接書き出します。