Claude Codeがセッション履歴を保存する場所
Anthropicのセッションに関するドキュメントでは、その単位を次のように定義しています。「セッションとは、プロジェクトディレクトリに関連付けられた保存済みの会話です。」セッションは作業中に書き込まれます。「セッションは作業中にローカルのトランスクリプトファイルに継続的に保存されるため、終了後や /clear を実行した後でも戻ることができます。」
デフォルトでは、Claude Codeはトランスクリプトを ~/.claude/projects/<project>/<session-id>.jsonl にJSONLとして保存します。ここで <project> は、英数字以外の文字が - に置き換えられた作業ディレクトリのパスです。このフォーマットはユーザーが編集することを想定していません。「エントリのフォーマットはClaude Codeの内部仕様であり、バージョン間で変更されるため、これらのファイルを直接解析するスクリプトはリリースごとに破損する可能性があります。」
3つの設定によって、保存場所と保存期間を変更できます。CLAUDE_CONFIG_DIR はストレージを ~/.claude 以外に移動します。cleanupPeriodDays はトランスクリプトの保持期間を変更します。また、単発の実行では、claude -p とともに --no-session-persistence を使用することで、トランスクリプトの書き込みを完全に停止できます。
セッションが見つからないように見える理由
セッションが失われたと判断する前に、以下を確認してください。履歴が本当に消えているのは最後のケースのみです。
ピッカーは現在のワークツリーのみを表示する
セッションピッカーは最初は狭い範囲を表示します。デフォルトでは「バックグラウンドセッションを含む、現在のワークツリーからのセッション」と「他の場所で開始され、/add-dir で現在のディレクトリが追加されたセッション」が表示されます。ドキュメントには、表示範囲を広げるキーが記載されています。「Ctrl+W を使用してリポジトリのすべてのワークツリーに広げるか、Ctrl+A を使用してこのマシン上のすべてのプロジェクトに広げます。」
別のフォルダ、または同じリポジトリの別のワークツリーでセッションを開始した場合、それはディスク上に存在しますが、デフォルトのビューの外にあります。claude --continue はさらに範囲が狭く、「現在のディレクトリで最も新しいセッションを再開」します。
一部の種類のセッションはピッカーに表示されない
設計上、3つの種類のセッションが除外されます。「Claude Codeは、claude -p またはAgent SDKで作成されたセッションをセッションピッカーおよび claude --continue から除外します。」また、「最初のプロンプトが /loop コマンドであったセッションはピッカーに表示されず、claude --continue もそれらをスキップします。」ただし、IDを指定すればいつでもアクセスできます。「claude --resume <session-id> にセッションIDを渡すことで、再開することができます。」
バックグラウンドセッションがまだ実行中である
最新の会話がバックグラウンドで実行されている場合、claude --continue はそれを開きません。「Your most recent conversation is running in the background(最新の会話がバックグラウンドで実行されています)というメッセージと、そのセッションのIDを出力して終了します。」代わりに claude agents からアタッチしてください。
別のアプリのリストを探している
CLIは唯一のClaude Codeのインターフェースではありません。セッションのページには「デスクトップアプリ、claude.ai/code、およびVS Code拡張機能は、それぞれ独自のセッションリストを保持します」と記載されています。VS Codeのドキュメントでは、CLIとの関係を逆の視点から説明しています。「拡張機能とCLIは同じ会話履歴を共有します。CLIで拡張機能の会話を継続するには、ターミナルで claude --resume を実行します。」
これら2つの記述は必ずしも矛盾しません。各アプリは独自のリストを持ち、VS Code拡張機能の会話はCLIからもアクセス可能です。見つからない履歴がClaude CodeではなくClaudeアプリのチャットである場合は、見つからないClaudeのチャット履歴を検索するガイドで解説しています。クラウドセッションはまた異なります。これらはclaude.ai/codeにリストされ、Webドキュメントには「--resume はこのマシンのローカル履歴から会話を再開するものであり、クラウドセッションはリストしません」と記されています。
セッションが移動された
「/cd でセッションを移動すると、新しいディレクトリのプロジェクトストレージに再配置されるため、その後はそのディレクトリのピッカーに表示されます。」セッションの途中でディレクトリを変更した場合は、新しいディレクトリの下を探してください。
セッションが期限切れになった
これは履歴が本当に失われる唯一のケースです。Claude Codeは古いトランスクリプトを自動的に削除します。「Claude Codeは、保持期間を安全に判断できる限り、cleanupPeriodDays より古い以下のパスのファイルを削除します。デフォルトは30日で、最小値は1です。」サブエージェントのトランスクリプトは、親セッションと一緒に削除されます。
2つのデータは異なるルールに従います。自動メモリ(auto memory)は保持されます。「クリーンアップ処理は、プロジェクトの自動メモリディレクトリ内のメモリファイルを削除しません。」また、Claude DesktopまたはCoworkで開始、または最後に継続したセッションは、Claude Code v2.1.248以降で desktopSessionCleanupPeriodDays を設定しない限り、「期間を問わず」保持されます。
よくある誤ったアプローチ
claude --continue を実行して、それがすべてだと仮定すること。 これは現在のディレクトリで最も新しいセッションのみを開きます。
表示範囲を広げずにピッカーを検索すること。 デフォルトのビューは現在のワークツリーです。Ctrl+A で全プロジェクトを表示できます。
ピッカーで claude -p の実行を探すこと。 非インタラクティブセッションやSDKセッションは除外されます。これらはIDで再開してください。
エージェントビューでセッションを削除すると履歴も削除されると仮定すること。 削除されません。エージェントビューのドキュメントによると、セッションを削除した後も「そのトランスクリプトは claude --resume を通じてマシン上に残ります」。
セッションを回復またはクリーンアップするためにJSONLを編集すること。 フォーマットはバージョン間で変更されます。読み取り可能なコピーには /export を使用し、削除にはドキュメントに記載されているコマンドを使用してください。
単一セッション内のチェックポイントについては、Claude Codeセッションの巻き戻しに関するガイドで、戻ったときに何が復元されるかを解説しています。
解決策:ピッカーの範囲を広げ、IDで再開し、保持期間を設定して意図的に削除する
ステップ1:セッションを見つける
claude --resume でピッカーを開きます。セッションがそこにない場合は、Ctrl+W を押してリポジトリのすべてのワークツリーを表示し、次に Ctrl+A を押してこのマシン上のすべてのプロジェクトを表示します。別のワークツリーからセッションを選択すると、その場で再開されます。関連のないプロジェクトの場合、「Claude Codeは代わりに cd と再開コマンドをクリップボードにコピーします。」
セッションIDが分かっている場合は、ピッカーはまったく必要ありません。「任意のディレクトリから claude --resume <session-id> を実行できます」。Claude Codeは、まず現在のプロジェクトとそのワークツリーを探し、次に他のすべてのプロジェクトを探します。ファイル自体を渡すこともできます。claude --resume <transcript-path> は「その絶対パスにある .jsonl トランスクリプトファイルに保存されているセッション」を再開します。
作業した大体の時期しか覚えていない場合は、~/.claude/projects/ 以下のファイルを日付順にリストします。各プロジェクトにはそのパスにちなんで名付けられたフォルダがあり、各セッションは1つの .jsonl ファイルです。1ヶ月以上前のものが何もない場合は、cleanupPeriodDays の設定を確認してください。クリーンアップ処理によって削除された可能性があります。
ステップ2:必要な状態で再開する
再開すると、メッセージ以上のものが復元されます。ドキュメントには、「ツール呼び出しと結果を含む」会話履歴、セッションが実行されたエージェント、ドキュメントに記載されているケースでの権限モード、アクティブなゴール、および終了しなかったバックグラウンド作業のメモがリストされています。
一部の起動オプションは復元されません。「セッションが --mcp-config、--settings、--plugin-dir、--fallback-model、または --add-dir で追加されたディレクトリに依存していた場合は、再開時にそれらを再度指定してください。」セッションの途中で /add-dir を使って追加されたディレクトリも復元されません。settings.json や settings.local.json の設定は起動時に再度読み込まれるため、これらを繰り返す必要はありません。
オリジナルを変更せずに別のことを試したい場合は、再開時に --fork-session を追加します。セッションページではセッションの命名についても説明されており、名前を付けておくと次の検索が容易になります。claude --resume <name> は完全一致するセッションを直接再開します。長期の離席の前に、Claude Codeのアイドルコンパクションに関するガイドで、離席中に大規模なセッションが圧縮された場合に何が復元されるかを確認しておくとよいでしょう。
ステップ3:保持期間を設定し、重要なものを残し、意図的に削除する
保持期間を選択する。 settings.json で cleanupPeriodDays を設定し、トランスクリプトを30日より長く、または短く保持するようにします。管理された設定(Managed settings)によって組織全体に設定することもでき、その場合 Claude Code はその値を使用します。
重要なものは読み取り可能なコピーを保管する。 「/export を実行してメニューを開き、現在の会話をクリップボードにコピーするか、プレーンテキストファイルとして保存します。」エクスポートしたファイルは ~/.claude の外に保存してください。そのディレクトリ以下のパスを対象とする保持期間クリーンアップ処理は、それを無視します。
claude purge でプロジェクトの履歴を削除する。 このコマンドは、「プロジェクトのすべてのローカルな Claude Code 状態(トランスクリプト、タスクリスト、デバッグログ、ファイル編集履歴、プロンプト履歴行、および ~/.claude.json 内のプロジェクトのエントリ)」を削除します。まずは --dry-run でプレビューしてください。パージを実行すると自動メモリも削除されることに注意してください。claude-directoryのドキュメントには、削除対象として「projects/ 以下のトランスクリプトと自動メモリ」が挙げられています。Claude Codeがプロジェクトについて学習した内容を保持したい場合は、確定する前に計画を確認してください。なお、v2.1.288より前は、このコマンドは claude project purge でした。
claude rm でバックグラウンドセッションをリストから削除する。 これによりエージェントビューは整理されますが、トランスクリプトはマシン上に残り、claude --resume を通じて引き続き利用可能です。
claude.ai/code でクラウドセッションを削除する。 「セッションを削除すると、セッションとそのデータが完全に削除されます。この操作は取り消せません。」サイドバーのアーカイブフィルター、またはセッションメニューから削除できます。
MemoryLakeでの設定方法
セッション履歴は、作業がどのように進んだかの記録です。古いセッションに戻る目的はもっと簡潔なはずです。到達した決定、却下したアプローチ、最終的に機能した設定などです。これらは長いトランスクリプトの中で見失われやすく、保持期間のクリーンアップが実行されたり、プロジェクトをパージしたりすると一緒に消えてしまいます。
MemoryLake は、そうした結論を管理された1つのリストに保持するためのメモリレイヤーです。ディスク上にどのトランスクリプトが残っているかに関係なく、Claude Codeや、接続している他のアシスタント(ChatGPTやCodexなど)から利用できます。
エントリはあなた自身の言葉で自分で書き込みます。セッションのトランスクリプト、~/.claude ディレクトリ、自動メモリ、クラウドセッション、またはベンダーのストアから何かが読み取られたり、書き込まれたり、削除されたりすることはありません。機密情報や資格情報は除外し、プロジェクトの詳細については組織のポリシーに従ってください。
ステップ1:APIキーを作成する
サインインし、ダッシュボードからキーを生成します。このキーはMemoryLakeのワークスペースに属し、Anthropicのアカウントとは異なります。

ステップ2:最初のメモリをアップロードする
古いセッションを検索する目的となるものから始めましょう。プロジェクトに関する決定、機能しなかったアプローチとその理由、繰り返し発生する問題を解決したコマンドや設定などです。1つのエントリにつき1つの決定を、日付と所属するプロジェクトとともに入力します。

ステップ3:AIとエージェントを接続する
Claude Codeや、使用している他のアシスタントを接続します。これにより、先月のトランスクリプトを再開することなく、書き留めた結論から新しいセッションを開始できます。

実務における変化
最初の違いは、消えてしまったように見えるセッションが減ることです。ピッカーが現在のワークツリーから開始されることを知っていれば、Ctrl+A や claude --resume <session-id> を使って、ディスク上にまだ存在するセッションにアクセスできます。
2つ目は、削除が意図的なものになることです。保持期間は自分で選択する設定であり、claude purge --dry-run は削除前に計画を表示します。また、エージェントビューからセッションを削除してもトランスクリプトは残るということを理解できます。
3つ目は、古いトランスクリプトへの依存が減ることです。セッションは設計上、期限切れになります。結論を書き留めておくことで、30日のクリーンアップ処理で削除されるのは記録だけであり、プロジェクトに関する知識は失われません。並行するセッション間でそれを共有することは関連する課題であり、これについてはClaude Codeセッション間でコンテキストを共有するガイドで解説しています。
Claude Codeセッション履歴のベストプラクティス
心配する前に範囲を広げる。 ピッカーで Ctrl+W、次に Ctrl+A を押します。
-p やSDKの実行はIDで再開する。 これらはピッカーには表示されません。
後で戻る予定のセッションに名前を付ける。 正確な名前を指定すれば直接再開できます。
再開時に起動フラグを再指定する。 MCP設定、設定ファイル、プラグインディレクトリ、および追加されたディレクトリは復元されません。
cleanupPeriodDays を意図的に設定する。 デフォルトは30日です。
重要なものはエクスポートする。 /export のコピーを ~/.claude の外に保存します。
パージを実行する前には必ずドライランを行う。 トランスクリプトとともに自動メモリも削除されます。
claude rm はトランスクリプトを保持することを覚えておく。 履歴を完全に消去したい場合は claude purge を使用します。
複数のコーディングエージェントを使用している場合は、見つからないCodexのチャット履歴を検索するガイドで、Codexに関する同様の疑問をカバーしています。
結論
Claude Codeは、セッションを ~/.claude/projects/ 以下のファイルとして、プロジェクトごとに1つのフォルダ、セッションごとに1つのファイルで、デフォルトで30日間保持します。見つからないように見えるセッションは、ピッカーのデフォルトビューの外にあるか、ピッカーに表示されない -p やSDKの実行であるか、バックグラウンドでまだ実行中であるか、別のアプリのリストにあるか、あるいは /cd で移動された可能性があります。期限切れになったセッション、またはパージされたセッションのみが、実際に失われたセッションです。
ピッカーの範囲を Ctrl+W と Ctrl+A で広げ、IDやトランスクリプトのパスが分かっている場合はそれで再開し、起動フラグを再指定してください。そして、保持期間を選択し、残す必要のあるものをエクスポートし、プロジェクトの履歴を削除したい場合は自動メモリも一緒に削除されることを念頭に置きつつ、--dry-run を指定して claude purge を使用してください。