0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code で並列のツール呼び出しが「Cancelled: parallel tool call … errored」と連発して全部止まる——一斉中断の仕組みと回避

0
Last updated at Posted at 2026-06-03

2026年6月の初めから、Claude Code で並列に走らせたツールの呼び出しが、1つの小さな失敗をきっかけに丸ごと止まる事象の報告が増えています。Cancelled: parallel tool call ... errored のような表示が連発し、本来は独立しているはずの読み取りや編集まで一斉に巻き込まれて中断します。

この記事は、何が起きているのか、なぜ起きるのか、そして公式の修正を待つ間に利用者の側でできる回避を整理します。実際に観測されている起票を根拠にしています。

症状

  • 並列で投げた複数のツールの呼び出しのうち、1つが失敗(非ゼロ終了)すると、残り全部が Cancelled になる。
  • 表示が「利用者が中断した」場合と見分けがつかない(起票 #64047)。
  • 長いコーディングのセッションで、10件から20件の読み取りや探りのまとまりが一斉に飛ぶ(起票 #64059)。
  • 加えて、Opus 4.8 では並列のタスクが終わる前に「結果はこうでした」と先に言い切る、つまり完了する前の捏造が混ざる報告もあります(起票 #63884)。

中核の起票は #63881、#63576、#64047 で、一斉中断の挙動そのものの古くからの整理は #22264 です。いずれも執筆の時点で未解決です。

なぜ起きるのか

今の Claude Code は、並列のツールの呼び出しを「ひとまとまりの取り引き」として扱っています。まとまりの中の1件が失敗すると、残りも巻き戻して中断する作りです。

ところが、コーディングの作業で並列に投げるものの多くは、互いに独立した読み取りや探りです。1件の失敗が他に波及する理由はありません。それでも「1件でも失敗したら全部やめる」という、現場の失敗の出方に合っていない作りになっているのが原因です。

特に巻き込まれやすいのは、失敗が「異常」ではなく「想定の範囲」である呼び出しです。よく挙がる3つの引き金は次のとおりです。

  • git の無効なリビジョンの指定(例: 存在しない範囲の参照)
  • curl の想定の範囲の404(生存の確認の探りで404が返るのは正常)
  • pkill の対象なし(消す相手がいないと exit 144 で返る。これも正常)

これらは「失敗」と数えられても、実際にはこちらの意図どおりの結果です。それがまとまり全体を道連れにします。

利用者の側でできる回避

公式の理想は「並列に広げても、一部が失敗したら残りは続ける(呼び出しごとに独立させる)」ですが、それが入るまでの間、こちらでできる手当てがあります。

1. 並列のまとまりを小さく保つ

CLAUDE.md に、並列のまとまりを3件から5件までにする指針を書いておきます。10件から20件の大きなまとまりが、巻き込みの範囲を広げる構造の増幅器になっています。まとまりを小さくすると、1件の失敗で巻き込まれる範囲も小さくなります。

2. 失敗しうる呼び出しは並列に混ぜない

gitcurlpkill のように「想定の範囲の非ゼロ」が起きやすいコマンドは、並列のまとまりに混ぜず、順番に1つずつ投げます。順番にすると往復が増えてトークンの費用は前払いになりますが、その分は上限が見えています。一方で一斉中断は、まとまり全体の計算に加えて、止まった後にモデルが状況を読み直す費用まで無駄にします。前払いの方が安く付きます。

3. 自分のセッションでどれだけ起きているか測る

体感では少なめに見積もりがちなので、実際の回数を数えます。

grep -c "parallel tool call.*errored" ~/.claude/projects/*/recent.jsonl

この数を見て初めて、「思っていたより頻繁だった」と気づく人が多いです。回避を入れる前と後で数を比べると、効果がそのまま見えます。

4. Opus 4.8 の「完了する前の言い切り」には別の手当て

並列のタスクが終わる前に結果を先に言い切る(#63884)のは、一斉中断とは別の、モデルの側の挙動です。これが頻繁なら、ルーティンの作業のモデルを1つ前に固定します。

/model claude-opus-4-7

#64153 の報告者が、自分で 4.8 と 4.7 を比べて、4.7 では同じ「完了する前の言い切り」が出なかったと整理しています。確実に消したい時の最後の手段です。

まとめ

並列のツールの呼び出しの一斉中断は、作りが「1件失敗したら全部やめる」になっていることが原因で、gitcurlpkill の想定の範囲の非ゼロが引き金になりやすいです。公式が「呼び出しごとに独立させる」修正を入れるまでは、次の4つで巻き込みを小さくできます。並列のまとまりを3件から5件に、失敗しうるコマンドは順番に、grep で頻度を測り、Opus 4.8 の完了する前の言い切りには /model claude-opus-4-7


この記事の回避を自動化する hook も無料で配っています。parallel-batch-size-limiter は大きな並列のまとまりを投げる前に警告します(回避の1の自動化)。parallel-cascade-detectorCancelled: parallel tool call ... errored の一斉中断を検出して頻度を知らせます(回避の3の自動化)。これらを含む Claude Code の事故の予防の hook の集まりは、直近14日で1,728名以上が使っています。MIT ライセンスです。

自分がどの失敗の集まりに当たりやすいかは、ブラウザだけで完結する診断でも測れます。

トークンの費用の角度から、一斉中断のような「見えないところで消える消費」を半分に抑える実践は、別の本にまとめています(¥2,500、はじめにと第1章は無料の試し読み)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?