はじめに
VSCodeの拡張機能として使っているClaude Codeで作業していたフォルダの名前を変更したところ、それまでのセッション(会話履歴)が一覧から見えなくなってしまいました。
「せっかくのやり取りが消えた…」と焦りましたが、調べてみると データが消えたわけではなく、Claude Code側の「紐付け」が切れていただけ でした。
この記事では、なぜこのようなことが起きるのか、そしてどう対処すればよいのかを、Claude Codeを使い始めたばかりの方にもわかるように解説します。
対象読者
- Claude Codeを使い始めたばかりの方
- VSCodeの拡張機能でClaude Codeを使い始めたばかりの方
- フォルダ名を変更したら、セッションが見当たらなくなって困っている方
- Claude Codeがどうやってセッションを管理しているのか知りたい方
前提知識: セッションってなに?
Claude Codeで会話をすると、その内容は自動でファイルに保存されます。
この保存された会話のまとまりを「セッション」と呼びます。
セッションは、あとで「続きから再開する」ときに使われます。
VSCodeやターミナルでClaude Codeを開くと、そのフォルダで過去にやり取りした会話が一覧で出てきますよね。
あれは、この仕組みのおかげです。
Claude Codeは、セッションが「どのフォルダのものか」を、何を見て判断しているのか。
ここが今回の話の肝になります。
何が起きたのか
以下のように、フォルダの名前だけを変更しました。
- 旧:
./old-repo - 新:
./new-repo
フォルダの中身(ソースコードやgitの履歴)はまったく同じです。
変えたのは、フォルダの名前だけです。
ところが、新しい名前のフォルダでClaude Codeを開くと、これまでのセッションが一覧に出てこなくなりました。
原因: セッションは「フォルダの住所」で管理されている
Claude Codeは、セッションを保存するとき「これはこのフォルダの会話です」というラベルを貼っています。
このラベルの正体が、フォルダのパス、つまり住所のようなものです。
つまりClaude Codeは、フォルダの「中身」を見ているのではなく、「パスの文字列」だけを見て「これは前と同じフォルダだ」「これは初めて見るフォルダだ」を判断しています。
これは、荷物の中身が同じでも、宛名ラベルを貼り替えたら「別の荷物」として扱われてしまうのと似ています。
そのため、フォルダの中身が一字一句同じでも、フォルダ名(パス)を変えた瞬間に、Claude Codeにとっては「まったく新しいフォルダ」に見えてしまうのです。
結果として起きること
Claude Codeのセッションは、実際には次の場所に保存されています。
C:\Users\<ユーザー名>\.claude\projects\
このフォルダの中に、作業フォルダごとの名前が変換されたサブフォルダが作られ、その中に .jsonl ファイルとしてセッションが保存されています。
- 旧パス(
./old-repo)用のセッション履歴は、C:\Users\<ユーザー名>\.claude\projects\の中の、./old-repoに対応するサブフォルダに、そのまま残っている(削除されていない) - 新パス(
./new-repo)で開いたワークスペースの一覧には、旧パスのサブフォルダにある履歴が表示されない(別のサブフォルダとして扱われるため) - 見た目上は「消えた」ように見えるが、実際には上記のフォルダの中にちゃんと存在している
⚠️ 注意: セッションは永久には残りません
Claude Codeには、古くなったファイルを自動で削除する仕組みがあります。.jsonlファイルは既定で30日を過ぎると削除されます。この期間はsettings.jsonのcleanupPeriodDaysで変更できます(最小値は1日)。
フォルダ名を変更してから時間が経っている場合は、そもそもセッションが削除済みの可能性があります。まずはファイルが残っているかを確認してから、次の解決法に進んでください。
解決法
状況に合わせて、次の2つの方法があります。
方法1: 一時的に旧パスへ戻して確認する
一番かんたんで確実な方法です。フォルダ名を ./old-repo に戻せば、Claude Code側は「前から知っているフォルダだ」と認識し、通常通りセッション一覧に表示されます。
過去のやり取りを手っ取り早く対話として再開したい場合は、この方法をおすすめします。
方法2: 新しいフォルダ側にセッションを引き継ぐ
旧パス(./old-repo)に対応するサブフォルダの中にある .jsonl ファイルを、新パス(./new-repo)に対応するサブフォルダへコピーする方法です。
Claude Code拡張機能は、開いているフォルダのパスに対応するサブフォルダの中にある .jsonl ファイルを探して一覧表示していると考えられるため、コピーすれば新しいパス側のセッション一覧に表示されます。
コピー先のサブフォルダを先に作る
前述の通り、Claude Codeのセッションは C:\Users\<ユーザー名>\.claude\projects\ の配下に、フォルダごとのサブフォルダが作られて保存されます。つまり、新パスに対応するサブフォルダも、リネーム後のフォルダでセッションを1つ開始してはじめて作られます。
まずはセッションを1つ開始してコピー先を用意してから、コピー作業に進んでください。
.jsonl と同じ名前のフォルダも一緒にコピーする
サブフォルダを開くと、.jsonl ファイルと並んで、同じ名前のフォルダが置かれていることがあります。
projects/<パス変換名>/
├── 3ba55ccb-....jsonl ← セッション本体
└── 3ba55ccb-.../ ← 同じ名前の付属フォルダ
これは別のセッションではなく、そのセッションの付属データが入ったフォルダです。中身は次の2種類です。
-
subagents/… サブエージェント(セッションの中から起動された別のエージェント)の会話ログです。1体につきagent-xxxx.jsonlとagent-xxxx.meta.jsonの2つのファイルが作られます -
tool-results/… サイズの大きいツールの実行結果です。本体の.jsonlに直接書き込むとファイルが膨らんでしまうため、別ファイルに退避されています
この付属フォルダは、すべてのセッションに作られるわけではありません。サブエージェントを一度も起動せず、大きなツール出力も発生しなかったセッションでは作られず、.jsonl ファイルだけになります。
サブエージェントを使ったセッションを引き継ぎたい場合、.jsonl ファイルだけをコピーすると、サブエージェントの会話ログが抜け落ちてしまいます。同じ名前のフォルダがある場合は、必ず一緒にコピーしてください。
なお、同じ場所に memory という名前のフォルダが置かれていることがありますが、これはセッションとは別のものなので、コピーの対象ではありません。
リネームしたフォルダで対話として再開したい場合は、この方法をおすすめします。
⚠️ 注意
この方法は拡張機能の内部の仕組みに基づいた推測であり、公式にサポートされた操作ではありません。実行する前に、必ず元の.jsonlファイルのバックアップを取っておきましょう。
まとめ
- Claude Codeのセッションは、フォルダのパス文字列を鍵にして保存されている
- フォルダの中身が同じでも、フォルダ名(パス)を変えると別のワークスペース扱いになり、本来確認したいセッションが表示されなくなる
- セッションデータそのものは消えておらず、旧パスに対応するサブフォルダ内に
.jsonlファイルとして残っている - ただし、
.jsonlファイルは既定で30日を過ぎると自動削除されるため、永久に残るわけではない - 対処法は次の2つ
- 旧パスに戻す(対話を再開したい場合)
- 新パスに対応するサブフォルダに
.jsonlをコピーする(リネーム前の対話をリネーム後も続けたい場合)
おわりに
フォルダ名の変更は日常的によくある作業ですが、Claude Codeが「パスの文字列」でセッションを管理していることを知らないと、今回のように「履歴が消えた」と勘違いしてしまいます。
これからフォルダ構成を見直す予定がある方は、事前にこの挙動を知っておくと、慌てずに対応できるはずです。