Claude Codeのセッションを再開する方法と履歴の場所
Claude Codeの直前の会話を再開する方法、名前やIDで直接開く方法を解説します。選択画面の使い方と、実行したマシンに保存されるプレーンテキスト履歴の場所も確認できます。
Claude Code セッションを再開する方法
現在のディレクトリで直前の会話を再開するには claude --continue を実行します。古い会話を一覧から選ぶには claude --resume を実行します。実行中のセッション内では、/resume コマンドを使うと終了せずに別の会話へ切り替えられます。短縮形は -c と -r です。
claude --continue
claude --resume
claude --resume auth-refactorセッション名または ID が分かっている場合は、引数として渡します。選択画面は表示されず、Claude Code は該当するセッションを直接開きます。
以下の内容は、2026年8月時点の公式セッションドキュメントに基づいています。Claude Code は頻繁にリリースされるため、バージョンによってフラグ名やキーボードショートカットが変わることがあります。ここに記載した内容と端末の表示が一致しない場合は、claude --help と公式ドキュメントを優先してください。
セッションとは何か
セッションは、プロジェクトディレクトリに紐付いた、保存済みの会話です。Claude Code が行ったツール呼び出しと、その結果を含むメッセージ履歴全体を保持します。Claude Code は会話の終了時に一度だけ保存するのではなく、作業中に継続的にディスクへ書き込みます。そのため、ターミナルを閉じたり SSH 接続が切れたりしても、会話は保持されます。
再開時に復元されるのはテキストだけではありません。会話履歴全体に加えて、そのセッションで使用していたモデルも復元されます。--agent を使用していた場合は、セッションの開始に使用したサブエージェントも復元されます。権限モードも復元されますが、安全上の例外があります。plan mode と bypass-permissions mode は復元されません。そのため、いずれかのモードで実行していたセッションを再開すると、新しいセッションの開始時と同じモードになります。
起動時のフラグであり、保存状態には含まれないため、復元されないものもあります。--add-dir で追加したディレクトリや、--mcp-config、--settings、--plugin-dir などのオプションは、再開時にもう一度指定する必要があります。settings.json などの設定ファイルは起動時に再読み込みされるため、そこに記載されている内容を再指定する必要はありません。
VPS でセッション履歴がより重要になる理由
意外に思う人が多い事実があります。トランスクリプトは、エージェントを実行したマシン上に保存されます。アカウントには保存されず、クラウドにも同期されません。そのマシンのディスク上にあるファイルです。
そのため、VPS の tmux ウィンドウに残したセッションは laptop のピッカーには表示されず、laptop で作成したセッションも VPS には表示されません。両者の間でデータが移動することはありません。多くの人が VPS で tmux 内の Claude Code を実行する方法で作業する場合、実際の会話履歴が蓄積される場所はサーバーです。ローカルで表示されるピッカーには、別の、より少ないセッションしか表示されません。
同じ分離はインターフェース間にも当てはまります。desktop app と VS Code extension は、それぞれ独自のセッション履歴を保持します。どちらも CLI の履歴ではありません。Claude Code on the web も独自の履歴を保持します。Cowork はさらに異なり、自分が所有するハードウェアではなく Anthropic sandbox 内で実行されます。そのため、Cowork と Claude Code のどちらを選ぶか検討している場合は、トランスクリプトの保存先も判断材料になります。
1 台のマシン内では、検索範囲は想像より広くなります。claude --resume <session-id> はまず現在のプロジェクトディレクトリとその git worktree を検索し、続いてそのマシン上の他のすべてのプロジェクトを検索します。覚えておくべき点は「そのマシン上」です。別のホストのセッション ID は解決されず、Claude Code は No conversation found with session ID: <session-id> と表示して通知します。
Claude Code はセッション履歴をどこに保存しますか
デフォルトでは、トランスクリプトは Claude Code の設定ディレクトリ内にある、~/.claude/projects/<project>/<session-id>.jsonl の形式のパスに保存されます。
<project> は、英数字以外のすべての文字をハイフンに置き換えた作業ディレクトリのパスです。そのため、/home/deploy/apps/api で開始したセッションは、-home-deploy-apps-api という名前のディレクトリに保存されます。変換後の名前が 200 文字を超える場合、Claude Code は名前を切り詰め、完全なパスのハッシュを追加します。これにより、ディレクトリ名がファイルシステムの制限内に収まります。
ファイル形式は JSONL です。1 行につき 1 つの JSON オブジェクトが含まれ、各行はメッセージ、ツール使用、またはメタデータのエントリを表します。テキストとして読み取れるため、内容を読むこと自体に問題はありません。
ただし、このファイルを対象にパーサーを作成することは推奨されません。エントリ形式は Claude Code の内部仕様であり、バージョン間で変更されます。そのため、これらのファイルを直接読み取るスクリプトは、更新によって動作しなくなる可能性があります。Anthropic の公式ドキュメントでも、代わりに /export または文書化されたスクリプトインターフェースを使用するよう案内しています。この理由からも、妥当な方法です。
保存場所と保持期間に関係する設定が 2 つあります。CLAUDE_CONFIG_DIR は設定ディレクトリ全体を移動します。これにより、トランスクリプトを別のボリュームや暗号化されたボリュームに保存できます。cleanupPeriodDays の settings.json は保存期間を制御します。デフォルトは 30 日で、最小値は 1 日です。
トランスクリプトファイルの実際の内容
すべてのツール結果が記録されるため、トランスクリプトには Claude が読み取ったファイルの内容と、Claude が実行したコマンドの出力が含まれます。Anthropic のデータ利用ページにも明記されているとおり、Claude Code はセッションのトランスクリプトを ~/.claude/projects/ 以下にプレーンテキストでローカル保存します。
サーバー上で何を意味するかを考えてみてください。サービスが起動しない理由を調べるために Claude が .env ファイルを読み取った場合、そのファイルの内容はホームディレクトリ内の JSONL ファイルに保存されます。コマンドが接続文字列を出力した場合も、その文字列が記録されます。情報が漏洩したわけではありません。トランスクリプトは実行内容を記録したものであり、それが本来の目的です。だからこそ、脅威モデルに含める必要があります。
- バックアップ:
/homeまたは/rootを通常どおりバックアップすると、トランスクリプトもバックアップ先へコピーされます。除外設定を追加するか、プロンプトとファイル内容のコピーがバックアップストアに保存されることを受け入れてください。 - スナップショットとイメージ: どのような理由で取得した VPS スナップショットにも、ディレクトリ全体が含まれます。2 台目のサーバーを構築するために複製するイメージも同様です。
- サーバー上の他のアカウント: 権限が適切に制限されていると思い込まず、
ls -ld ~/.claude ~/.claude/projectsで自分でモードを確認してください。 - 意図的なアップロード:
/feedbackコマンドは会話履歴を意図的に Anthropic へ送信します。/bugと/shareも同じ経路で情報を報告します。これらは自分で選択して実行する操作なので、確認する前に何に同意することになるのかを把握してください。
トランスクリプト自体を作成したくない場合は、CLAUDE_CODE_SKIP_PROMPT_HISTORY でトランスクリプトの書き込みを抑止できます。単一の非対話型 claude -p 実行に対しては、--no-session-persistence で抑止できます。どちらかを設定する前に、トレードオフを明確にしてください。resume はトランスクリプトを読み取って再開するため、トランスクリプトがなければ resume も使用できません。
古い会話を見つける方法
claude --resumeでピッカーを開きます。実行中のセッション内からは/resumeでも開けます。各行には、設定した場合はセッション名、設定していない場合は自動生成されたタイトルに加えて、最後のアクティビティからの経過時間、git ブランチ、ファイルサイズが表示されます。
ピッカーでは検索できます。/を押すか、そのまま入力を開始すると、一覧を絞り込めます。覚えておくと便利なショートカットは、検索範囲を広げるものです。Ctrl+Aでは、このマシン上のすべてのプロジェクトのセッションが表示されます。Ctrl+Wでは、現在のリポジトリにあるすべての worktree が表示されます。Ctrl+Bでは、現在の git ブランチに絞り込まれます。Spaceを押すと、セッションを選択する前に内容をプレビューできます。Ctrl+Rを押すと、選択中のセッション名を変更できます。
セッションに名前を付けると、これらの操作が大幅に簡単になります。claude -n auth-refactorで名前付きセッションを開始できます。会話が実際の作業になったと気付いた時点で、/rename auth-refactorを実行して名前を付けることもできます。名前付きセッションは、シェルから名前を指定して再開できます。
名前を付けていないセッションにも、自動生成されたタイトルが付きます。このタイトルは、最初のプロンプトを要約する小型で高速なモデルへのバックグラウンドリクエストによって生成されます。タイトルを使うと、ピッカー内の行を識別しやすくなります。ただし、タイトルは再開時の識別子ではありません。claude --resume <name>で一致するのは、自分で設定した名前だけです。
適切なセッションを見つけるためにトランスクリプトをgrepする
フレーズだけ覚えていて、ほかに手がかりがないことがあります。トランスクリプトはテキストなので、検索できます。
grep -rl "nftables" ~/.claude/projects/一致したトランスクリプトのパスが表示されます。.jsonl拡張子を除いたファイル名がセッション ID で、claude --resume <session-id>はその ID を受け取ります。grep を使って目的のセッションを特定し、実際に内容を読むには、そのセッションを再開するかエクスポートします。
注意点が2つあります。内容は JSON エスケープされているため、引用符を含むフレーズや、改行をまたいで分割されたフレーズは、リテラル文字列として一致しない場合があります。また、ツールの結果内で一致した場合、それは Claude がそのテキストを認識したことを示すだけで、誰かが入力したことを示すものではありません。
会話の読み取りとエクスポート
/exportは、現在の会話をプレーンテキストとして表示します。メッセージとツールの出力は、JSON ではなく読みやすい形式で書き出されます。引数を指定しない場合は、クリップボードまたはファイルを選択するメニューが開きます。ファイル名を指定すると、/export handover.txtはそのパスへ直接書き込みます。サーバー上の会話をノートパソコンへ移したり、チケットに添付したりする場合に適した方法です。
自動化する場合は、安定した利用を前提として提供されているインターフェースを使用してください。フックとステータスラインのコマンドには、入力としてtranscript_pathフィールドが渡されます。そのため、SessionEndフックを使用して、セッション終了時にトランスクリプトをアーカイブできます。保存済みのセッションを開かずに質問することもできます。
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'これにより、以前の会話に追加のプロンプトが送信され、構造化された JSON が返されます。次のリリースで変更される可能性がある JSONL 形式を解析するよりも、はるかに堅牢な基盤になります。
新しく開始するほうが再開より適している場合
再開すると履歴全体が復元され、その履歴全体が以降のすべてのリクエストに含まれます。昨日 4 時間続いた会話を今日継続するにはコストがかかります。長いセッションでトークン使用量がどのように積み上がるかでは、そのコストの実態を説明しています。
Claude Code には中間的な選択肢が用意されることがあります。Pro または Max プランで、100,000 トークンを超えるセッションを約 1 時間アイドル状態にした後に再開すると、最初のメッセージを送る前にダイアログが表示されます。この時点ではプロンプトキャッシュの有効期限が切れているため、どの選択肢を選んでも、次のリクエストでは履歴全体が 1 回再処理されます。
- Resume from summary は直ちに圧縮を実行します。そのため、以降のリクエストには履歴全体ではなく要約が含まれます。リクエストごとのコストは下がりますが、要約で省かれた内容は利用できなくなります。
- Resume full session as-is は会話を変更せずに読み込みます。すべての詳細を保持できますが、リクエストごとのコストは会話の規模に応じて増加します。
3 つ目の選択肢ではセッション全体を再開し、以降の再開時にダイアログが表示されないようにします。
判断は見た目ほど難しくありません。これから入力する内容が、すでに話した内容に依存するなら再開します。依存しないなら新しく開始します。履歴のずれは、意識して確認すれば簡単に見つかります。たとえば、Claude が 1 時間前に削除したファイルに言及したり、セッションの冒頭で決定した事項を再び議論したりする場合です。これは古いコンテキストです。引き継ぐと、トークンと精度の両方に悪影響があります。
古い会話の有用な部分が、再び必要になる決定や事実である場合は、再開による引き継ぎに頼らないでください。すべてのセッションから参照できる場所に書き残します。そのために Claude Code のメモリーファイルを使用します。
/branchについても把握しておくと役立ちます。現在の時点までの会話をコピーし、そのコピーに切り替えます。元の会話は変更されず、選択画面にも残ります。最初の方法を失わずに、別の方法を試す場合に使用します。
resume と compaction、memory の違い
これらは頻繁に混同されますが、解決する問題はそれぞれ異なります。
resume は、終了、再起動、または別の作業への移行後に、会話を再び利用できる状態にするための機能です。compaction は、継続中の会話で context window を管理するための機能です。/compact によって Claude が保持している内容が要約に置き換えられるため、後続のリクエストで送信される token 数を減らせます。context window がいっぱいになっている場合は compaction を使用します。詳しくは Claude Code の context window を管理する を参照してください。
memory はさらに別のものです。CLAUDE.md ファイルと auto memory には、すべての session の開始時に読み込まれる指示と事実が保存されます。そのため、これらは戻る対象の会話ではありません。二度と戻る必要がないように、書き留めておく情報です。
2 つの会話を同時に実行し、相互に連携させたい場合は、別の仕組みを使用します。両方が実行中であれば、Claude Code session 間でメッセージを送信することができます。これは、前日の session をディスクから再び読み込む問題とは異なります。
FAQ
Claude Code はセッション履歴をどこに保存しますか?
デフォルトでは、設定ディレクトリ内の ~/.claude/projects/<project>/<session-id>.jsonl に保存します。<project> は、英数字以外の文字をハイフンに置き換えた作業ディレクトリのパスです。各ファイルは JSONL 形式で、メッセージ、ツール使用、メタデータの各エントリを1行に1つの JSON オブジェクトとして記録します。CLAUDE_CONFIG_DIR を使用すると、設定ディレクトリを別の場所に移動できます。settings.json 内の cleanupPeriodDays ではトランスクリプトの保存期間を設定できます。デフォルトは 30 日で、最小値は 1 日です。
ノートパソコンの picker に VPS のセッションが表示されないのはなぜですか?
トランスクリプトはエージェントを実行したマシンのディスクに保存され、マシン間では同期されないためです。VPS 上の tmux 内で行った会話は、VPS にのみ存在します。SSH 経由で VPS 上から再開するか、ローカルに記録を残したい場合は、その中で /export を実行してテキストファイルをコピーしてください。
別のディレクトリで開始したセッションを再開できますか?
はい。セッション ID があれば再開できます。claude --resume <session-id> は、まず現在のプロジェクトディレクトリとその git worktree を検索し、次に同じマシン上の他のすべてのプロジェクトを検索します。picker 内で Ctrl+A を使用すると、マシン上のすべてのプロジェクトに検索範囲を広げられます。Ctrl+W を使用すると、現在のリポジトリのすべての worktree に検索範囲を広げられます。一致するものがない場合、Claude Code は No conversation found with session ID: <session-id> を報告します。
古いセッションを再開すべきですか。それとも新しいセッションを開始すべきですか?
次のメッセージが、その会話ですでに話した内容に依存する場合は再開してください。依存しない場合は新しく開始してください。再開すると履歴全体が読み込まれ、その後のすべてのリクエストに履歴が引き継がれるためです。コンテキストのずれにも注意してください。すでに削除したファイルについてセッションが繰り返し言及する場合、古いコンテキストが残っています。そのコンテキストによって、毎回のやり取りでトークンと精度が消費されます。
Claude Code によるトランスクリプトのディスクへの書き込みを停止できますか?
はい。CLAUDE_CODE_SKIP_PROMPT_HISTORY はトランスクリプトの書き込みを抑止します。--no-session-persistence は、非対話型の claude -p の1回の実行に限って書き込みを抑止します。先に影響を理解してください。resume はトランスクリプトを読み込むため、書き込みを無効にすると --continue と --resume は読み込む対象がなくなります。ファイルの存在自体ではなく保存場所が問題であれば、CLAUDE_CONFIG_DIR を暗号化ボリュームに指定し、代わりに cleanupPeriodDays を短くしてください。