SSD Nodes Learn 🎉 VPS $5.50/月〜
ガイド Matt Connor著者 Matt Connor

Claude Codeのセッションを再開する方法と履歴の場所

Claude Codeは名前や一覧からセッションを再開できます。実行したマシンに保存されるプレーンテキストのトランスクリプトの場所と、再開時に復元されない設定も解説します。

Claude Code セッションを再開する方法

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 ウィンドウ内に残したセッションは、ラップトップのセッション選択画面には表示されません。ラップトップのセッションも VPS には表示されません。両者の間でデータが移動することはありません。多くの人が VPS 上で tmux を使って Claude Code を実行する場合と同じように作業すると、実際の会話履歴はサーバーに蓄積されます。一方、ローカルで表示されるセッション選択画面には、別の、より少ないセッションしか表示されません。

同じ分離はインターフェース間にも適用されます。デスクトップアプリと VS Code 拡張機能は、それぞれ独自のセッション履歴を保持します。どちらも CLI の履歴とは別です。Claude Code on the web にも独自の履歴があります。

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 を設定すると、設定ディレクトリ全体を別の場所へ移動できます。これにより、トランスクリプトを別のボリュームや暗号化されたボリュームに保存できます。settings.json 内の cleanupPeriodDays は保存期間を制御します。デフォルトは 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 プランで、約 1 時間アイドル状態になっており、100,000 トークンを超えるセッションを再開すると、最初のメッセージを送る前にダイアログが表示されます。その時点ではプロンプトキャッシュの有効期限が切れているため、どの選択肢を選んでも、次のリクエストでは履歴全体が 1 回再処理されます。

  • 要約から再開すると、直ちにコンパクションが実行されます。そのため、以降のリクエストには履歴全体ではなく要約が含まれます。リクエストごとのコストは下がりますが、要約で省略された内容は利用できなくなります。
  • 完全なセッションをそのまま再開すると、会話は変更されずに読み込まれます。すべての詳細を保持できますが、リクエストごとのコストは会話のサイズに応じて増加します。

3 つ目の選択肢では完全な状態で再開し、それ以降の再開時にダイアログが表示されないようにします。

判断は見た目ほど難しくありません。これから入力する内容が、それまでの発言に依存するなら再開します。依存しないなら新しく開始します。以前削除したファイルについて Claude が言及したり、セッションの冒頭で決定したことを再び議論したりする場合は、コンテキストのずれに気付きやすくなります。これは古いコンテキストです。そのまま引き継ぐと、トークンと正確性の両方を同時に失います。

古い会話のうち、再び必要になる有用な内容が決定事項や事実である場合は、再開によって保持されることに依存しないでください。すべてのセッションから参照できる場所に書き留めます。そのために Claude Code のメモリファイルを使用します。

ここでは /branch についても知っておくと便利です。現在の時点までの会話をコピーし、そのコピーに切り替えます。元の会話は変更されず、選択画面にも残ります。元の方法を失わずに、別の方法を試す場合に使用します。

resume と compaction、memory の違い

これらは頻繁に混同されますが、解決する問題はそれぞれ異なります。

resume は、終了、再起動、または別の作業への移行後に、会話自体を再開するための機能です。compaction は、実行中の会話内にあるコンテキストウィンドウを扱います。/compact により Claude が保持している内容が要約に置き換えられるため、後続のリクエストで送信されるトークン数が減ります。問題がコンテキストウィンドウの上限到達であれば、使用するのは compaction です。詳しくは Claude Code のコンテキストウィンドウを管理する を参照してください。

memory はさらに異なります。CLAUDE.md ファイルと自動メモリには、各セッションの開始時に読み込まれる指示と事実が保存されます。そのため、これらは戻る対象の会話ではありません。二度とその会話に戻る必要がないように、書き留めておく情報です。

2 つの会話を同時に実行し、相互に連携させたい場合は、別の仕組みを使用します。両方が実行中であれば、Claude Code のセッション間でメッセージを送信する ことができます。これは、昨日のセッションをディスクから再び呼び出す場合とは異なる問題です。

FAQ

Claude Code はセッション履歴をどこに保存しますか?

デフォルトでは設定ディレクトリの ~/.claude/projects/<project>/<session-id>.jsonl に保存します。<project> は、英数字以外の文字をハイフンに置き換えた作業ディレクトリのパスです。各ファイルは JSONL 形式で、メッセージ、ツールの使用、メタデータのエントリごとに 1 行の JSON オブジェクトを含みます。CLAUDE_CONFIG_DIR を使うと設定ディレクトリを別の場所に移動できます。settings.json 内の cleanupPeriodDays ではトランスクリプトの保持期間を設定できます。デフォルトは 30 日で、最小値は 1 です。

ノートパソコンのピッカーに VPS のセッションが表示されないのはなぜですか?

トランスクリプトはエージェントを実行したマシンのディスクに保存され、マシン間で同期されないためです。VPS 上の tmux 内で行った会話は、VPS にのみ存在します。SSH 経由で VPS 上でそのセッションを再開するか、ローカルに記録を残したい場合は、そのセッション内で /export を実行してテキストファイルをコピーしてください。

別のディレクトリで開始したセッションを再開できますか?

セッション ID があれば再開できます。claude --resume <session-id> は、最初に現在のプロジェクトディレクトリとその git worktree を検索し、次に同じマシン上の他のすべてのプロジェクトを検索します。ピッカー内で 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 回に限り書き込みを抑制します。先に影響を理解してください。再開時にはトランスクリプトが読み込まれるため、書き込みを無効にすると --continue--resume に読み込む内容がなくなります。ファイルの存在自体ではなく保存場所が問題であれば、CLAUDE_CONFIG_DIR を暗号化ボリュームに指定し、代わりに cleanupPeriodDays を短くしてください。