Skip to content

原文(日本語に翻訳)

ツール使用をキャンセルした際のクラッシュを修正

原文(英語)

Fixed crashes when cancelling tool use

概要

Claude Code v2.1.20では、エージェントがツールを実行している最中にユーザーが操作をキャンセル(Ctrl+C)した際、アプリケーションがクラッシュする重大なバグが修正されました。以前は、特定のツール(ファイル読み込み、検索、外部コマンド実行など)の処理中にキャンセルすると、プログラムが異常終了し、作業中のデータが失われる可能性がありました。この修正により、安全にキャンセルできるようになります。

基本的な使い方

ツール実行中でも安全にキャンセルできます:

bash
# 長時間実行されるコマンド
> プロジェクト全体のテストを実行して

# エージェントがテストツールを実行中...
Running tests...
Test suite 1/10 completed...
Test suite 2/10 completed...

# Ctrl+C でキャンセル
^C

# 修正前:
# - アプリケーションがクラッシュ
# - エラーメッセージが表示され、セッションが終了
# - 進行中の作業が失われる

# 修正後:
# - ツール実行が適切に中断
# - セッションは継続
# - 新しいコマンドを入力可能

実践例

大規模なファイル検索のキャンセル

巨大なコードベースでの検索操作:

bash
> プロジェクト全体から "TODO" コメントを検索して

# エージェントがGreepツールで検索中...
Searching in /project (10,000+ files)...
Scanned: 1,234 files...
Scanned: 2,456 files...

# 「これは時間がかかりすぎる」と判断してキャンセル
^C

# 修正により:
# - 検索が安全に中断
# - Claude Code は応答を続ける
# - すぐに別のコマンドを実行可能

> もっと狭い範囲で検索して:src/ ディレクトリのみ
# ↑ キャンセル後もスムーズに続行

長時間実行スクリプトの中断

ビルドプロセスやテストスイートのキャンセル:

bash
> npm run build を実行して

# ビルドプロセス開始...
Building...
[1/100] Compiling modules...
[2/100] Optimizing...

# ビルド設定を変更したくなった
^C

# 修正前の問題:
# - クラッシュしてターミナルが閉じる
# - セッション履歴が失われる
# - 再起動が必要

# 修正後:
# - ビルドが停止
# - セッション継続
> package.json の設定を変更して、もう一度ビルドして
# ↑ そのまま作業続行

複数ツール実行中のキャンセル

エージェントが複数のツールを連鎖的に実行している場合:

bash
> すべてのPythonファイルを見つけて、型ヒントを追加して、テストして

# エージェントの処理:
# 1. Glob でファイル検索中... (100+ files)
# 2. Read でファイル読み込み中...

# 途中でキャンセル
^C

# 修正により:
# - 現在のツール実行が中断
# - 後続のツール(Edit、Bash など)も実行されない
# - クリーンにセッションに戻る

> 代わりに src/main.py だけを更新して
# ↑ 即座に新しいタスクを開始可能

MCP サーバーツールのキャンセル

外部MCPツールの長時間実行:

bash
> @database すべてのユーザーデータをエクスポート

# データベースツールが大量のレコードを処理中...
Exporting users... 10,000 / 1,000,000 records

# 「これは完了まで時間がかかりすぎる」
^C

# 修正により:
# - MCPツールの実行が適切に中断
# - データベース接続が正しくクローズ
# - メモリリークなし
# - セッション安定

> @database 直近1週間のユーザーのみエクスポート
# ↑ より小さなクエリで再試行

ネストされたツール呼び出しのキャンセル

ツールが他のツールを呼び出す複雑な操作:

bash
> このディレクトリの全ファイルを解析して、依存関係グラフを作成

# 処理フロー:
# - Glob: ファイルリスト取得
# - Read: 各ファイル読み込み (50個目...)
#   - Grep: import文を検索
#   - Read: 依存ファイルも読み込み...

# 深くネストした処理中にキャンセル
^C

# 修正により:
# - すべてのネストレベルで適切に中断
# - リソースリークなし
# - スタックトレースエラーなし
# - 正常にプロンプトに戻る

タイムアウト前のマニュアルキャンセル

応答しないツールの強制停止:

bash
> このAPIエンドポイントをテストして

# 外部APIへの接続試行中...
# (APIが応答しない)
Waiting for response...
Waiting for response...

# 待ちきれずにキャンセル
^C

# 修正により:
# - タイムアウト待ちせずに即座に中断
# - ハングしない
# - クラッシュしない
# - すぐに次の操作が可能

注意点

  • Ctrl+C によるキャンセルは、現在実行中のツールのみを中断します
  • キャンセル後、エージェントは前回のコンテキストを保持します
  • 一部の外部プロセスは、キャンセルシグナルの処理に若干時間がかかる場合があります
  • ファイル書き込み中のキャンセルは、部分的な書き込みが発生する可能性があります(ただしクラッシュはしません)
  • この修正は、すべてのツール(Bash、Read、Write、Edit、Grep、MCP toolsなど)に適用されます

関連情報