原文(日本語に翻訳)
並行ツール実行中に孤立したツール結果が原因でセッション再開が失敗する問題を修正しました
原文(英語)
Fixed session resume failures caused by orphaned tool results during concurrent tool execution
概要
Claude Code v2.1.0で修正された、並行処理時のセッション再開バグです。以前のバージョンでは、Claudeが複数のツールを並行実行している最中にセッションを終了すると、未完了のツール結果(orphaned tool results)がセッションデータに残り、再開時にデータ不整合エラーが発生していました。この修正により、孤立したツール結果を自動的にクリーンアップし、セッションが正常に再開できるようになりました。
修正前の問題
症状
bash
# 複数ファイルの並行読み取り中
claude
> これらのファイルすべてを読んで分析:
> - src/file1.js
> - src/file2.js
> - src/file3.js
# Claudeが並行してReadツールを実行
# file1.js読み取り中... ✓
# file2.js読み取り中... (処理中)
# file3.js読み取り中... (処理中)
# ユーザーがCtrl+Cで中断
^C
# セッションが保存される(不完全な状態で)
# 後でセッション再開を試行
claude --resume <session-id>
# エラー: Failed to resume session
# Error: Orphaned tool results detected
# セッションが復元できない根本原因
並行ツール実行:
1. Tool Call: Read file1.js (tool_id=1) → 完了
2. Tool Call: Read file2.js (tool_id=2) → 実行中
3. Tool Call: Read file3.js (tool_id=3) → 実行中
セッション中断(Ctrl+C):
- tool_id=1: 結果あり(完了)
- tool_id=2: 呼び出しのみ、結果なし(孤立)
- tool_id=3: 呼び出しのみ、結果なし(孤立)
セッション保存:
- 不整合なデータが保存される
セッション再開:
- 孤立したツール呼び出しを検出
- データ不整合エラー
- 再開失敗修正後の動作
自動クリーンアップと再開
bash
# 並行ツール実行中に中断
claude
> これらのファイルを読んで
# Ctrl+C
# 修正後: 保存前に孤立ツール結果を自動クリーンアップ
# ✓ セッションが正常に保存される
# セッション再開
claude --resume <session-id>
# ✓ 成功: セッションが復元される
# Claudeは中断前の状態から継続実践例
大規模コードベースの分析中断
複数ファイルの分析中に中断しても、再開可能です。
bash
# 大規模プロジェクトを分析
claude
> このディレクトリ全体を分析して
> src/**/*.js (100ファイル)
# Claudeが複数ファイルを並行読み取り
# 30ファイル処理完了...
# 残り70ファイル処理中...
# ユーザーが中断(急用など)
Ctrl+C
# 修正前: セッション再開不可、最初から
# 修正後: 再開可能
# 後で再開
claude --resume
# ✓ 30ファイルの分析結果は保持
# ✓ 残り70ファイルから継続エージェントの並行タスク中断
複数エージェントが並行実行中の中断からの回復です。
bash
# 複数のエージェントを並行起動
claude
> /plan を実行
# Plan agent起動(並行で複数ファイルを読み取り中)
# ユーザーがセッション中断
Ctrl+C
# 修正後: 孤立した結果をクリーンアップ
# セッション再開
claude --resume
# ✓ Plan agentの進捗が保持される
# ✓ 中断前の状態から継続検索タスクの中断と再開
大規模な検索タスク中の中断でも再開可能です。
bash
# 大規模なコードベースを検索
claude
> "TODO" を含むファイルをすべて検索
# 1000ファイルを並行検索中...
# 500ファイル処理完了
# 残り500ファイル処理中
# Ctrl+C で中断
# 修正後: セッション再開可能
claude --resume
# ✓ 500ファイルの検索結果は保持注意点
- この修正は Claude Code v2.1.0(2026年1月7日リリース)で実装されました
- 孤立ツール結果(Orphaned Tool Results)とは:
- ツール呼び出し(Tool Call)は存在するが、対応する結果(Tool Result)が存在しない状態
- 並行ツール実行中の中断で発生
- 修正の詳細:
- セッション保存前に孤立したツール呼び出しを検出
- 対応する結果がないツール呼び出しを自動的に削除
- セッションデータの整合性を保証
- 影響を受けるシナリオ:
- 並行ツール実行中のCtrl+C中断
- バックグラウンドタスク実行中のセッション終了
- エージェントの並行実行中の中断
- ネットワーク障害による予期しない中断
- クリーンアップの動作:
- 完了したツール結果のみ保持
- 未完了のツール呼び出しを削除
- セッション再開時に不整合がない状態を保証
- データ損失の範囲:
- 未完了のツール実行のみ失われる
- 完了済みのツール結果は保持される
- 会話履歴は完全に保持される
- セッション再開の動作:
- 中断時点の完了済みコンテキストから継続
- 未完了タスクは再実行される場合がある
- デバッグ:
--debugフラグで孤立ツール結果のクリーンアップログを確認- ログに「Cleaned up N orphaned tool calls」というメッセージが表示される
- パフォーマンスへの影響:
- クリーンアップ処理は軽量(ミリ秒単位)
- セッション保存時間にほぼ影響なし
- 関連する改善:
- セッション永続化の堅牢性向上
- 並行ツール実行の信頼性向上
- エラーハンドリングの改善
- ベストプラクティス:
- 長時間タスクの実行中は定期的に保存ポイントを作る
- バックグラウンドタスクは完了を待ってから終了
- 重要なセッションは
--resumeで定期的に確認