CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-04-27中級

Claude Code の `claude --resume` が前回のセッションを復元できない時の対処法

Claude Code の --resume / --continue で前のセッションが復元できない時に確認すべき場所を、セッションファイル・設定・バージョン差・マシン跨ぎの順に整理した実用ガイドです。

claude-code129troubleshooting61session3resumerecovery2

「昨日まで動いていた claude --resume が、今朝から急に何も復元しない」——これは大規模リポジトリで Claude Code を日常的に使っていると、意外と多く遭遇するトラブルです。タスクの途中で会話が消えると、コンテキストの再構築に時間が取られ、生産性が一気に落ちます。

私は普段、4 つのドメイン(claudelab・rorklab・gemilab・antigravitylab)を横断して claude --resume を多用しているのですが、これまでに何度か「セッションが取り出せなくなる」パターンに遭遇してきました。原因は大きく 4 つに分類できて、それぞれチェックする場所が違います。ここでは上から順番に試せばだいたい 5 〜 10 分で原因の切り分けが終わる手順としてまとめておきます。

なぜ claude --resume が復元しないのか — 4 つの原因パターン

Claude Code のセッション管理は、ローカルの JSONL ファイル(会話履歴)と設定ディレクトリ(~/.claude/)の組み合わせで動いています。復元に失敗する典型的な原因は次の 4 つに整理できます。

  • セッションファイルが存在しない / 名前がずれている: 別ディレクトリで起動した、/clear でセッション ID が変わった、外付けディスクをマウントし忘れた、など物理的に履歴を読めていないパターンです。
  • 設定ファイルの破損や不整合: ~/.claude/settings.json などが壊れている、または手動で編集したフックが空配列になっている時に発生します。
  • バージョン違いによる JSONL スキーマの非互換: npm i -g @anthropic-ai/claude-code で大きく更新した直後、古い JSONL を新バージョンが読み込めないことがあります。
  • マシン跨ぎ・WSL 跨ぎでパスが変わる: 自宅 Mac と会社 Windows、あるいは macOS ホストと WSL 内で同じセッションを共有しようとして、パスの差異で読み込みに失敗するケースです。

ここからは、それぞれを切り分けるためのコマンドと、優先順位の高い順に対処方法を紹介していきます。

ステップ 1: セッションファイルが残っているかを確認する

まず最初に、そもそも履歴ファイルがディスク上に残っているかをチェックします。Claude Code は ~/.claude/projects/{プロジェクトのハッシュ化パス}/ 配下に、セッション ID をファイル名にした JSONL を保存します。

# 直近 10 件のセッションファイルを更新時刻順に表示します
# Mac / Linux / WSL 共通で動くワンライナーです
ls -lat ~/.claude/projects/*/*.jsonl 2>/dev/null | head -10
 
# 期待する出力例:
# -rw-r--r-- 1 user group 12345 Apr 27 08:45 ~/.claude/projects/-Users-user-myrepo/01HA...jsonl

ファイルがまったく存在しない場合は、~/.claude/projects/ の下に作業中のプロジェクトに対応するディレクトリがあるか確認してください。Claude Code はカレントディレクトリ(pwd)を base に内部 ID を生成するため、起動したディレクトリが違うと別プロジェクト扱いになって履歴が引き出せません。「いつもと違う場所からターミナルを開いたかもしれない」と感じたら、過去に作業した場所で cd してから claude --resume を再実行してみてください。

JSONL の中身を覗いて、最後に書き込まれた行のタイムスタンプを確認すると、どのセッションが「途中で死んだ」のかも特定できます。

# 直近の JSONL の最後の行をパースして時刻を抽出します
LATEST=$(ls -t ~/.claude/projects/*/*.jsonl 2>/dev/null | head -1)
tail -1 "$LATEST" | python3 -c "import sys,json; d=json.loads(sys.stdin.read()); print(d.get('timestamp', d.get('created_at')))"

ここでタイムスタンプが出力されれば、ファイル自体は健全です。ステップ 2 に進んで設定側の不整合を確認します。

ステップ 2: 設定ファイルと CWD のひも付けを確認する

履歴ファイルは存在するのに claude --resume のリストに出てこない場合、設定側の不整合を疑います。私が遭遇した中で多かったのは、以下の 2 ケースです。

第一に、~/.claude/settings.json の JSON が破損しているケース。フックを手で編集したり、エディタが BOM を付けて保存してしまったりすると、Claude Code は読み込みエラーで黙ってデフォルト動作にフォールバックすることがあります。次のコマンドで JSON の構文だけ素早く検査できます。

# 設定ファイルの JSON 構文を検証します(OK なら何も出ません)
python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "OK"

OK が表示されない場合は、エディタで開いて末尾のカンマや BOM を除去するか、思い切って一時的にリネーム(mv ~/.claude/settings.json ~/.claude/settings.json.bak)してデフォルト状態で動くか確認します。動けば設定の中身が原因です。

第二に、カレントディレクトリのリンク(シンボリックリンク/macOS の Firmlink)でパスがずれているケース。/Users/me/repo/private/Users/me/repo のように、解決後のパスが違うと別プロジェクト扱いになります。

# 現在のディレクトリの実体パスを確認します
pwd -P
# 期待する出力例: /Users/me/repo (シンボリックリンクの場合は実体側のパス)

pwdpwd -P で結果が違っていたら、pwd -P の結果に cd してから claude --resume を試してみてください。これで戻ってくることが結構あります。さらに深い背景はメモリと設定の関係をまとめたCLAUDE.md と Memory の仕組みを使い倒す実践ガイドにも書きましたので、合わせて読むと理解が早いです。

ステップ 3: バージョン更新直後の JSONL 非互換を疑う

「先週は動いていたのに、npm i -g @anthropic-ai/claude-code で更新したら復元できなくなった」というケースは、JSONL の内部スキーマが変わった影響であることが多いです。Claude Code 2.x 以降、ツール呼び出しの記録形式が拡張されており、古い行を含むファイルは新バージョンで読み飛ばされる場合があります。

# 現在の Claude Code バージョンを確認します
claude --version
# 出力例: 2.4.1
 
# 直近 JSONL の先頭行と末尾行のスキーマバージョンを比較します
LATEST=$(ls -t ~/.claude/projects/*/*.jsonl 2>/dev/null | head -1)
head -1 "$LATEST" | python3 -c "import sys,json; print(json.loads(sys.stdin.read()).get('version','?'))"
tail -1 "$LATEST" | python3 -c "import sys,json; print(json.loads(sys.stdin.read()).get('version','?'))"

先頭と末尾でバージョンが違う場合は、途中でアップデートが入った混在ファイルです。この場合は --resume 一覧には出るものの、復元時にツールコールの再生で詰まることがあります。対処は以下のいずれかです。

  • 古い行を切り捨てて末尾だけ残す: tail -200 file.jsonl > file.jsonl.new && mv file.jsonl.new file.jsonl(バックアップ必須)
  • 旧バージョンを npm i -g @anthropic-ai/claude-code@2.3.x で一時的に戻して履歴を取り出し、要点だけメモして新バージョンで再開する
  • --resume を諦めて claude --print "前回の続きをまとめて" で新規セッションを起こす

バージョン互換性そのものについてはClaude Code のセッション管理と --resume を実務で使い倒すで詳しく検証していますので、運用設計の参考にしてください。

ステップ 4: マシン跨ぎ・WSL 跨ぎの落とし穴

最後に、複数マシン間でセッションを移そうとして失敗するケースです。~/.claude/projects/ をクラウドストレージ(Dropbox / iCloud Drive)に置いて同期している方は、ハッシュ化されたディレクトリ名がパスに依存することを思い出してください。

/Users/alice/repo で作ったセッションを C:\Users\alice\repo--resume してもヒットしません。同様に macOS から WSL に移ると /mnt/c/Users/alice/repo になって別物扱いです。回避策は次のとおりです。

  • CLAUDE.md を git 管理する: セッション本体は移植せず、CLAUDE.md と要件メモを各リポジトリに置いておけば、別マシンでも同じコンテキストですぐに作業を再開できます
  • 会話の要点だけテキストとしてエクスポートする: cat ~/.claude/projects/.../latest.jsonl | jq -r '.message.content[0].text // empty' | tail -50 のように本文だけ取り出して別マシンに送る方法が現実的です
  • どうしても復元したい場合は同じパス構造で作業ディレクトリを切る: シンボリックリンクで /Users/alice/repo を WSL 側に作るなど、パスを揃える小細工が有効です

中断からの復帰自体はClaude Code でタスクが中断した時の復帰ガイドに手厚くまとめてありますので、本記事の手順で復元できなかった場合はそちらの「ゼロから再構築する手順」に進んでください。

それでも復元できない時に試したい安全策

ここまでで原因のほとんどはカバーできるはずですが、最後の手段として知っておくと安心な「安全策」を 3 つ紹介します。

# 1. プロジェクトディレクトリの全 JSONL から最新の "user" メッセージだけ抜き出します
# (要点を AI にまとめ直してもらう用のテキストとして使えます)
ls -t ~/.claude/projects/$(echo $PWD | sed 's|/|-|g')/*.jsonl 2>/dev/null | head -1 | \
  xargs -I {} sh -c 'jq -r "select(.message.role == \"user\") | .message.content" {}' | tail -10
 
# 2. ~/.claude/projects/ を丸ごとバックアップしてから新規開始します
cp -r ~/.claude/projects ~/.claude/projects.bak.$(date +%Y%m%d) && \
  echo "✅ Backup saved. Now safe to start fresh."

ファイルさえバックアップしておけば、後から要点を抜き出すことは可能です。逆に言えば、復元できなくなる事態を防ぐ最大の予防策は、定期的なバックアップと CLAUDE.md による「コンテキストの外部化」です。

最後に一言。私の経験上、--resume のトラブルは「前回の作業に戻れない」というショックで焦ってしまい、設定ファイルを乱暴に書き換えて状況を悪化させるパターンが一番多いです。まずは深呼吸して、本記事の手順を上から順番に確認してみてください。それで解決しなければ、CLAUDE.md と数行のメモから新規セッションを起こすほうが、結果的に早く本来の作業に戻れることもあります。

claude --resume のトラブル切り分けは結局のところ「履歴が残っているか」「設定が壊れていないか」「バージョンが揃っているか」「パスがずれていないか」の 4 点です。次に困った時は、この 4 点だけ思い出していただければ十分です。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-04-14
Claude Code がタスク途中で止まった時の安全なリカバリーガイド ── 作業を失わず再開する5つのステップ
Claude Code がタスク途中で止まる・応答しなくなる問題の原因別診断と、git を活用して作業内容を確認しながら安全に再開する実践的な5ステップを解説します。
Claude Code2026-06-18
壊れた settings.json で Claude Code が起動しなくなったとき — セーフモードの挙動と設定の分け方
settings.json の構文ミスで Claude Code が起動しなくなったときに、どの階層が壊れているかを切り分けて数分で復旧する手順と、自動運用で壊れにくい設定の分割・検証パターンをまとめました。
Claude Code2026-06-10
git add -A が .bak バックアップまで巻き込む — in-place 修正スクリプトと自動コミットの落とし穴
sed -i や自作の --fix スクリプトが残す .bak バックアップを git add -A が無言で取り込み、本番リポジトリに混入させてしまう問題。なぜ気づきにくいのか、scoped add と .gitignore でどう塞ぐかを実例で整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →