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 のような設定ファイルは起動時に読み直されるので、渡し直す必要はありません。
パーミッションモードのうち plan と bypassPermissions は決して復元されません。auto はアカウントが auto モードの条件を満たしている場合にだけ戻ります。
セッションに名前を付ける
複数の作業を並行させるときほど、名前が効きます。名前を付ける方法は4つあります。
# 起動時に名前を付ける
claude -n auth-refactor
- セッション中に
/rename auth-refactorを実行する(名前はプロンプトバーにも出ます) - セッションピッカーで対象を選んで
Ctrl+Rを押す - プランモードでプランを受け入れると、まだ名前が無ければプランの内容から自動で命名される
名前を付けたセッションは 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の指定で戻れます。
引き継がれるものと引き継がれないものの境目は、「トランスクリプトをコピーして、同じプロセスの書き込み先を切り替える」という実装から決まります。
- 会話履歴:
/branchを実行した時点までがコピーされます。 - 「このセッションのみ許可」のパーミッション: 同じプロセスのままなので引き継がれます。ただし
--fork-sessionで別プロセスに分岐した場合は引き継がれず、承認し直しになります。 - 実行中のバックグラウンドのサブエージェント・Bash コマンド: 動き続けますが、出力は移動先の新しい分岐に出ます。元のセッションには出ません。
なお、フォークせずに同じセッションを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日の保持期間を変える | cleanupPeriodDays | settings.json |
| すべてのモードで書き込みを止める | CLAUDE_CODE_SKIP_PROMPT_HISTORY | 環境変数 |
| 非対話の1回だけ書き込みを止める | --no-session-persistence | claude -p のフラグ |
会話を人が読む形で取り出したいときは /export を実行します。メニューからクリップボードへのコピーかファイル保存を選べ、ファイル名を引数で渡すとメニューを飛ばして直接書き出します。