Skip to content

原文(日本語に翻訳)

並行ツール実行中に孤立したツール結果が原因でセッション再開が失敗する問題を修正しました

原文(英語)

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 で定期的に確認

関連情報