Claude Code 解説書 — Thread 7 of 8
並列処理 — Subagents と Agent Teams
タスクの特性に応じてサブエージェントまたはAgent Teamを設計・運用できるようになる
7.1なぜ並列処理が必要か
Claude Codeの通常の動作はシングルスレッドだ。メインの会話が1本のコンテキストウィンドウ(AIモデルが一度に「読める」情報量の上限)の中で、調査→実装→検証を順番に回していく。このモデルは多くの場面で十分に機能するが、次の3つの壁にぶつかる場面がある。
壁①:コンテキストウィンドウの枯渇
大量のファイルを読んだり、テストスイート全体を実行したりすると、そのログだけでコンテキストの大半を消費してしまう。たとえばテスト結果が数千行に及ぶ場合、本来やりたかった「原因分析→修正→再テスト」のための余地が残らない。
壁②:大規模タスクの効率
10個のモジュールをリファクタリングする場合、1つずつ順番に処理するのは非効率だ。各モジュールが独立しているなら、同時に複数のモジュールを処理したほうが圧倒的に速い。
壁③:専門化による品質向上
コードレビューを例に取ると、1人のレビュアーはセキュリティの問題を見つけ始めると、パフォーマンスの問題を見落としがちになる。セキュリティ専門、パフォーマンス専門、テストカバレッジ専門のレビュアーが同時に動けば、各領域を深く分析できる。
図7.1 — シングルスレッドと並列処理の実行時間比較
Claude Codeはこの3つの壁を突破するために、2つの並列処理メカニズムを提供する。軽量なサブエージェント(Subagent)と、重量級のAgent Teamsだ。以降のセクションでそれぞれを詳しく見ていく。
7.2Subagents — 組み込みとカスタム
サブエージェント(Subagent)とは、メインの会話セッションの中で生成される「専門作業員」だ。それぞれが独自のコンテキストウィンドウとシステムプロンプト(AIの動作を制御する初期指示文)を持ち、特定のタスクを独立して処理し、結果だけをメインの会話に返す。
サブエージェントが解決する問題は明確だ。たとえばテストスイート全体を実行して失敗テストだけ報告してほしい場合、サブエージェントなしだと数千行のテストログがメインのコンテキストに流れ込む。サブエージェントに委任すれば、ログはサブエージェント側のコンテキストに留まり、メインには「3件のテストが失敗。原因はXYZ」という要約だけが返る。
図7.2 — サブエージェントのアーキテクチャ(委任→独立処理→要約返却)
組み込みサブエージェント
Claude Codeには最初から用意されている3つの主要サブエージェントがある。Claudeはタスクの性質に応じて、自動的にこれらに作業を委任する。
| 名前 | モデル | ツール | 用途 |
|---|---|---|---|
| Explore | Haiku(高速・低コスト) | 読み取り専用 | ファイル探索・コード検索・構造理解 |
| Plan | 継承 | 読み取り専用 | Planモード時のリサーチ |
| General-purpose | 継承 | すべて | 複雑な調査・複数ステップの操作 |
たとえば「認証モジュールのファイル構成を調べて」とメインセッションで依頼すると、Claudeは自動的にExploreサブエージェントに委任する。Exploreは高速なHaikuモデルで読み取り専用ツールだけを使い、結果の要約をメインに返す。メインのコンテキストにはファイルの中身そのものは入らず、構造の概要だけが残る。
重要な制約:サブエージェントはサブエージェントを生成できない(ネスト禁止)。複雑なワークフローが必要な場合は、メインの会話からサブエージェントを連鎖的に呼び出す(チェーン)か、後述するAgent Teamsを使う。
カスタムサブエージェントの作成
組み込みサブエージェントでは足りない場合、独自のサブエージェントを定義できる。サブエージェントの定義ファイルはYAMLフロントマター(ファイル冒頭の設定ブロック)付きのMarkdownファイルだ。
最も簡単な作成方法は/agentsコマンドを使うことだ。
/agentsを実行 →「Create new agent」を選択
スコープを選択(Personal = ユーザー全体、Project = このプロジェクトのみ)
「Generate with Claude」で説明文を入力すると、Claudeが設定を自動生成
利用可能なツールを選択(読み取り専用、全ツール、など)
モデルを選択(Haiku / Sonnet / Opus / 継承)
保存してすぐに利用可能
手動で作成する場合、以下のようなMarkdownファイルを.claude/agents/に配置する。
# .claude/agents/code-reviewer.md
--- name: code-reviewer description: Reviews code for quality and best practices tools: Read, Glob, Grep model: sonnet --- You are a code reviewer. When invoked, analyze the code and provide specific, actionable feedback on quality, security, and best practices.
フロントマターのdescriptionは極めて重要だ。Claudeはこの記述を読んで「このタスクをこのサブエージェントに委任すべきか」を判断する。「use proactively」のようなフレーズを含めると、Claudeが積極的に委任してくれるようになる。
スコープと優先順位
サブエージェントの配置場所は4段階あり、同名の場合は上が優先される。
| 配置場所 | スコープ | 優先度 |
|---|---|---|
--agents CLIフラグ | 現セッションのみ | 1(最高) |
.claude/agents/ | 現プロジェクト | 2 |
~/.claude/agents/ | 全プロジェクト | 3 |
プラグインの agents/ | プラグイン有効範囲 | 4(最低) |
たとえばプロジェクト固有のデプロイ手順に特化したサブエージェントは.claude/agents/に、個人的にどのプロジェクトでも使いたいコードレビュアーは~/.claude/agents/に置く。チームで共有する場合は.claude/agents/をバージョン管理にチェックインすればよい。
フロントマター設定の全体像
図7.3 — サブエージェント設定フィールドの構造マップ
Hookによるセキュリティ制御
toolsフィールドでのツール制限は「オール・オア・ナッシング」だ。たとえばBashは許可したいが、SQLのDELETE文だけはブロックしたい場合、toolsだけでは対応できない。ここでHook(フック — ツール実行の前後に自動で走るスクリプト)が活躍する。
# .claude/agents/db-reader.md
---
name: db-reader
description: Execute read-only database queries
tools: Bash
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-readonly-query.sh"
---
You are a database analyst with read-only access.この例では、PreToolUseフック(ツール実行の直前に発火するイベント)がBashコマンドの内容を検査し、INSERTやDELETEなどの書き込み操作が含まれていれば終了コード2を返して実行をブロックする。サブエージェント定義内にフックを埋め込むことで、そのサブエージェントが活動中のみフックが有効になる。
呼び出しパターン
サブエージェントの呼び出し方法は3段階ある。
| 方法 | 動作 | 使い分け |
|---|---|---|
| 自然言語 | 「code-reviewerを使って変更を見て」 | Claudeが委任を判断(最も一般的) |
| @メンション | @"code-reviewer (agent)" | 特定のサブエージェントを強制的に使わせたいとき |
| セッション全体 | claude --agent code-reviewer | セッション全体をその振る舞いで実行 |
フォアグラウンドとバックグラウンド
サブエージェントはフォアグラウンド(メインをブロックして完了を待つ)かバックグラウンド(メインと並行して動く)のどちらかで実行される。バックグラウンドでは、起動前に必要なパーミッションが事前承認され、実行中に承認を求めることはできない。Claudeがタスクの性質に応じて判断するが、Ctrl+Bで実行中のタスクをバックグラウンドに移すこともできる。
7.3Agent Teams — 複数セッションの協調
実験的機能:Agent Teamsはデフォルトでは無効化されている。使用するにはsettings.jsonで"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"を設定する必要がある。既知の制限事項あり。
Agent Teamsは、サブエージェントとは根本的に異なるアプローチだ。サブエージェントが「メインセッション内の作業員」であるのに対し、Agent Teamsは完全に独立した複数のClaude Codeセッションがチームとして協調する仕組みだ。
チームは3つの要素で構成される。チームリード(タスクの作成・割り当てを行うメインセッション)、チームメイト(それぞれが独立したClaude Codeインスタンス)、そして共有タスクリスト(全メンバーが参照・更新できる作業一覧)だ。加えて、メールボックス(Mailbox)によるエージェント間のメッセージ通信も備える。
図7.4 — Agent Teamsのアーキテクチャ(リード+共有タスクリスト+ピアツーピア通信)
有効化と起動
# settings.json
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}有効化した後は、自然言語でチームの作成を指示するだけでよい。
具体例:チーム起動指示
Create an agent team to review PR #142. Spawn three reviewers: - One focused on security implications - One checking performance impact - One validating test coverage
Claudeがチームを作成し、チームメイトを生成し、タスクリストに作業を割り当て、完了後に結果を統合する。
タスクリスト共有と自己協調
Agent Teamsの中核メカニズムは共有タスクリストだ。リードが作業をタスクに分解し、チームメイトがそれを自発的に取得(セルフクレーム)する。タスクには3つの状態がある — 待機中(pending)、進行中(in progress)、完了(completed)。タスク間に依存関係を設定でき、依存先が完了するまでブロックされる仕組みだ。
複数のチームメイトが同じタスクを同時に取得しようとする競合状態を防ぐため、ファイルロックが使われている。
ピアツーピアメッセージング
サブエージェントとの最大の違いがここにある。サブエージェントはメインにしか結果を返せないが、Agent Teamsのチームメイトは互いに直接メッセージを送り合える。たとえば、セキュリティレビュアーが認証ロジックの問題を発見したとき、パフォーマンスレビュアーに「この認証処理、N+1クエリ問題も起きてない?」と直接確認できる。
メッセージの種類はmessage(特定の1人に送信)とbroadcast(全員に一斉送信)の2つ。broadcastはチームサイズに比例してコストが増えるため、使用は控えめにすべきだ。
表示モード
| モード | 動作 | 要件 |
|---|---|---|
| In-process | 全チームメイトがメインターミナル内で動作。Shift+↓で切替 | なし(どのターミナルでも動作) |
| Split panes | 各チームメイトが独自のペインで表示 | tmux または iTerm2 |
品質ゲートの適用
Hookを使って、チームメイトの作業完了時に自動検証を挟める。TeammateIdleフック(チームメイトがアイドル状態になるとき発火)で終了コード2を返すと、フィードバックを送って作業を続行させる。TaskCompletedフック(タスク完了マーク時に発火)で終了コード2を返すと、完了を阻止してやり直しを指示できる。
7.4Subagent vs Agent Team — 使い分けガイド
どちらを使うべきかは、タスクの性質で明確に判断できる。核心的な問いは1つ — 「ワーカー同士が会話する必要があるか?」だ。
図7.5 — Subagent / Agent Team / メイン会話の判断フローチャート
比較表
| 項目 | Subagent | Agent Teams |
|---|---|---|
| コンテキスト | 独自(結果はメインに返る) | 完全独立 |
| コミュニケーション | メインへの報告のみ | チームメイト間で直接通信 |
| 協調方式 | メインが全管理 | 共有タスクリスト+自己協調 |
| トークンコスト | 低い(要約のみ返す) | 高い(各自が独立インスタンス) |
| 適したタスク | 結果だけ必要な集中作業 | 議論・相互検証が必要な複雑作業 |
| ネスト | 不可(1階層のみ) | 不可(チームメイトはチーム生成不可) |
| セッション | メインセッション内 | 個別のClaude Codeセッション |
| 安定性 | 安定(正式機能) | 実験的(制限事項あり) |
実例で見る使い分け
実例①:セキュリティ監査 → Agent Teams
セキュリティ、パフォーマンス、テストカバレッジの各観点でレビューし、レビュアー間で「この認証処理、パフォーマンス面でも問題ない?」と議論させたい場合、ピアツーピア通信が必要になる。
実例②:マルチパッケージの一括テスト → Subagent
10個のパッケージのテストを並列実行し、失敗結果だけ要約してほしい場合、パッケージ間で会話する必要はない。各サブエージェントがテストを走らせて結果を返せばよい。
実例③:競合仮説の検証 → Agent Teams
バグの原因について複数の仮説を同時に検証する場合、仮説の持ち主同士が互いの理論に反論し合う「科学的討論」の構造が有効だ。順番に検証すると、最初の仮説に引きずられるアンカリングバイアスが発生する。
7.5実践的な設計パターン
パターン①:調査タスクの委任(Subagent)
最も頻出するパターンだ。大量のファイルを読んで要約だけ返させる。
# メインの会話での指示
Use a subagent to run the test suite and report only the failing tests with their error messagesテストスイートの全ログはサブエージェントのコンテキスト内に閉じ込められ、メインには失敗テストのリストと原因だけが返る。メインのコンテキストは数千トークンの節約になる。
同様に「認証モジュール、データベースモジュール、APIモジュールを別々のサブエージェントで同時に調査」と指示すれば、3つの調査が並列で走り、それぞれの要約がメインに集約される。
パターン②:並列コードレビュー(Agent Teams)
Create an agent team to review PR #142. Spawn three reviewers: - One focused on security implications - One checking performance impact - One validating test coverage Have them each review and report findings.
各レビュアーが同じPRを異なる視点でレビューする。単一のレビュアーだと、セキュリティの問題を見つけ始めるとパフォーマンスの問題を見落としがちになるが、専門化されたチームメイトはそれぞれの領域を深く分析し、リードが結果を統合する。
パターン③:競合仮説デバッグ(Agent Teams)
Users report the app exits after one message instead of staying connected. Spawn 5 agent teammates to investigate different hypotheses. Have them talk to each other to try to disprove each other's theories, like a scientific debate.
これがAgent Teamsの最も強力な使い方だ。各チームメイトが異なる仮説を持ち、互いの理論に反論しながら検証する。反証に耐えた仮説が真の原因である確率が格段に高くなる。
パターン④:新機能の分担開発(Agent Teams)
フロントエンド、バックエンドAPI、テストをそれぞれ別のチームメイトが担当するパターン。各チームメイトが担当ファイルを持ち、ファイル競合が起きないように分担する。チーム規模は3〜5人が最適とされ、これ以上増やしても協調コストが増えるだけで効率は上がらない。各チームメイトに5〜6タスクを割り当てるのが理想的なバランスだ。
パターン⑤:サブエージェントのチェーン(Subagent)
Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix themサブエージェントはネストできないが、メインの会話から順番に呼び出す「チェーン」は可能だ。最初のサブエージェントが問題を特定し、その結果をメインが受け取り、次のサブエージェントに修正を委任する。各フェーズの詳細なログはそれぞれのサブエージェントのコンテキストに閉じ込められる。
図7.6 — 5つの設計パターンの協調度マッピング
設計時のチェックリスト
並列処理を導入する前に、以下の観点で検討するとよい。
| 観点 | Subagentが向く条件 | Agent Teamsが向く条件 |
|---|---|---|
| 出力量 | 大量のログや検索結果をフィルタリングしたい | 各自が独立した成果物を作成する |
| コミュニケーション | 結果の報告のみ(一方通行) | 質問・反論・調整が必要(双方向) |
| コスト意識 | トークン消費を抑えたい | 品質のために追加コストは許容できる |
| 安定性要求 | 本番ワークフローで使いたい | 実験的な使い方でも構わない |
| タスク依存性 | 各タスクが完全に独立 | タスク間で依存関係や情報共有がある |
Agent Teamsの制限事項に注意:セッション再開時にチームメイトは復元されない。タスクステータスが遅延することがある。1セッション1チームの制約がある。チームのネスト不可。リード固定。本番環境のクリティカルパスにはまだ組み込まない方が安全だ。
homulaの支援体制
サブエージェントやAgent Teamsの設計・運用は、チームの開発プロセス全体に影響するため、組織単位での導入支援が効果的です。homulaは、AIエージェントの並列処理設計から本番運用までを一気通貫で支援します。
Series Navigation
← 前の章
第6章: MCP — 外部サービスとの接続
Coming Soon
次の章 →
第8章: 自動化・配布・応用
Coming Soon
他シリーズの関連ガイド
よくある質問
Subagentはメインセッション内で動作する「作業員」で、結果の要約だけをメインに返します。Agent Teamsは完全に独立した複数のClaude Codeセッションがチームとして協調する仕組みで、チームメイト間のピアツーピアメッセージングが可能です。核心的な判断基準は「ワーカー同士が会話する必要があるか」です。
Agent Teamsは現時点では実験的機能であり、settings.jsonで明示的に有効化する必要があります。セッション再開時にチームメイトが復元されない、1セッション1チームの制約がある等の制限事項があるため、本番環境のクリティカルパスへの組み込みは推奨されません。安定した並列処理が必要な場合はSubagentの使用を推奨します。
/agentsコマンドを実行して対話的に作成するか、.claude/agents/ディレクトリにYAMLフロントマター付きのMarkdownファイルを手動で配置します。descriptionフィールドにタスクの説明を記述すると、Claudeが自動的に適切なサブエージェントに作業を委任してくれます。
サブエージェントからサブエージェントを生成するネストは不可です。複雑なワークフローが必要な場合は、メインの会話からサブエージェントを順番に呼び出す「チェーン」パターンを使うか、Agent Teamsを活用してください。
3〜5人が最適とされています。これ以上増やしても協調コストが増加するだけで効率は上がりません。各チームメイトに5〜6タスクを割り当てるのが理想的なバランスです。
AIエージェントの並列処理設計を相談する
homulaは、エンタープライズ企業向けにAIエージェントの戦略策定・PoC・実装・運用までを一気通貫で支援するAIインテグレーターです。400社超の支援実績をもとに、最適な並列処理アーキテクチャを設計します。