Claude Media
Claude Codeの/resumeが壊れていた3つの原因(v2.1.31以降)

Claude Codeの/resumeが壊れていた3つの原因(v2.1.31以降)

v2.1.31以降/resumeでセッション履歴が読めなくなった不具合の3つの根本原因と、公式changelogに載っている修正状況を扱います。

Claude Codeの/resumeでセッションが見えなくなった経緯

v2.1.31(2026年2月4日リリース)以降のClaude Codeでは、/resumeが過去のセッションのごく一部しか表示しない不具合が広く報告されました。GitHub issue #26123は、同種の報告12件を統合したissueです。統合元を合わせて29件超のリアクション、50件超のコメントが寄せられ、macOS・Windows・Linuxの3プラットフォームにまたがります。

セッションデータ自体は失われていません。.jsonl形式のトランスクリプトファイルはディスク上にそのまま残っており、失われていたのは「それらを見つけて選ぶためのUI」でした。報告の集計では、ディスク上に3,080件超の.jsonlファイルがあるのに/resumeピッカーには5〜10件ほどしか出ませんでした。/resumeの基本的な操作方法や復元される状態についてはClaude Codeの/resumeコマンドで過去の会話を再開するで扱っており、本記事ではこの時期に限定して起きた内部的な原因を掘り下げます。

3つの根本原因

issueには、コミュニティによるcli.js(v2.1.39時点)のリバースエンジニアリングを根拠に、独立した3つの原因が整理されています。いずれもコード解析による報告で、Anthropicが原因として説明したものではない点に注意が必要です。

原因1: sessions-index.jsonの更新が止まっていた

sessions-index.jsonは、~/.claude/projects/以下の各プロジェクトディレクトリに保存される索引ファイルです。複数の報告者の集計によれば、2月4日00:33 UTC以降に作成されたセッションはこのファイルへ一件も追加されなくなりました。ある報告では3,080件の.jsonlのうちインデックス済みは740件(24%)、2月4日以降分は0%だったとされています。同時期に~/.claude/usage-data/の更新も止まっていたという報告もあり、単一ファイルだけの不具合ではなさそうだという見立てでした。

この索引の欠落は、プランモードで計画を承認したあとに自動生成される実装用セッションで報告されていました。ある報告者によれば、プランモードで「Yes, clear context and auto-accept edits」を選ぶと実装セッションが生成されます。このセッションは367行分の完全な.jsonlを持ち、有効なslugも記録されていました。それでもsessions-index.jsonには一件も登録されていませんでした。同じ報告者のプロジェクトディレクトリでは156件の.jsonlのうち63件(40%)しかインデックスされておらず、割合としては先の集計と近い水準です。

v2.1.47のリリース後も、原因1については解消が確認されないという報告が続きました。別の報告者はv2.1.50の時点で、自分のマシンにある68件の.jsonlのうちインデックス済みは25件にとどまり、欠落していた43件はいずれも2月上旬以降に作られたセッションだったと報告しています。原因2は初期件数が10件から50件に増えて緩和されたものの、索引ファイルそのものの更新停止は別問題として残っていた、という見立てです。

原因2: ピッカーの初期表示件数が10件に固定されていた

別の報告者による難読化済みcli.js(v2.1.39)の解析では、/resumeピッカーはそもそもsessions-index.jsonという文字列をソース中に持たず、このファイルを読んでいないことが分かりました。代わりにreaddirSyncで.jsonlファイルを直接スキャンし、更新日時でソートしています。この処理の初期バッチ件数を決めるKパラメータはK=10にハードコードされていました。追加読み込みのトリガーはターミナルの行数に依存しており、24行程度の端末では条件を満たさず、追加読み込みが発火しないケースが確認されています。さらに、firstPromptもcustomTitleも持たない軽量なセッションをフィルターが捨てる処理も報告されており、表示件数をいっそう減らす要因になります。

原因3: Windowsでworktreeパスの大文字・小文字の比較が一致しなかった

別の報告者(#24729)によれば、複数worktreeを使う経路ではdir.name === sという大文字と小文字を区別する比較が使われていました。git worktree listはC:/...のような表記を返す一方、プロジェクトディレクトリ側はc--...のような表記でパスを保存しており、比較が静かに失敗してセッションが見つからなくなっていました。この症状は2つ以上のgit worktreeを併用している場合にだけ発生します。

公式changelogに載っている修正

issueのコメント欄では、v2.1.47で原因2と原因3が修正されたと報告されています。

あゆみ

/resumeの不具合と修正の経過

  1. 2026年1月31日v2.1.29

    問題なく動いていた最後のバージョンとして、issueで名指しされています。

  2. 2026年2月3日v2.1.30

    changelogには、--resumeのメモリ使用量を減らすため、セッション索引を軽量なstatベースの読み込みに置き換えたと記載されています。

  3. 2026年2月4日v2.1.31

    この日以降に作られたセッションが索引に追加されなくなったと報告されています。

  4. 2026年2月10日v2.1.39

    コミュニティのcli.js解析は、このバージョンを対象にしています。

  5. 2026年2月18日v2.1.47

    ピッカーの初期表示件数が10件から50件に増えました。Windowsでドライブレターの大文字・小文字が異なる場合のworktreeセッション照合も直っています。changelogはどちらもissue #26123を参照しています(原因2と原因3)。同じ版では、最初のメッセージが16KBを超える場合などにセッションが黙って落ちる不具合(#25721)と、コンパクション後にセッション名が失われる不具合(#26121)も直っています。

  6. 2026年8月25日v2.1.243

    50件の上限が外れ、スクロールに応じて追加読み込みされるようになりました(原因2の残り)。

原因1(sessions-index.jsonの更新停止)については、changelogに「索引ファイルの書き込みを再開した」と明記する項目はありません。一方で原因2の解析では、/resumeピッカー自体がこの索引ファイルを読んでいませんでした。v2.1.30のchangelogも、索引をstatベースの読み込みに置き換えたと書いています。つまり索引の更新停止がピッカーの表示件数へ与えた影響は、当初の報告ほど直接的ではなかった可能性があります。ただし~/.claude/usage-data/など索引以外の用途への影響が解消したかどうかは、changelogにも書かれていません。

影響を受けやすかった利用形態

3つの原因は独立していたため、実際に受ける影響も利用形態によって差がありました。

利用形態影響度理由
セッション数が10件前後までのライトユーザー影響度ほぼ影響なし理由ピッカーの初期表示件数(10件)に収まりやすく、原因2の症状が顕在化しにくい
数百件規模のセッションを抱えるヘビーユーザー影響度明確な影響あり理由原因1・原因2の両方が重なり、大半のセッションが事実上探せなくなる
プランモードの実装セッションを多用するユーザー影響度明確な影響あり理由実装用セッションが索引に登録されず、作業内容が多いセッションほど見失いやすい
複数のgit worktreeを併用するWindowsユーザー影響度条件次第理由原因3が加わり、worktree数が2以上のときだけ追加でセッションが見つからなくなる

セッション数が少ないうちは気づきにくく、プロジェクトが育って.jsonlが数百件を超えたころに症状が表面化する、という順序で報告が積み上がっていた点は、この不具合の発見が遅れた理由の一つとして読み取れます。

v2.1.47は12件の重複報告を統合したissueの後に出た

#26123は、作成時点で12件の重複報告を一本化したissueです。個別の小さな報告のままでは埋もれていた可能性がある不具合が、根本原因の解析つきで一つにまとまりました。v2.1.47のchangelogは、原因2と原因3の修正をこのissue番号で記録しています。

なお、Windowsのworktreeパス比較とは別に、Claude Code Desktopではセッション終了後もworktreeディレクトリが使い回される不具合も報告されています。こちらは/resumeが見つからない話ではなく、新規のはずのセッションに前回の状態が引き継がれる別種の症状で、Claude Codeのworktreeが再利用されるバグにまとめています。

セッションが見つからないときに切り分ける手順

同じ症状に心当たりがある場合は、まずディスク上のセッション数とピッカーの表示件数を突き合わせます。

# ディスク上の.jsonlファイル数を数える
find ~/.claude/projects -name "*.jsonl" | wc -l
 
# sessions-index.jsonの最終更新日時を確認する
for idx in ~/.claude/projects/*/sessions-index.json; do
  echo "$idx: $(stat -f '%Sm' "$idx" 2>/dev/null || stat -c '%y' "$idx" 2>/dev/null)"
done
 
# 現在のバージョンを確認する
claude --version

ディスク上のファイル数に対してピッカーの表示が極端に少ない場合は、次の順に切り分けます。

手順

ピッカーに出ないセッションの探し方

  1. 1

    バージョンを上げる

    v2.1.47以降、可能ならv2.1.243以降にします。原因2と原因3はここで解消します。

  2. 2

    ピッカーの範囲を広げる

    ピッカーは既定で現在のworktreeのセッションだけを出します。Ctrl+Wでリポジトリの全worktree、Ctrl+Aでこのマシンの全プロジェクトに広がります。

  3. 3

    名前かセッションIDで開く

    claude --resume <名前>は、名前が1件だけに一致すればそのセッションを直接開きます。複数に一致するとピッカーを開き、名前を検索欄に入れた状態になります。セッションIDならclaude --resume <session-id>で、別のディレクトリからも開けます(v2.1.223以降)。

claude --help(v2.1.287)は--resumeを「セッションIDで会話を再開する、または検索語つきで対話式ピッカーを開く」オプションと説明しています。

  -r, --resume [value]    Resume a conversation by session ID, or
                          open interactive picker with optional
                          search term

検索語を渡してもピッカーは開くので、索引の問題を迂回する手段ではありません。なおissueのコメント欄では、/renameで付けたカスタム名がピッカーに表示されないという別の不具合(原因1〜3とは別に報告された4件目の症状)も指摘されていました。セッションへの命名手段そのものはClaude Codeでセッションに名前をつけて管理するにまとめています。

/resumeを選んだ直後に読み込みが失敗してFailed to resume the conversationと表示される症状は、今回の3つの原因とは別の不具合です。対処法は「Failed to resume the conversation」の対処法にまとめているので、症状を混同しないよう切り分けてください。画面自体は表示されるのにキー入力だけが一切効かない症状もまた別種で、Claude Codeのresumeで入力できない問題とWSL2の対処法にまとめています。

issueのWorkaroundsの節には、上記以外の選択肢も挙がっていました。claude install 2.1.29で不具合前のバージョンに戻す方法、そしてコミュニティ製のインデックス再構築スクリプトを使う方法です。いずれもissue内で個人が共有した非公式な手段であり、Anthropicが検証・配布しているものではない点は踏まえておく必要があります。

原著者はissue内で、セッション履歴が見つからない問題(#26123)が、別の不具合(#26125)と併発しやすいことにも触れています。#26125は、コンパクション前の履歴をCtrl+O/Ctrl+Eで見られなくなる問題です。両方とも当時のセッション要約・メタデータ生成にまつわる変更と時期が近く、探す手段(#26123)と見る手段(#26125)の両方を同時に失うと、過去の作業に戻る手段がほぼ無くなるという指摘です。

まとめ

v2.1.31以降に報告された/resumeのセッション消失は、索引ファイルの更新停止・ピッカーの表示件数の固定・Windowsでのパス比較という独立した3つの原因が重なって起きていました。公式changelogでは、ピッカーの表示件数の問題とWindowsのパス比較はv2.1.47とv2.1.243で解消されています。索引ファイルの更新停止そのものを修正したという記載は、公式changelogにありません。同じ症状に遭遇したら、まずバージョンを確認し、ピッカーの範囲を広げてみてください。.jsonlがディスクに残っていれば、データは失われていません。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. github.com/anthropics/claude-code/issues/26123
  2. code.claude.com/docs/en/changelog
  3. code.claude.com/docs/en/sessions
この記事を共有:XはてブLinkedIn