Claude Codeが落ちても会話ログは消えない自動バックアップ設定


5月1日の夜、Claude Codeのセッションが応答停止した。 画像を多用したやり取りの末に「2000pxを超える画像が含まれる」エラーが出て、それ以降は何を打っても返事が来ない。

引継書を書こうと思っていたタイミングで止まったから、次のセッションへの橋渡しが書けない。 頭の中だけで作業を再現するのはきつい。

別ターミナルで新しいセッションを起動して、思い出せる範囲で引継書を書いた。 で、後から気づく。

会話ログは消えていなかった。

どこに残っていたか

Claude Codeは全セッションのやり取りをJSONL(1行=1メッセージのテキストファイル)形式で自動保存している。 場所はここ。

~/.claude/projects/<起動ディレクトリ名>/<セッションID>.jsonl

落ちたセッションIDのファイルを開いてみた。 21MB・1240行残っていた。最後のメッセージはエラー本文そのものだった。

つまりClaude Codeが応答停止しても、ローカルのファイルには全会話が記録されている。 新セッション側にこのファイルパスを渡せば、Claude側で読み返させられる。

「焦って思い出しモードで書いた引継書」より、JSONLを救出するほうが早かった。

設計上の弱点

ただし、この自動保存は内蔵SSD依存。 内蔵SSDが破損したら全部一緒に飛ぶ。SSDが壊れることは普通にある。

私の場合、Claude関連のファイルはすでに外付けSSDに集約してある。 でもこのJSONLだけは、Claude Code本体がデフォルトで内蔵SSDに書き込む仕様で、外付けには動かせない。

「クラッシュしたから救いたいファイル」が「クラッシュ時に最も壊れやすい場所」にある。 構造上のリスク。

Stopフックで外付けに自動コピー

Claude Codeには「Stopフック」(応答完了時に好きなコマンドを動かせる仕組み)がある。 ~/.claude/settings.json に設定を1つ足せば、現セッションのJSONLを外付けSSDへ自動コピーできる。

ポイントだけ書く。

  • 応答完了ごとに発火する
  • 非同期で動かせるから体感ゼロ
  • 外付けSSDが外れていれば、エラーで止まらず静かにスキップする
  • いま動いているセッションのIDを取り出して、そのIDの.jsonlだけを上書きコピーする

軽量なcpが1回走るだけ。1回数十ミリ秒。

どれくらい意味があるか

いまこの設定で、全セッションのログが外付けSSDに自動でコピーされ続けている。 内蔵SSDが死んでも、最後の応答までの会話は残る。

過去のセッションも、設定した時点で外付けに退避済み。 21MBの旧セッションが助かった。

学び

「壊れたとき、何が残るか」を先に確認しておくと、いざ壊れたときに焦らない。

Claude Codeに限らず、自分のメインの作業環境について、

  • どこに自動保存されているか
  • 壊れた時に救出する手順は何か
  • 救出経路は1つか2つか

これだけ把握しておけば、いざ画面が固まっても落ち着いて次のセッションを開ける。 冷静さは仕組みで作れる。