case_1080

Claude Codeの会話履歴はどこ?保存先と復元7手順

Claude Codeの会話履歴はどこ?保存先と復元7手順

Claude Codeの会話履歴の保存先と復元7手順。--continueと--resumeの使い分け、セッションの名前付けと分岐、~/.claude/projects配下のJSONL、/exportでの書き出しまで公式情報で確認。

2026年9月28日時点の結論。Claude Codeのセッションは作業しながら継続的にローカルへ保存されているので、ターミナルを閉じても /clear を打っても失われていない。同じディレクトリで直前の会話に戻るだけなら claude --continue、どれに戻るか選びたいなら claude --resume、セッションの中から別の会話へ移るなら /resume だ。保存先の既定値は ~/.claude/projects/<project>/<session-id>.jsonl で、<project> は作業ディレクトリのパスの英数字以外を - に置き換えた名前になる。人が読む形で取り出したい時は /export を使う。JSONLを自分でパースするのは、形式がバージョン間で変わるため避けたほうがよい。

セッションはプロジェクトディレクトリに紐づいた「保存された会話」として扱われる。デスクトップアプリ、claude.ai/code、VS Code拡張はそれぞれ独自のセッション履歴を持つので、以下はCLIの話だ(Anthropic「Manage sessions」(2026年9月確認))。

この記事の要点

  • 直前に戻る:claude --continue はそのディレクトリの最新の会話を開き直す。
  • 選んで戻る:claude --resume はセッションピッカーを開く。claude --resume <名前> で名前から直接、claude --resume <transcript-path> で .jsonl のパスから復元できる。
  • 名前を付ける:起動時は claude -n auth-refactor、セッション中は /rename auth-refactor、ピッカー上では Ctrl+R。
  • 枝分かれ:/branch はそこまでの会話のコピーを作ってそちらへ移る。元の会話はそのまま残る。
  • 保存場所:既定は ~/.claude/projects/<project>/<session-id>.jsonl。保持期間は既定30日で、cleanupPeriodDays で変えられる(Anthropic「Explore the .claude directory」(2026年9月28日確認))。
  • 書き出し:/export でクリップボードへコピー、またはプレーンテキストのファイルへ保存できる。ファイル名を渡せばメニューを飛ばして直接書ける。
  • 復元されないもの:--mcp-config・--settings・--plugin-dir・--fallback-model・--add-dir は再開時にもう一度渡す必要がある。
  • 対象読者:複数タスクを並行で回している開発者、セッションの引き継ぎや保管をスクリプト化したい開発リード。
  • 今日やること:いま動いているセッションに /rename で名前を付ける。次からは claude --resume <その名前> で一発で戻れる。

前提|復元の入口は6つある

まず入口を把握しておく。用途が違うだけで、どれも同じローカルのトランスクリプトファイルを読んでいる。

コマンド 何をするか
claude --continue 現在のディレクトリの最新の会話を開き直す
claude --resume セッションピッカーを開く
claude --resume <名前> 名前を付けたセッションを直接再開する
claude --resume <transcript-path> そのパスの .jsonl に保存された会話を再開する
claude --from-pr <番号> そのプルリクエストに紐づくセッションだけに絞ったピッカーを開く
/resume 動いているセッションの中から別の会話へ切り替える
中央のトランスクリプトを囲むように、--continue・--resume・名前・transcript-path・--from-pr・/resumeの6つの入口を配置し、中央へ矢印を向けた図
6つの入口が同じトランスクリプトを読む

claude -p や Agent SDK で作られたセッションは、ピッカーにも claude --continue にも出てこない。セッションIDを claude --resume <session-id> に渡せば再開できる。claude --continue は最初のプロンプトが /loop だったセッションも飛ばす。claude -p --continue の場合は -p・SDK・/loop のセッションも対象に含まれる。

別のディレクトリからでもIDで引ける

claude --resume <session-id> はどのディレクトリからでも実行できる。Claude Code は現在のプロジェクトディレクトリとそのgit worktreeを先に探し、そのあとこのマシンの他のすべてのプロジェクトを探す。だから別の場所で始まったセッションや、/cd で移動したセッションも見つかる。

ただし横断検索が成立するのは、他のプロジェクトのうちちょうど1つだけがそのIDのメッセージを持つトランスクリプトを保持している場合に限られる。手でコピーした複製があると、任意のコピーを再開せずに not-found を報告する。該当が無ければ No conversation found with session ID: <session-id> が出る。

手順1|–continue と –resume を使い分ける

迷ったらこう考える。直前の続きをやるだけなら --continue、どれだったか思い出せないなら --resume。

claude --continue は終了済みのバックグラウンドセッションも開ける。ただしまだ動いているものは開けない。直前の会話がバックグラウンドへ送ったもので、そこでまだ走っている場合は Your most recent conversation is running in the background とセッションIDを出して終了する。その場合は claude agents からアタッチするか、claude --resume で別のセッションを選ぶ。バックグラウンドセッションの運用はバックグラウンドセッション完全ガイドにまとめてある。

再開すると何が戻ってくるか

再開されたセッションは、会話そのものと、そこに保存された状態を復元する。

  • 会話履歴:ツール呼び出しと結果を含む全履歴。前のプロセスが終わった時にまだ走っていたツールは、再開しても完了しないし再実行もされない。Claude には結果が記録される前に切れた呼び出しとして見え、もう一度実行する前にそれが効いていたかどうか確認するよう伝えられる。
  • モデル:そのセッションが使っていたモデルで続く。ただしモデルが廃止された場合、availableModels で許可されていない場合、起動時に --model フラグや ANTHROPIC_MODEL 系の環境変数が別のモデルを選んだ場合、プロバイダ固有のデプロイIDを使うプロバイダの場合は復元されない。
  • エージェント:--agent か agent 設定で始めたセッションは、そのエージェントのツール制限とモデルを保ったまま続く。再開時に --agent を渡せば別のものに切り替えられる。
  • 権限モード:ターミナルから claude --continue、claude --resume <session-id>、あるいは一意に決まる名前で -p 無しに再開した場合は、そのセッションが入っていた権限モードが復元される。
  • 有効なゴール:セッション終了時にまだ有効だったゴールは引き継がれる。ターン数、タイマー、トークン消費のベースラインはリセットされる。
  • スケジュール済みタスク:期限切れでないタスクは復元される。バックグラウンドのBashとモニタのタスクは復元されない。

渡し直しが必要なフラグ

起動時の設定フラグは全部が復元されるわけではない。--mcp-config、--settings、--plugin-dir、--fallback-model、--add-dir に依存していたセッションは、再開時にもう一度渡す。セッション中に /add-dir で追加したディレクトリも復元されない(ピッカーはセッションを見つけるためにそれを使う)。

一方で settings.json や settings.local.json のような標準の設定ファイルは起動時に読み直されるので、そこに書いてある設定を渡し直す必要はない。

手順2|ピッカーの探す範囲を広げる

セッションはプロジェクトディレクトリごとに保存される。既定のピッカーに出るのは次の2つだ。

  • 現在のworktreeのセッション(バックグラウンドセッションを含む。一覧では bg と表示される)
  • 別の場所で始まり、/add-dir で現在のディレクトリを追加したセッション

探しているものが出てこない時は範囲を広げる。Ctrl+W でリポジトリの全worktreeへ、Ctrl+A でこのマシンの全プロジェクトへ広がる。

既定のworktreeを最下段に置き、Ctrl+Wでリポジトリの全worktree、Ctrl+Aでこのマシンの全プロジェクトへと探索範囲が広がる3段の帯を示した図
ピッカーの探索範囲を2段階で広げる

ピッカーのキー操作

キー 動作
↑ / ↓ セッション間を移動する
→ / ← グループ化されたセッションを展開・折りたたむ
Enter 選択中のセッションを再開する
Space セッションの内容をプレビューする
Ctrl+R 選択中のセッションの名前を変える
/ または Space以外の印字可能文字 検索モードに入って絞り込む
Ctrl+A このマシンの全プロジェクトのセッションを表示する
Ctrl+W 現在のリポジトリの全worktreeのセッションを表示する
Ctrl+B 現在のgitブランチのセッションに絞る
Esc ピッカーまたは検索モードを抜ける

検索モードには使い道がひとつある。GitHub、GitHub Enterprise、GitLab、Bitbucket のプル/マージリクエストのURLを貼ると、それを作ったセッションが見つかる。各行にはセッション名(未設定ならAI生成のタイトル、会話の要約、または最初のプロンプト)、最終アクティビティからの経過時間、gitブランチ、ファイルサイズが並ぶ。Ctrl+A で全プロジェクトに広げると、各セッションのプロジェクトパスも出る。

/branch や --fork-session で作ったセッションは自分のセッションIDを持ち、別の行として現れる。同じセッションのエントリが複数見つかった場合は1行にグループ化されるので、→ で展開する。

手順3|名前を付けて呼び出せるようにする

並行で複数タスクを回している時、これが一番効く。名前があればピッカーで見つけられるし、名前で直接再開できる。

タイミング 付け方
起動時 claude -n auth-refactor
セッション中 /rename auth-refactor。名前はプロンプトバーにも出る
セッションピッカー セッションを選んで Ctrl+R
プラン承認時 プランモードでプランを承認すると、既に名前を付けていない限りプランに基づくタイトルが付く
claude.ai / Claudeアプリ Remote Controlセッションの名前を変えると、CLI側にも同じ名前が付く
デスクトップアプリ デスクトップアプリ側でセッション名を変更する

CLI経路またはclaude.aiから名前を付けたら、claude --resume <名前> か /resume <名前> で戻れる。デスクトップアプリのセッションはアプリ側で再開する。アプリは独自のセッション履歴を持っているためだ。

claude -nまたは/renameで名前を付け、Ctrl+Rでも付けられ、その名前でclaude --resumeから戻るまでを左から右へ矢印でつないだ図
名前を付けてから名前で戻るまでの流れ

名前がぶつかった時の挙動

このマシンで既に動いている別のセッションが同じ名前を使っている状態で、その名前でセッションを開始・再開・改名すると、Claude Code は名前を先に持っていたセッションに残し、こちらを auth-refactor-graceful-unicorn のような2語のサフィックス付きの変種に改名して、その旨を伝える。自分で選び直したいなら /rename に別の名前を渡す。

ただし次の3ケースでは重複を改名しない。AI生成タイトルと既定の表示名は照合しない。バックグラウンドまたは -p セッションの起動時の --name は照合しない。古いバージョンのClaude Code上のセッションは改名できない。

名前を付けていないセッションに付く2つのラベル

名前を付けなかったセッションにも2つのラベルが付く。ここで大事なのは、再開のハンドルとして使えるのは片方だけという点だ。

既定の表示名:対話セッションは起動時に既定の表示名を得る。作業ディレクトリの名前と2文字のサフィックスを組み合わせた my-app-3f のような形で、実行中セッションの一覧で識別に使われる。これは再開のハンドルではない。claude --resume や /resume に渡してもセッションは見つからない。

生成されたタイトル:名前を付けなかった場合、Claude Code がセッションのタイトルを生成する。最初のプロンプトの短い要約で、バックグラウンドのリクエストが小型・高速モデル(通常はHaikuクラス)で書く。シェルやスクリプトから直接起動した claude -p には付かない。プランを承認するとプランに基づくタイトルに置き換わり、名前を付けた場合も置き換わる。こちらは claude --resume や /resume に渡せて、自分で設定した名前と同じように解決される。

手順4|/branch で別の道を試す

分岐はそこまでの会話のコピーを作ってそちらへ切り替える。元の会話はそのまま残るので、いま進んでいる道を失わずに別のアプローチを試せる。

セッションの中から、名前を付けて(省略も可)実行する。

/branch try-streaming-approach

名前を省略すると、会話の最初のプロンプトに基づいた名前が付く。分岐は元のセッションとは別のセッションIDを持ち、ピッカーでは別の行として現れる。

巻き戻しと圧縮との使い分け

コードを含めて時点まで巻き戻したい場合は分岐ではなく別の機能を使う。会話とコードの両方を戻す手段はClaude Code rewindで巻き戻すで扱っている。コンテキストを削るだけなら圧縮の側で、こちらはClaude Code /compactの5手順にまとめてある。

手順5|長時間放置したセッションの再開ダイアログ

ProまたはMaxプランでは、しばらく放置されていて会話が大きく育っているセッションを再開すると、Claude Code は会話を復元したあと、最初のメッセージを送る前にダイアログを出す。閾値となる放置時間とトークン量、およびその時点でセッションのプロンプトキャッシュが期限切れになっている点は公式ドキュメントに記載がある(Anthropic「Manage sessions」(2026年9月28日確認)、Anthropic「How Claude Code uses prompt caching」(2026年9月28日確認))。キャッシュが切れているため、どの選択肢を選んでも次のリクエストは全履歴を一度処理する。

10万トークンを超えたセッションの再開が1つの分岐を通り、Resume from summary・Resume full session as-is・Don't ask me againの3つに分かれる図
再開ダイアログの3つの選択肢

3つの選択肢の違い

選択肢は3つあり、違うのは「そのあとのリクエストに会話のどこまでを持っていくか」だ。ディテールを全部残すか、1リクエストあたりのトークンを減らすかのトレードオフになる。

  • Resume from summary:すぐに /compact を走らせる。全履歴に対して要約リクエストを送り、履歴を要約・直近のやりとり・最近読んだファイルに置き換える(置き換えの内訳とファイル数の上限はAnthropic「Manage sessions」(2026年9月28日確認)を参照)。以降のリクエストは全履歴の代わりに要約を運ぶ。
  • Resume full session as-is:会話をそのまま読み込む。最初のメッセージを送ったあと、全履歴を再処理して再キャッシュし、キャッシュが温かいうちは以降のリクエストでそこから読み直す。
  • Don’t ask me again:フルセッションで再開し、以降の再開ではこのダイアログを出さなくなる。

as-is は会話のディテールを全部使える状態を保つが、1リクエストあたりのコストが会話のサイズに比例する。要約からの再開は、以降の各リクエストが要約を運ぶので安くなるが、要約が落としたものはもうClaudeのコンテキストに無い。

手順6|保存場所を知り、必要なら変える

既定では、トランスクリプトはJSONLとして ~/.claude/projects/<project>/<session-id>.jsonl に保存される。<project> は作業ディレクトリのパスの英数字以外の文字を - に置き換えたものだ。変換後の名前が200文字を超える場合は200文字に切り詰め、フルパスのハッシュを末尾に付けてファイルシステムの制限内に収める。

既定の~/.claude/projectsと、CLAUDE_CONFIG_DIRで移した保存先の2つが、同じsession-id.jsonlというファイルに行き着くことを示した図
既定の保存先と、移した場合の保存先

各行はメッセージ、ツール使用、メタデータのいずれかを表すJSONオブジェクトになっている。この形式はClaude Code内部のもので、バージョン間で変わる。だからこれらのファイルを直接パースするスクリプトは、どのリリースでも壊れる可能性がある。セッションデータの上に何か作るなら、/export か後述のスクリプト向けインターフェースを使う。

場所・保持期間・書き込みを変えるキー

保存先を移す環境変数と、掃き出しの保持期間を決める設定キーは別のドキュメントに分かれている(Anthropic「Environment variables」(2026年9月28日確認)、Anthropic「Explore the .claude directory」(2026年9月28日確認)、Anthropic「CLI reference」(2026年9月28日確認))。下の表は、やりたいことから逆に引くための対応表だ。

やりたいこと 設定するもの 場所
~/.claude 以外に保存先を移す CLAUDE_CONFIG_DIR 環境変数
<project> ディレクトリ名を自分で決める CLAUDE_CODE_PROJECT_DIR_NAME 環境変数
既定30日の保持期間を変える cleanupPeriodDays settings.json
デスクトップとCoworkのトランスクリプトに期限を設ける desktopSessionCleanupPeriodDays ユーザー設定・管理設定・--settings
すべてのモードでトランスクリプト書き込みを止める CLAUDE_CODE_SKIP_PROMPT_HISTORY 環境変数
非対話の1回の実行だけ書き込みを止める --no-session-persistence claude -p に付けるCLIフラグ

CLAUDE_CODE_PROJECT_DIR_NAME には3つの制約がある。CLAUDE_CONFIG_DIR も一緒に設定すること(名前が作業ディレクトリで変わらないため、既定の ~/.claude の下だと全プロジェクトのトランスクリプトが1つのディレクトリに混ざる。CLAUDE_CONFIG_DIR が未設定なら Claude Code はこの変数を無視する)。英数字・ハイフン・アンダースコアで1〜64文字にすること(con のようなWindowsのデバイス名は使わない。それ以外の値は無視され、導出名が使われる)。claude を起動するシェルの環境で設定すること(起動時に一度だけそこから読むので、設定ファイルの env ブロックでは設定できない)。

消す

トランスクリプトは保持期間の掃き出しルールに従って期限切れになる。もっと早くプロジェクトのトランスクリプトと関連状態を消すなら claude project purge を実行する。バックグラウンドセッションを claude rm <id> で削除した場合、そのトランスクリプトはディスク上に残り、claude --resume から引き続き到達できる点に注意する。

手順7|人が読む形と機械が読む形を分ける

/export を実行すると、現在の会話をクリップボードにコピーするか、プレーンテキストのファイルとして保存するかを選ぶメニューが開く。メッセージとツール出力は読みやすいテキストとして描画される。ファイル名を渡せばメニューを飛ばしてそのファイルに直接書く。

スクリプトから読む4つの入口

/export が作るのは人が読むための描画済みトランスクリプトだ。スクリプトがパースする構造化データが必要なら、別のインターフェースを使う。何が引き金になるかで選ぶ(Anthropic「Run Claude Code programmatically」(2026年9月確認))。

  • 1回走らせて結果を取る:claude -p を --output-format json または stream-json で呼び、非対話実行の結果・セッションID・使用量・コストを構造化JSONで受ける。
  • 既存セッションに質問する:claude -p --resume にセッションIDを渡して、要約依頼などのフォローアッププロンプトを送り、構造化された応答を受ける。
  • セッションのイベントに反応する:フックとステータスラインコマンドが入力として受け取る transcript_path フィールドを読む。SessionEnd フックでセッション終了時にトランスクリプトを保管できる。
  • アプリに組み込む:Agent SDK を使って各メッセージをプログラムから受け取る。

2番目のインターフェースの実例はこうなる。既存セッションにフォローアップを送り、答えを jq で読む。

claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'

想定の運用例(実測値ではありません)

以下は手順の流れを見せるための想定であり、特定の企業や計測結果ではない。

戻り方の想定

想定1:ターミナルを閉じてしまった。 同じディレクトリで claude --continue を実行して直前の会話に戻る。戻ったところで /rename に作業名を付け、次回からは名前で呼べるようにする。

想定2:どのworktreeで作業していたか思い出せない。 claude --resume でピッカーを開き、Ctrl+W でリポジトリの全worktreeに広げる。それでも無ければ Ctrl+A でこのマシンの全プロジェクトに広げる。

絞り込みと保管の想定

想定3:レビューで指摘されたPRの作業に戻りたい。 claude --from-pr <番号> でそのPRに紐づくセッションだけに絞る。あるいはピッカーの検索モードにPRのURLを貼る。

想定4:セッションの記録を社内に残す運用にしたい。 JSONLを直接コピーする運用は形式変更で壊れるので採らない。SessionEnd フックで transcript_path を読んで保管するか、/export でテキストに書き出す形に寄せる。

今日やる3つ

  1. いま動いているセッションで /rename を実行し、作業内容が分かる名前を付ける。名前を付けた瞬間から claude --resume <名前> で一発で戻れるようになる。
  2. claude --resume を一度開いて、Ctrl+W と Ctrl+A で範囲がどこまで広がるかを確認しておく。探せない時の手数が減る。
  3. ~/.claude/projects/ を覗いて、自分のプロジェクトがどの名前でディレクトリ化されているかを確認する。保持期間を既定から変えたいなら、settings.json に cleanupPeriodDays を書く。

あわせて読みたい

よくある質問

Q. /clear したら会話は消えますか

消えません。セッションは作業しながら継続的にローカルのトランスクリプトファイルへ保存されているので、/clear のあとでも claude --resume から戻れます。

Q. –continue と –resume はどちらを使えばいいですか

そのディレクトリの直前の会話に戻るだけなら --continue です。どれに戻るか選びたい、または名前やトランスクリプトのパスで指定したいなら --resume です。

Q. 別のディレクトリから再開できますか

claude --resume <session-id> ならできます。現在のプロジェクトディレクトリとそのgit worktreeを先に探し、次にこのマシンの他の全プロジェクトを探します。ただし他のプロジェクトのうちちょうど1つだけがそのIDのトランスクリプトを持つ場合に限り解決されます。

Q. 会話履歴のファイルはどこにありますか

既定では ~/.claude/projects/<project>/<session-id>.jsonl です。<project> は作業ディレクトリのパスの英数字以外を - に置き換えた名前です。CLAUDE_CONFIG_DIR を設定すると保存先ごと移せます。

Q. JSONLを自分でパースしてもいいですか

避けたほうがよいです。エントリ形式はClaude Code内部のもので、バージョン間で変わります。直接パースするスクリプトはどのリリースでも壊れる可能性があります。/export か、claude -p --output-format json などの公開インターフェースを使ってください。

Q. 履歴を残したくない場合はどうしますか

すべてのモードで書き込みを止めるなら環境変数 CLAUDE_CODE_SKIP_PROMPT_HISTORY を使います。非対話の1回の実行だけなら claude -p に --no-session-persistence を付けます。保持期間だけ短くしたいなら settings.json の cleanupPeriodDays を既定値から変更します(既定値はAnthropic「Explore the .claude directory」(2026年9月28日確認)に記載)。

Q. 名前を付けたのに –resume で見つかりません

既定の表示名を渡している可能性があります。my-app-3f のような「ディレクトリ名+2文字」の既定表示名は再開のハンドルではないため、claude --resume や /resume に渡しても見つかりません。/rename で明示的に名前を付けるか、生成されたタイトルを渡してください。

Q. 再開したらMCPサーバーが消えていました

--mcp-config は復元されません。--settings・--plugin-dir・--fallback-model・--add-dir も同じで、再開時にもう一度渡す必要があります。settings.json などの標準の設定ファイルは起動時に読み直されるので、そちらに書いてある設定は渡し直さなくてよいです。

運営元 Uravation よりこの事例を自社の業務で試す場合のテーマ選定・評価・本番移行の確認項目を、無料のチェックリストにまとめています。 Claude Code業務自動化PoCチェックリストを受け取る(無料)

参考・出典

Next Step

この事例を、自社の業務に置き換える。

対象業務、利用データ、評価基準、社内展開の順番まで整理すると、AI開発ツール導入の失敗を減らせます。

導入を相談する

チームで学ぶなら: Claude Code 法人研修(2日間ハンズオン) / 1人で習得するなら: 個別指導(週1マンツーマン)