homula

Claude Code 解説書 — Thread 7 of 8

並列処理 — Subagents と Agent Teams

タスクの特性に応じてサブエージェントまたはAgent Teamを設計・運用できるようになる

読了 30分難易度 ★★★ 上級ソース: Create_custom_subagents · Orchestrate_teams_of_Claude_Code_sessions

7.1なぜ並列処理が必要か

Claude Codeの通常の動作はシングルスレッドだ。メインの会話が1本のコンテキストウィンドウ(AIモデルが一度に「読める」情報量の上限)の中で、調査→実装→検証を順番に回していく。このモデルは多くの場面で十分に機能するが、次の3つの壁にぶつかる場面がある。

壁①:コンテキストウィンドウの枯渇

大量のファイルを読んだり、テストスイート全体を実行したりすると、そのログだけでコンテキストの大半を消費してしまう。たとえばテスト結果が数千行に及ぶ場合、本来やりたかった「原因分析→修正→再テスト」のための余地が残らない。

壁②:大規模タスクの効率

10個のモジュールをリファクタリングする場合、1つずつ順番に処理するのは非効率だ。各モジュールが独立しているなら、同時に複数のモジュールを処理したほうが圧倒的に速い。

壁③:専門化による品質向上

コードレビューを例に取ると、1人のレビュアーはセキュリティの問題を見つけ始めると、パフォーマンスの問題を見落としがちになる。セキュリティ専門、パフォーマンス専門、テストカバレッジ専門のレビュアーが同時に動けば、各領域を深く分析できる。

シングルスレッド vs 並列処理の比較シングルスレッド(従来)調査A調査B調査C統合・実装時間 ████████████並列処理Agent A:調査AAgent B:調査BAgent C:調査C統合・実装時間 ████(大幅短縮)

図7.1 — シングルスレッドと並列処理の実行時間比較

Claude Codeはこの3つの壁を突破するために、2つの並列処理メカニズムを提供する。軽量なサブエージェント(Subagent)と、重量級のAgent Teamsだ。以降のセクションでそれぞれを詳しく見ていく。

7.2Subagents — 組み込みとカスタム

サブエージェント(Subagent)とは、メインの会話セッションの中で生成される「専門作業員」だ。それぞれが独自のコンテキストウィンドウとシステムプロンプト(AIの動作を制御する初期指示文)を持ち、特定のタスクを独立して処理し、結果だけをメインの会話に返す。

サブエージェントが解決する問題は明確だ。たとえばテストスイート全体を実行して失敗テストだけ報告してほしい場合、サブエージェントなしだと数千行のテストログがメインのコンテキストに流れ込む。サブエージェントに委任すれば、ログはサブエージェント側のコンテキストに留まり、メインには「3件のテストが失敗。原因はXYZ」という要約だけが返る。

サブエージェントのアーキテクチャメインセッションユーザーとの対話 ・ 全体のコンテキスト委任委任委任Exploreモデル: Haikuツール: 読み取り専用独自コンテキストGeneral-purposeモデル: 継承ツール: すべて独自コンテキストカスタムモデル: 任意設定ツール: 制限可能独自コンテキスト要約のみメインに返却(コンテキスト節約)

図7.2 — サブエージェントのアーキテクチャ(委任→独立処理→要約返却)

組み込みサブエージェント

Claude Codeには最初から用意されている3つの主要サブエージェントがある。Claudeはタスクの性質に応じて、自動的にこれらに作業を委任する。

名前モデルツール用途
ExploreHaiku(高速・低コスト)読み取り専用ファイル探索・コード検索・構造理解
Plan継承読み取り専用Planモード時のリサーチ
General-purpose継承すべて複雑な調査・複数ステップの操作

たとえば「認証モジュールのファイル構成を調べて」とメインセッションで依頼すると、Claudeは自動的にExploreサブエージェントに委任する。Exploreは高速なHaikuモデルで読み取り専用ツールだけを使い、結果の要約をメインに返す。メインのコンテキストにはファイルの中身そのものは入らず、構造の概要だけが残る。

重要な制約:サブエージェントはサブエージェントを生成できない(ネスト禁止)。複雑なワークフローが必要な場合は、メインの会話からサブエージェントを連鎖的に呼び出す(チェーン)か、後述するAgent Teamsを使う。

カスタムサブエージェントの作成

組み込みサブエージェントでは足りない場合、独自のサブエージェントを定義できる。サブエージェントの定義ファイルはYAMLフロントマター(ファイル冒頭の設定ブロック)付きのMarkdownファイルだ。

最も簡単な作成方法は/agentsコマンドを使うことだ。

1

/agentsを実行 →「Create new agent」を選択

2

スコープを選択(Personal = ユーザー全体、Project = このプロジェクトのみ)

3

「Generate with Claude」で説明文を入力すると、Claudeが設定を自動生成

4

利用可能なツールを選択(読み取り専用、全ツール、など)

5

モデルを選択(Haiku / Sonnet / Opus / 継承)

6

保存してすぐに利用可能

手動で作成する場合、以下のような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/をバージョン管理にチェックインすればよい。

フロントマター設定の全体像

サブエージェント設定フィールドの構造必須フィールドname · description動作制御modelpermissionModemaxTurns · effortツールアクセスtoolsdisallowedToolsmcpServers知識と記憶skillsmemory(user/project/local)ライフサイクルhooksbackgroundisolationスキルのプリロードskills フィールドに指定したスキルは起動時にコンテキストに全文注入される(親セッションのスキルは継承されない)例: skills: [api-conventions, error-handling]永続メモリmemory フィールドでスコープを指定するとセッションをまたいで知見を蓄積できるMEMORY.md に自動的に書き込まれる例: memory: project → .claude/agent-memory/

図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コマンドの内容を検査し、INSERTDELETEなどの書き込み操作が含まれていれば終了コード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)によるエージェント間のメッセージ通信も備える。

Agent Teams のアーキテクチャチームリードタスク作成 ・ 割り当て ・ 結果統合共有タスクリスト + メールボックスTeammate A独立セッション独自コンテキストTeammate B独立セッション独自コンテキストTeammate C独立セッション独自コンテキスト…N独立セッション独自コンテキストチームメイト間の直接メッセージング各チームメイトは完全に独立したClaude Codeインスタンス(コンテキスト・セッション・ツールが個別)

図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つ — 「ワーカー同士が会話する必要があるか?」だ。

Subagent / Agent Team / メイン会話 — 判断フローチャートタスクが発生タスクは自己完結できる?Noメイン会話で実行Yesワーカー同士が会話する必要がある?YesAgent TeamsNo並列度が高い?(5+タスク同時実行)NoSubagentYesAgent TeamsYesコンテキストを超える大量出力がある?NoSubagent (BG)YesAgent Teams判断の要約:結果だけ返ればいい → Subagent | 議論・調整が必要 → Agent Teams | 対話的な反復 → メイン会話

図7.5 — Subagent / Agent Team / メイン会話の判断フローチャート

比較表

項目SubagentAgent 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

サブエージェントはネストできないが、メインの会話から順番に呼び出す「チェーン」は可能だ。最初のサブエージェントが問題を特定し、その結果をメインが受け取り、次のサブエージェントに修正を委任する。各フェーズの詳細なログはそれぞれのサブエージェントのコンテキストに閉じ込められる。

5つの設計パターン — 適用マップSubagentAgent Teams低い協調度高い協調度① 調査委任結果の要約だけ返す⑤ チェーン順番に委任を連鎖④ 分担開発ファイル分担・独立作業② 並列レビュー専門観点×結果統合③ 競合仮説相互反論・科学的討論SubagentAgent Teams右にいくほど協調・コミュニケーション密度が高い

図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社超の支援実績をもとに、最適な並列処理アーキテクチャを設計します。

Claude Code 解説書 — 第7章/全8章
情報源:Create_custom_subagents(901行)· Orchestrate_teams_of_Claude_Code_sessions(403行)
次回 → 第8章: 自動化・配布・応用