claude-code-subagents.mdupdated 2026-08-011,346 chars

Claude Code サブエージェント:​「並列」が​本当に​並列に​なる​条件

1つの​アシスタントメッセージ内で​複数の​Agent​(エージェント)​ツールを​呼び出すと、​それらは​同時に​実行される。​ターンを​またいで​1件ずつ​呼び出すと​直列実行に​なる。​この​違いを​理解しているか​どうかだけで、​マルチエージェント設計の​作り方が​大きく​変わる。

サブエージェントとは​何か

サブエージェントは、​親の​会話とは​独立した​コンテキストウィンドウ・システムプロンプト・ツール・モデルを​持つ、​別会話の​インスタンスである。​Agentツール​(旧名Task、​v2.1.63で​Agentへ​改称)​経由で​起動し、.claude/agents/または~/.claude/agents/に​Markdown+YAMLフロントマター​(=ファイル冒頭に​置く​メタデータ記述)と​して​定義する。​サブエージェントが​さらに​別の​サブエージェントを​生成する​ネスト​(入れ子構造)は、​明示的に​禁止されている。

並列実行の​条件

1つの​アシスタント返信の​中に​複数の​Agent呼び出しを​並べると、​実行基盤​(ハーネス)が​それらを​同時に​走らせる。​一方、​ターンごとに​1件ずつAgentを​呼び出すと​直列実行に​なり、​並列には​ならない。​親から​サブエージェントへ​渡せる​情報の​経路は​プロンプト文字列のみであり、​会話の​コンテキスト​その​ものは​共有されない。​同時実行数の​明確な​上限値は​公式文書に​記載が​なく、​実務上の​上限は​レート制限​(=一定​時間内に​処理できる​回数の​制限)と​コンテキストウィンドウの​大きさで​決まる。

並列が​有効な​ケース

互いに​独立した​タスク——例えば​テスト実行・リンター​(=コードの​書き方を​チェックする​ツール)​・セキュリティスキャンを​同時に​走らせる​場合には​並列化が​有効である。​各サブエージェントの​結果を​サマリーだけで​返せば、​親の​コンテキストが​肥大化するのを​防げる。​ファイルの​所有権が​エージェント間で​明確に​分離されている​場合も​適している。​Anthropicの​事例では、​並列化に​よって​調査時間を​最大90%短縮したと​報告されている。

並列が​逆効果に​なる​ケース

複数の​エージェントが​同一ファイルを​書き換えると、​競合状態​(レースコンディション=複数の​処理が​同時に​同じ​資源を​操作して​結果が​不定に​なる​現象)が​生じ、​最後に​書き込んだ​内容だけが​残ってしまう。​Bの​タスクが​Aの​出力を​前提と​するような​依存関係が​ある​場合は、​並列ではなく​直列で​実行すべきである。​同じ​探索を​重複して​行うと、​3つの​類似した​grep​(=文字列検索)が​同じ情報を​トークン3倍の​コストで​読むことになる。​壁時計時間​(=実際に​経過する​時間)は​ほぼ横ばいでも、​トークンの​総消費量は​エージェント数倍に​膨らむ点に​注意する。

まとめ

並列サブエージェントが​節約するのは​壁時計時間であって​計算量​その​ものではない。​サブタスクが​本当に​独立している​場合に​のみ、​並列化には​価値が​ある。

出典・参考

148 notestil