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