sue@blog ~ /posts/agent-team-communication
$ cd ../
$ cat post.metadata

Agent Teamと「チームとして」会話する技術

date: 2026-02-28 Agent Team AI Engineering Prompt Design
Claude CodeのAgent Teamを「ツール」ではなく「本物のエンジニアチーム」として扱うと、出力の質が劇的に変わる。
タスク分解・コンテキスト設計・モデル選択の7原則と、実プロジェクトで得た知見をまとめる。

Agent Teamとは何か

Claude CodeのAgent Teamは、リーダーエージェントが複数のチームメイトエージェントを起動し、タスクリストで作業を割り振る仕組みです。

agent-team-architecture
# Agent Team の構造

Leader(オーケストレーター)
├── TaskCreate    # タスクリスト作成
├── Task          # チームメイト起動(並列可)
├── SendMessage   # チームメイトへの指示
└── TaskUpdate    # 進捗管理

Teammate A(Haiku / Sonnet)
├── 自分のタスクを TaskGet で取得
├── 作業実行(Read, Write, Bash等)
├── SendMessage でリーダーに報告
└── TaskUpdate で完了を記録

Teammate B(Haiku / Sonnet)
└── ... 同様に独立して作業

一見するとただのタスク並列化ツールですが、使い込んでいくと気づくことがあります。チームメイトは「関数」ではなく「人格を持ったエージェント」として振る舞うということです。コンテキストを渡し、判断を委ね、結果を受け取る。その構造は、人間のチームマネジメントと驚くほど似ています。

この記事の主張: Agent Teamから良い出力を得るコツは、プロンプトエンジニアリングではなく、チームマネジメントの原則を適用すること。

7つの原則

1 リーダーには「Why」を、メンバーには「What」を渡す

人間のチームと同じで、リーダーエージェントには目的と制約を渡し、個々のメンバーには具体的な作業指示を渡します。

よくない指示

  • 「3つのファイルを読んでJSONにまとめて」
  • リーダーへの指示が作業レベル
  • リーダーが判断する余地がない
  • 並列化の機会を人間が潰している

良い指示

  • 「競合5社を調査し、比較レポートを作成して」
  • リーダーが分解方法を判断できる
  • 各社の調査を並列化する余地がある
  • 出力形式はリーダーに委ねる

ただし、リーダーに「丸投げ」するのとは違います。成功基準と制約は明確にする必要がある。「比較レポート」が何を含むべきか、CSVで出すのかMarkdownで出すのか、これらはリーダーへの入力として渡します。

2 タスクの粒度は「1エージェント1ファイル」を基本にする

Agent Team最大の落とし穴はファイル競合です。2つのエージェントが同じファイルを同時に編集すると、後から書いた方が先の変更を上書きします。

task-decomposition
# BAD: 2エージェントが同じファイルを触る
Task 1: "APIハンドラーとバリデーションを実装"  → src/handler.ts
Task 2: "エラーハンドリングを実装"            → src/handler.ts  ← 衝突!

# GOOD: ファイル所有権を分離
Task 1: "APIハンドラーを実装"     → src/handler.ts
Task 2: "バリデーションを実装"   → src/validator.ts
Task 3: "エラー型を定義"         → src/errors.ts

これは「高凝集・低結合」というソフトウェア設計の原則そのものです。タスクの境界が明確であれば、エージェント同士のコミュニケーションコストも下がる。

3 コンテキストは「自己完結」させる

人間のチームなら「さっき言った件だけど」で通じます。Agent Teamでは通じません。各チームメイトは独立したコンテキストで起動されるため、リーダーとの会話履歴を持っていません。

teammate-prompt-design
# BAD: 暗黙の前提に依存
"先ほどの設計に基づいて、APIを実装してください"
→ チームメイトは「先ほどの設計」を知らない

# GOOD: 必要な情報をすべて含める
"以下の仕様に基づいてAPIを実装してください:
- エンドポイント: GET /api/users/:id
- レスポンス型: { id: string, name: string, email: string }
- 認証: Bearer Token必須
- 実装先: src/handlers/user.ts
- 参照ファイル: src/types/user.ts(型定義あり)"
実践Tips: リーダーのプロンプト内で「チームメイトに渡す情報」を意識的にファイルに書き出す(例: 01_design.md)と、チームメイトは Read でそのファイルを読める。メッセージで全部渡すより確実。

4 モデル選択は「採用」である

Agent Teamでは各チームメイトに異なるモデルを割り当てられます。これは「誰を採用するか」と同じ判断です。

モデル 得意なこと チームでの役割 コスト感覚
Haiku 定型作業、データ整形、単純調査 ジュニアエンジニア・リサーチャー 安い(大量起動OK)
Sonnet コード実装、設計判断、レビュー ミドルエンジニア 中程度
Opus アーキテクチャ設計、複雑な推論 シニアエンジニア・テックリード 高い(要所で使う)

実際のプロジェクトでは、企業調査のような「量が必要な単純作業」は Haiku を 5〜10 体並列で走らせ、設計やレビューは Sonnet に任せています。Opus はリーダー自身(オーケストレーター)に使うことが多い。

model-assignment
# 企業リサーチの例: Haiku ワーカー × N + Sonnet 集約

Phase 1: リーダー(Opus)が戦略を立案
Phase 2: 調査チームメイト × 10(Haiku)が各社を並列調査
Phase 3: 集約チームメイト × 1(Sonnet)がCSVにまとめる

# コスト: Haiku 10体 ≈ Sonnet 1体分
# 速度: 10社を並列調査 → 逐次の 1/10 の時間

5 依存関係を「明示的に」宣言する

人間のチームでは「Aさんの作業が終わったらBさんが始める」という暗黙の理解がありますが、Agent Teamでは addBlockedBy で明示的に宣言します。

dependency-management
# タスク依存関係の設計

[Task 1] OpenAPI スキーマ設計        ← 最初に完了すべき
    ↓ blocks
[Task 2] フロントエンド実装            ← Task 1 に依存
[Task 3] バックエンド実装              ← Task 1 に依存
    ↓ blocks (Task 2 + Task 3)
[Task 4] 結合テスト                    ← Task 2, 3 両方に依存

# TaskUpdate で依存関係を設定
TaskUpdate: { taskId: "2", addBlockedBy: ["1"] }
TaskUpdate: { taskId: "3", addBlockedBy: ["1"] }
TaskUpdate: { taskId: "4", addBlockedBy: ["2", "3"] }

依存関係を正しく設計すると、Task 2 と Task 3 が自動的に並列実行されます。逆に、依存関係の設計を間違えると、本来並列にできる作業が逐次実行になり、時間もコストも無駄になる。

6 中間レビューを挟む

全タスクをチームメイトに投げて最後にまとめて確認する、というのは失敗パターンです。人間のチームでも同じで、手戻りが大きい

review-checkpoints
# 悪い例: 全部終わってからレビュー
Phase 1: 計画      → Phase 2: 全部実装 → Phase 3: レビュー
                                                 ↑ ここで問題発覚 → 全部やり直し

# 良い例: フェーズごとにリーダーが確認
Phase 1: 計画 → Leader Review
Phase 2: 設計 → Leader Review
Phase 3: 実装 → Leader Review
Phase 4: テスト
↑ 各フェーズで軌道修正できる

実際の運用では、リーダーが Phase 1 の成果物(例: 01_strategy.md)を Read で確認し、問題があれば SendMessage でチームメイトに修正指示を出します。Phase 2 以降に進む前に検証するのがポイント。

7 終了処理を忘れない

Agent Teamのチームメイトは、作業が終わっても自動的にはシャットダウンしない(idle状態で待機する)。明示的に終了させないと、リソースが残り続けます。

shutdown-sequence
# 正しい終了手順
1. 全タスクの完了を TaskList で確認
2. 各チームメイトに SendMessage (type: "shutdown_request")
3. チームメイトが SendMessage (type: "shutdown_response", approve: true)
4. 全員シャットダウン後に TeamDelete でクリーンアップ

# 忘れると...
- idle 状態のエージェントがバックグラウンドに残る
- チームファイル (~/.claude/teams/) が蓄積
- タスクファイル (~/.claude/tasks/) が蓄積

実例: 企業リサーチワークフロー

実際に運用しているAgent Teamのワークフローを紹介します。営業ターゲット企業を10社並列で調査し、CSVにまとめるタスクです。

research-workflow
# Phase 1: リーダーが計画(Opus)
├── リサーチ戦略を策定 → 01_strategy.md
├── 調査対象企業リストを作成 → 02_company_list.md
└── ユーザーに確認を求める

# Phase 2: Haiku チームメイト × N が並列調査
├── Teammate A → 03_companies/company-a.md
├── Teammate B → 03_companies/company-b.md
├── Teammate C → 03_companies/company-c.md
└── ... 各自が1社を担当(ファイル競合なし)

# Phase 3: Sonnet チームメイトが集約
└── 全 .md を読み込み → 04_summary.csv + 04_summary_notes.md

# Phase 4: リーダーがレビュー&クリーンアップ
├── 成果物の品質確認
├── チームメイトをシャットダウン
└── TeamDelete

このワークフローの設計ポイント:

そもそもAgent Teamを使うべきか

Agent Teamは強力だが、常に最適解ではありません。Claude Codeには3段階の委任レイヤーがあり、タスクの性質によって使い分ける必要がある。

レイヤー 概要 通信方向 コスト
単一セッション あなたとClaudeの1対1 直接対話
Subagent 並列ワーカーが親に報告 一方向(子→親)
Agent Team ワーカー同士が直接協調 双方向(P2P)

「並列化したいか?」ではなく、タスクの性質から逆算して判断します。

decision-flowchart
# Q1: タスクを「同じ形の小タスク」に分解できるか?

タスクの構造は?
│
├── 同じ作業の繰り返し(N社調査、N件変換、Nページ要約…)
│   │
│   └── 各小タスクの結果を 突き合わせる 必要がある?
│        │
│        ├── NoSubagent
│        │         例: 10社の企業調査 → 各社独立に調べてCSVに集約
│        │
│        └── YesAgent Team(Swarm + 集約フェーズ)
│                  例: 5つの仮説を並列検証 → 最善案をリーダーが選択
│
├── 異なる専門性が必要な工程の連鎖(設計→実装→テスト…)
│   │
│   └── 一部の工程を 同時に進められる か?
│        │
│        ├── No単一セッション
│        │         例: 1ファイルの修正 → 逐次で十分
│        │
│        └── YesAgent Team(Pipeline)
│                  例: FE設計 ∥ API調査 → 結合 → テスト
│
└── 1つの集中した作業(バグ修正1件、設定変更…)
    │
    └── 単一セッション
          Agent Teamのオーバーヘッドがタスク本体より大きくなる

どういうタスクを並列化すべきか

実績から見えた「並列化して効果が高いタスク」と「やめておいた方がいいタスク」を整理します。

タスクの性質 推奨 並列化の効果 実例
同じ型の調査 × N Subagent 大(所要時間 1/N) 10社の企業調査、PDF各章の要約
異なる観点からの原因調査 Agent Team 大(アンカリングバイアス回避) バグの5仮説並列検証(control-center-fix)
独立モジュールの同時実装 Agent Team 大(所要時間 1/2〜1/3) freee API ∥ 税額計算エンジン
テキスト ∥ ビジュアル生成 Agent Team 中(ボトルネック分散) slide-planner ∥ visual-designer
多角的コードレビュー Agent Team 中(観点の網羅性向上) セキュリティ ∥ パフォーマンス ∥ 型安全
同一ファイルの逐次修正 単一セッション 逆効果(ファイル競合) 1つのコンポーネントの段階的改善
30分以内で終わる小タスク 単一セッション 逆効果(オーバーヘッド > 本体) typo修正、設定値変更、1関数追加
判断基準は「分解したサブタスクが独立して意味を持つか」。freee-shinkoku では「API連携」と「税額計算」はそれぞれ単体でテスト可能な独立モジュールだったから並列化が効いた。逆に「バリデーション追加」と「エラーハンドリング追加」は同じファイルを触るので並列化すると壊れる。

なぜ30分以内のタスクを並列化すべきでないのか

Agent Teamにはタスク本体とは別の「起動コスト」がかかります。これが小さなタスクの時間短縮を打ち消してしまう。

overhead-breakdown
# Agent Team の起動コスト内訳

1. TeamCreate         ← チーム設定ファイル生成
2. TaskCreate × N     ← タスクリスト作成・依存関係設定
3. Task(起動)× N    ← チームメイトの起動・コンテキスト読込
4. SendMessage × M    ← 進捗報告・完了通知のやりとり
5. shutdown × N       ← 全員のシャットダウン
6. TeamDelete         ← クリーンアップ

# 例: 「1関数追加」を Agent Team でやると…

単一セッション:
  実作業 5分
  合計   5分

Agent Team(3人):
  起動コスト  3分  (TeamCreate + TaskCreate + メイト起動)
  コンテキスト共有  2分  (各メイトが既存コードをRead)
  実作業  5分  (並列化しても1人で足りるので短縮なし)
  通信・集約  2分  (SendMessage + リーダー確認)
  終了処理  2分  (shutdown × 3 + TeamDelete)
  合計   14分  ← 2.8倍遅い

起動コストの問題は時間だけではありません。トークン消費も大きい。

token-cost-comparison
# トークン消費の比較(同じタスクを完了する場合)

単一セッション:
  入力: ユーザー指示 + ファイル読込
  出力: 実装コード
  合計: 〜1x

Agent Team(3人チーム):
  リーダー入力:   ユーザー指示 + ファイル読込 + 設計判断      0.5x
  メイトA入力:    タスク指示 + ファイル読込 + 実装            0.8x
  メイトB入力:    タスク指示 + ファイル読込 + 実装            0.8x
  メイトC入力:    タスク指示 + ファイル読込 + 実装            0.8x
  リーダー集約:   全メイトの報告受信 + レビュー               0.5x
  通信オーバーヘッド: SendMessage × 6〜10往復                0.5x
  合計: 〜4x

# 30分タスクの並列化 → 時間は変わらず、コストだけ4倍
# 3時間タスクの並列化 → 時間が1/3に短縮、コスト4倍でも価値あり
目安: 「単一セッションで1時間以上かかる」かつ「2つ以上の独立したサブタスクに分解できる」場合に初めてAgent Teamを検討する。それ以下なら単一セッション(またはSubagent)の方が速くて安い。

4つのオーケストレーションパターン

Agent Teamには大きく4つの構成パターンがあります。タスクの性質に合わせて選択します。

パターン1: Swarm(群れ)

ワーカーが自律的にタスクキューから仕事を取って処理する。各ワーカーは交換可能で、タスクの独立性が高い場合に最適。

swarm-pattern
         Leader(オーケストレーター)
        ┌────┼────┐
        ↓    ↓    ↓
      Worker Worker Worker
     (企業A) (企業B) (企業C)
        ↓    ↓    ↓
        └────┼────┘
         集約・CSV出力

# 適: 企業調査、ファイル変換、大量コードレビュー
# 不適: タスク間に依存関係がある場合

パターン2: Pipeline(パイプライン)

各フェーズを専門エージェントが担当する。前工程の完了を待って次に進む。並列化可能なフェーズは並走させる。

pipeline-pattern
# Figma → 実装パイプラインの実例

Phase 1 (Sequential):  Figma分析 → ボックスモデル → レスポンシブ → レビュー
Phase 2 (Parallel):    Frontend設計API調査
Phase 3 (Parallel):    FEレビュー ∥ (Backend設計DB設計)
Phase 4 (Converge):    全体整合性レビュー

# 適: 段階が明確で各段階に異なる専門性が必要
# 不適: 全工程が密結合な場合

パターン3: Competing Hypotheses(競合仮説)

同じ問題に複数エージェントが異なるアプローチで取り組み、リーダーが最善の解を選択する。

competing-hypotheses
         同じバグ
        ┌────┼────┐
        ↓    ↓    ↓
     仮説A  仮説B  仮説C
    "状態管理" "API応答" "型の不整合"
        ↓    ↓    ↓
        └────┼────┘
     Leader が最も説得力のある解を採用

# なぜ有効か:
# 逐次調査だとアンカリングバイアスが発生する。
# 最初の仮説に引きずられて後続の調査が偏る。
# 並列で独立検証すると、生き残った仮説の信頼性が高い。

パターン4: Watchdog(監視)

メインワーカーの作業を別のエージェントがリアルタイム監視する。本番環境への変更やセキュリティが重要な操作で使う。

watchdog-pattern
Worker(実行) → Watcher(監視) → 問題検出 → ロールバック

# 例: DBマイグレーション
Worker: マイグレーション実行
Watcher: SELECT COUNT(*) で行数監視 + エラーログ監視
         異常検知 → Worker に SendMessage で停止指示

# 適: 本番変更、破壊的操作、金融系処理
パターン選択のヒント: 実際のプロジェクトでは複数パターンを組み合わせることが多い。例えば「Phase 1 は Pipeline、Phase 2 は Swarm、Phase 3 は Pipeline」のように、フェーズごとに最適なパターンを適用する。

実プロジェクトの失敗から学んだこと

7原則やパターンは「うまくいった結果」を整理したものです。ここでは実際にやらかした失敗を共有します。

失敗1: コンテキストの暗黙共有を期待した

リーダーとの会話で「さっきの仕様で」と言って通じたので、チームメイトにも同じ調子で指示を出した。結果、チームメイトは仕様を知らないので見当違いの実装をした。

やったこと

  • リーダーに仕様を口頭説明
  • チームメイトには「さっきの仕様で実装して」と指示
  • チームメイトは仕様ファイルを探して見つからず、推測で実装

学び

  • 仕様は必ずファイルに書き出す
  • チームメイトのプロンプトに「まず 01_spec.md を Read せよ」と明記
  • 口頭の合意より書面の合意

失敗2: 全員Opusにしてトークンが爆発した

「品質を上げたいから全員Opus」にした。企業調査10社で、1社あたり Haiku なら数百円のところ、Opus だと数千円。合計で10倍以上のコスト差になった。品質差は調査タスクではほぼ感じなかった。

教訓: タスクの難易度とモデルを一致させる。「Web検索して情報をまとめる」程度ならHaikuで十分。判断・統合・レビューにだけSonnet/Opusを使う。全員シニアエンジニアで固めたチームが最強とは限らない。

失敗3: 依存関係を直列にしすぎた

慎重になりすぎて Task 1 → Task 2 → Task 3 → Task 4 → Task 5 と全部直列に繋げた。Agent Teamを使う意味がなく、単一セッションの方が速かった。

over-serialization
# やってしまったこと(Agent Teamの意味なし)
Task 1 → Task 2 → Task 3 → Task 4 → Task 5
# 所要時間: 単一セッションと同じ + チーム管理のオーバーヘッド

# 本来のあるべき姿
Task 1 ──→ Task 3 ──→ Task 5
Task 2 ──→ Task 4 ──↗
# 所要時間: 約半分

# 問い: 「このタスクは本当に前のタスクの出力が必要か?」
# 答えがNoなら並列化できる

失敗4: ブロードキャストを多用して通信コストが爆発

「全員に伝えたいこと」をすべて broadcast で送った。5人チームなら1回のbroadcastで5通のメッセージが飛ぶ。3回broadcastすれば15通。各メッセージに対してチームメイトが反応するので、トークン消費が指数的に増えた。

対策: broadcastは「全員停止」「方針変更」など緊急時のみ。通常は type: "message" で特定のチームメイトに個別送信する。

失敗5: 終了処理を忘れてゴーストチームが残った

作業が終わって満足し、shutdown_request を送らずにセッションを閉じた。~/.claude/teams/~/.claude/tasks/ にゴミファイルが蓄積し、次のセッションで名前衝突が起きた。

対策: 全タスク完了を確認 → 各チームメイトに shutdown_requestTeamDelete。これをリーダーのプロンプトに「必ず最後に実行する手順」として書いておく。

コスト感覚を養う

Agent Teamのコストは直感より大きくなりがちです。特に Plan Mode を使うと想像以上にトークンを消費します。

構成 トークン倍率(単一セッション比) 向いているタスク
単一セッション 1x 小〜中規模の実装・修正
Subagent × 3 〜2x 独立した並列調査
Agent Team 3人 〜4x 相互依存のある並列作業
Agent Team 3人 + Plan Mode 〜7x 大規模設計・アーキテクチャ決定

コスト削減の実践テクニック

cost-optimized-team
# コスト最適化されたチーム構成の例

Leader:     Opus   ← 全体統括・品質判定
Researcher: Haiku  ← Web調査(5-10体並列OK)
Implementer: Sonnet ← コード実装
Reviewer:   Sonnet ← コードレビュー

# Haiku 10体のコスト ≈ Sonnet 1体分
# 10社並列調査が Sonnet 1回分のコストで完了

実プロジェクトのAgent Team実績

ここまで原則やパターンを紹介してきましたが、「で、実際どうなの?」が気になるはずです。2026年2月の約1ヶ月間で運用した全チームの実績を、タスク分類別に公開します。エンジニアリングだけでなく、事業開発・リサーチ・資料作成まで幅広いタスクを実行した。

全体サマリー

分類 チーム数 総エージェント数 成果物
実装(モバイルアプリ) 2 29〜32 Tier0機能実装 + E2Eテスト
不具合修正 2 26〜32 17タスク(認証・再生・Control Center)
新規機能開発 1 3 14ファイル / 3,538行
提案資料生成 5 12〜23 5デッキ / 91スライド
調査・監査 1 10 9レポート / 40+プロフィール
事業リサーチ 3 5〜10 市場調査レポート / 戦略ガイド / キャリア計画
ビジネスモデル分析 9回 1〜3 9企業分析 + 21ジャンルCSV
社内勉強会資料 1 1〜3 Claude製品ガイド(ビジネスサイド向け)

実装タスク: bg-audio-playback(モバイル音声バックグラウンド再生)

プロダクトのTier0機能として、動画の音声バックグラウンド再生と連続再生をReact Nativeで実装した。最大29エージェントが並列に動く、最も実装に集中したチーム。

bg-audio-playback team (2/9〜2/20)
# チーム構成: 29 エージェント
Leader:  Opus  ← 設計方針・タスク分割・統合レビュー

# 5タスクのPipeline + Swarm
Task 1: "現在のバックグラウンド再生実装を監査し問題点を特定"   
Task 2: "バックグラウンド音声再生の安定化と修正"               
Task 3: "バックグラウンド連続再生(プレイリスト自動進行)を実装" 
Task 4: "MiniPlayer UIを実装"                                 
Task 5: "iOS実機でバックグラウンド再生・連続再生をテスト"       

# 技術スコープ
├── TrackPlayer ネイティブモジュール統合
├── バックグラウンドオーディオ・ライフサイクル管理
├── キュー管理(プレイリスト自動進行)
├── iOS Control Center / Now Playing 対応
├── MiniPlayer UIコンポーネント
└── Appium E2Eテスト

このチームの特徴は「調査と実装を並列化」した点です。Task 1(監査)の途中で既にTask 2〜4の実装が開始される。調査エージェントが発見した問題をSendMessageでリアルタイムに実装エージェントへ共有し、待ち時間を最小化した。

品質評価: 11日間かけて5タスクすべて完了。TrackPlayerのネイティブ統合、キュー管理、Now Playing連携というiOSプラットフォーム固有の知識が必要な実装を、エージェントが既存コードをReadで読み解きながら進めた。Appium E2Eテストで最終検証まで自動化。

実装タスク: control-center-fix(iOS Control Center修正)

bg-audio-playbackチームの成果物で発覚したNow Playing表示のバグを、26エージェントの専用チームで修正。調査10タスクという大規模な原因特定フェーズを経て修正に至った。

control-center-fix team (2/19〜2/20)
# チーム構成: 26 エージェント
Leader:  Opus  ← 調査戦略・仮説管理

# 10タスク(Competing Hypotheses パターン)
Task 1:  "TrackPlayer バックグラウンドオーディオ遷移フロー調査"
Task 2:  "iOS Now Playing 要件と TrackPlayer ネイティブ動作調査"
Task 3:  "track-url-resolver とオーディオURL処理調査"
Task 4:  "バックグラウンド再生の次トラック処理コード調査"
Task 5:  "TrackPlayer キューとイベントシステム調査"
Task 6:  "Appium でバックグラウンド次トラックテスト"
Task 7:  "バックグラウンド次トラック自動再生の修正実装"       ← 実装
Task 8:  "now-playing-video コンテンツIDの発生源調査"
Task 9:  "フォアグラウンド復帰時のナビゲーションフロー調査"
Task 10: "now-playing-video コンテンツIDバグ修正"            ← 実装

10タスク中8タスクが「調査」で、実装は2タスクのみ。これは前述のCompeting Hypotheses パターンの実例です。5つの異なる観点(TrackPlayer遷移、iOS要件、URL処理、キュー管理、コンテンツID)から並列に原因を探り、最も確度の高い仮説に基づいて修正を行った。

品質評価: 「調査8:実装2」の比率が示すように、バグ修正はコードを書く時間より原因特定の時間の方が圧倒的に長い。Agent Teamの真価は、5つの仮説を並列に検証できること。人間が逐次に調べると1仮説ずつしか検証できず、最初の仮説に引きずられるアンカリングバイアスが発生する。

実装タスクで見えた構成パターン

モバイルアプリ実装チームの共通点と、他の分類との違いをまとめます。

特徴 実装タスク 提案資料・リサーチ
チームサイズ 26〜32 エージェント 10〜23 エージェント
タスク期間 2〜11日間 1日(集中スプリント)
調査:実装比率 調査 60〜80% / 実装 20〜40% 調査 0% / 生成 100%
エージェント間通信 高頻度(発見の共有が必要) 低頻度(各自独立作業)
テスト Appium E2E + Mobile MCP 目視確認
最適パターン Pipeline + Competing Hypotheses Pipeline + Swarm
implementation-team-architecture
# 実装タスクの典型的なチーム構成

Leader(Opus)
├── Phase 1: 並列調査
│   ├── auth-investigator   ← 認証フロー専門
│   ├── nav-investigator    ← ナビゲーション状態専門
│   ├── track-investigator  ← TrackPlayerネイティブ専門
│   ├── queue-investigator  ← キュー管理専門
│   └── url-investigator    ← URL解決専門
│
├── Phase 2: 仮説統合(Leader自身が判断)
│
├── Phase 3: 修正実装
│   └── mobile-fixer        ← 修正を実装
│
└── Phase 4: 検証
    └── e2e-tester          ← Appium でテスト実行

# ポイント:
# 1. 調査エージェントは「観点」で分ける(ファイルではない)
# 2. 仮説統合はLeaderが行う(最も判断力が高いモデル)
# 3. 修正実装は最小限のエージェントで(ファイル競合回避)
実装タスクの核心: 実装タスクでは「書くコードの量」より「何を書くべきか特定する調査」が品質を決める。26エージェントのうち修正コードを書いたのは2〜3体だけ。残りは全員「問題の本質を理解する」ために動いていた。Agent Teamの並列性は、コード生成ではなく仮説検証に最も効果を発揮する。

不具合修正: fix-mobile-auth-refresh

モバイルアプリで「数日放置後にログインしてもローディングが終わらない」という再現が難しいバグ。Mobile MCPでシミュレータのスクリーンショットを撮りながら原因を特定するパイプライン型チームを組んだ。

fix-mobile-auth-refresh team
# チーム構成
Leader:  Opus   ← 全体統括・修正方針決定

# 4タスクのPipeline
Task 1: "Mobile MCPでアプリの現状確認・エラー特定"         ✓ completed
Task 2: "mobileパッケージのコード構造・エラー調査"         ✓ completed
Task 3: "frontendの実装パターンを参考にmobileのAPI修正"  ✓ completed
Task 4: "Mobile MCPで修正後の動作検証"                   ⧖ in_progress

# ポイント: Task 1 と Task 4 でMobile MCPスクリーンショットを使い
# 「目で見て確認」する Watchdog 的な検証を組み込んだ
品質評価: Task 3 では既存の frontend パッケージの実装パターンをReadで読み取り、同じパターンで mobile を修正した。「動いているコードを参考にする」という戦略が、型エラーやAPIの使い方ミスを防いだ。

同時期に別のタスクリストで、SWRのenabledオプション修正やReact Navigationのパッチなど3つの独立したバグ修正も並列実行していた。こちらはSwarm型で、各バグが独立した別ファイルを対象としていたためファイル競合なし。

新規機能開発: freee-shinkoku(確定申告準備ツール)

freee会計APIと連携して確定申告の数値を自動計算するTypeScriptツール。2つの専門エージェントが並列で別モジュールを実装するPipeline型。

freee-shinkoku team
# チーム構成(全員 Opus + typescript-pro)
Leader:           Opus  ← 設計・タスク分割・統合レビュー
freee-connector: Opus  ← OAuth2認証・APIクライアント・データ取得
tax-engine:      Opus  ← 所得税計算・消費税計算・税制定数

# 成果物: 14ファイル / 2,730行
src/freee/
  ├── types.ts      (157行) Zodスキーマ
  ├── auth.ts       (103行) OAuth2フロー
  ├── client.ts     (203行) APIエンドポイント
  └── data-fetcher.ts (57行) 一括データ取得

src/tax/
  ├── types.ts      (206行) 税額計算の入出力型
  ├── constants.ts  (480行) 令和7年分税制定数
  └── calc.ts       (1,350行) 所得税・消費税計算
品質評価: 共有型定義(Zodスキーマ)をLeaderがPhase 1で確定し、2エージェントがそれぞれの実装で参照する設計。金額計算は全てint型(float禁止)で端数処理を国税通則法に準拠させた。ドメイン知識が深いタスクほど、プロンプトに仕様を詳細に書くことが品質を決める。税制定数480行・計算ロジック1,350行がバグなく生成された。

ただし、このチームは全員Opusを使った。前述の「失敗2: 全員Opus」に該当するが、税額計算のようなドメイン精度が重要なタスクではOpusの判断力が効いた。コスト最適化より正確性を優先した判断は正しかった。

提案資料生成: proposal-slides(5デッキ)

1ヶ月で5つの提案資料をAgent Teamで生成した。最大23エージェントの大規模チーム。

デッキ 日付 エージェント数 スライド数 形式
NE運用最適化提案 2/16 23 11 Google Slides + PPTX + PDF
Claude製品ガイド 2/17 16 24 Google Slides + PPTX + PDF
Cowork研修資料 2/17 - 23 Google Slides
UCP解説 2/17 - 21 Google Slides
おさる×MOSH提案 2/20 - 12 Google Slides
proposal-slides pipeline
# 提案資料生成のAgent Team構成
Leader(Opus): ソースMD分析 → 最終レビュー
   ↓
slide-planner(Sonnet): スライド構成 + 発表者ノート設計
   ∥  ← 並列
visual-designer(Sonnet): HTML→PNG ビジュアルアセット生成
   ↓  ← 両方完了後
deck-assembler(Sonnet): gogcli でGoogle Slidesデッキ組立

# 成果物フォルダ(1デッキあたり約20ファイル)
proposal-slides/YYYY-MM-DD-{slug}/
├── 01_structure.json       # スライド構成仕様
├── 02_slide_plan.md        # テキストコンテンツ
├── 02_speaker_notes/       # 発表者ノート
├── 03_assets/html/         # 自己完結HTML(1920x1080)
├── 03_assets/png/          # Playwrightスクリーンショット
├── 04_deck_info.json       # デッキID・URL
└── output.pptx / .pdf      # エクスポート
品質評価: slide-planner と visual-designer の並列化により、逐次で1時間かかるデッキ生成が約20分に短縮された。ただし gogcli の発表者ノートAPIにバグがあり、テキストスライドのノートが反映されないケースがあった。これは Agent Team ではなくツール側の制約。最大23エージェントのチームも問題なく完走した。

調査・監査: ne-automation-audit

ネクストエンジンの自動化状況を診断し、改善戦略を策定する10エージェントのSwarm型チーム。各エージェントが設定項目・連携状態・エラーログなどを並列に調査し、リーダーがレポートに統合した。

同じリサーチ領域では、/bizgram-analyze コマンドによる企業分析も9件実施。企業分析と、美容・フィットネス・ヨガなどジャンル別のクリエイター調査(各20〜40プロフィール)を生成した。


非エンジニアリングタスク: ビジネスモデル分析(bizgram)

Agent Teamはコードを書くだけのものではない。/bizgram-analyzeコマンドで企業のビジネスモデルを図解化する作業を9件実行した。Web検索で企業情報を収集し、3×3の9マスフレームワーク(図解総研のビズグラム形式)に落とし込む。

bizgram-analyze workflow
# ビジネスモデル分析のAgent構成
Leader(Opus/Sonnet): 企業URL受け取り → 最終レビュー
   ↓
web-researcher(Haiku): WebSearchで企業サイト・IR・記事を収集
   ↓
model-analyst(Sonnet): 収集データから9マス図解 + Mermaid生成

# 分析対象の例
├── 競合サービス分析
├── 提案先企業のビジネス構造把握
└── 自社サービスのポジショニング整理

# 成果物
bizgram-outputs/YYYY-MM-DD-{company}.md
├── 9マス図解(テキスト + Mermaid)
├── モノ・カネ・情報の流れ
├── 収益モデルの特徴
└── 差別化要因の分析
品質評価: 1件あたり約5〜10分で完了。人間が同じ分析をすると1時間以上かかる作業。ただし、Web検索の精度に依存するため、非公開情報や最新の組織変更は反映されない。IR情報が充実した上場企業の分析精度が最も高かった。

非エンジニアリングタスク: クリエイター市場調査(21ジャンル一括)

プラットフォーム事業のターゲット分析として、21ジャンル×各20〜50プロフィールのクリエイター調査を実行した。ヨガ、パーソナルトレーニング、メイクアップ、占い、起業副業など、ジャンルごとにCSVファイルを生成する大規模なSwarm型タスク。

creator-market-research (21 genres)
# 21ジャンルのクリエイター市場調査
Leader(Opus): ジャンル選定 → チームメイト割り当て → CSV統合

# 各チームメイトが1ジャンルを担当(Swarm型)
genre-01(Haiku): ヨガ・ピラティス     → 01_ヨガピラティス.csv
genre-02(Haiku): パーソナルトレーニング → 02_パーソナルトレーニング.csv
genre-03(Haiku): ダンス・バレエ         → 03_ダンスバレエ.csv
  ...
genre-21(Haiku): ライフスタイル・その他 → 21_ライフスタイルその他.csv

# 各CSVに含まれるカラム
名前, プラットフォームURL, Instagram, フォロワー数,
提供サービス, 価格帯, ターゲット層, 差別化ポイント
ポイント: このタスクは「1エージェント1ジャンル」の厳密なSwarm。全員がHaikuで十分(Web検索→構造化データ出力の定型作業)。21ジャンルを逐次に調べると数時間かかるが、並列実行で約30分に短縮された。ファイル競合もゼロ(各エージェントが自分のCSVだけを書く)。

非エンジニアリングタスク: 事業リサーチ(Deep Research)

「海外で成功しているインディーハッカーのパターン分析」「ソロ開発者のグローバルSaaS戦略」といった事業開発リサーチもAgent Teamで実行した。

deep-research examples
# 事業リサーチの実績

"海外インディーハッカー調査"
├── Reddit / Indie Hackers / Hacker News から収益データ収集
├── 成功パターンの分類(SaaS / API / マーケットプレイス)
└── 出力: indie-hacker-global-business-research-2026.md

"ソロ開発者グローバルSaaS戦略"
├── 市場規模・参入障壁・収益モデルの調査
├── 実証済みビジネスモデルパターンの整理
└── 出力: solo-developer-global-saas-strategy-guide.md

"キャリア開発計画"
├── 自分の現在地と目標のギャップ分析
├── 6ヶ月のマイルストーン設計
└── 出力: executive-development-2026.md
品質評価: Deep ResearchタスクはWebSearchを多用するため、検索精度がボトルネックになる。効果的だったのは「Reddit site:reddit.com」「Hacker News site:news.ycombinator.com」のようにソースを限定したプロンプト。また、数値データ(収益額、ユーザー数)は必ずソースURLを併記させることで検証可能性を確保した。

非エンジニアリングタスク: 社内勉強会資料

「Claude製品をビジネスサイドのメンバーにどう説明するか」という社内勉強会用の資料も生成した。技術者向けではなく、非エンジニアが読んで理解できることが品質基準。

internal-training-material
# 社内勉強会資料の構成

"Claude製品の使い分けガイド(ビジネスサイド向け)"
├── 3つの製品の全体像(Chat / Code / API)
├── 各製品の使い分けフローチャート
├── 具体的な業務別ユースケース
├── 料金プラン比較表
└── 導入ステップ(非エンジニア向け手順書)

# プロンプトの工夫
→ 「エンジニア用語を使わず、業務の言葉で書く」を指示
→ 「各セクションに "こんな場面で使える" を1つ以上入れる」
→ 「スクリーンショットの代わりに操作手順を箇条書きで」
学び: 非エンジニア向け資料の生成では、「誰が読むか」をプロンプトに明記することが品質を決める。「ビジネスサイドのメンバーが読む」「技術用語は使わない」「具体的な業務シーンを例示する」の3点をプロンプトに入れるだけで、出力のトーンが適切に調整された。

分類別の品質傾向

1ヶ月の実績から見えた傾向をまとめます。

分類 最適パターン 推奨モデル 品質を上げるコツ
実装タスク Pipeline + Competing Hypotheses Lead: Opus / 調査: 多数並列 調査を「観点」で分割して並列化する。修正は最小エージェントで。Appium E2Eで検証を自動化する
不具合修正 Pipeline + Watchdog Lead: Opus 「動いているコード」を参照先として明示する。修正前後でスクリーンショットを撮って視覚的に検証する
新規機能開発 Pipeline(並列フェーズ付き) 全員: Opus or Sonnet 共有型定義をPhase 1で確定する。ドメイン知識はプロンプトに全部書く(「調べて」は危険)
提案資料生成 Pipeline(slide-planner ∥ visual-designer → assembler) Lead: Opus / Worker: Sonnet ソースMDの品質が最終品質を決める。テキストとビジュアルは必ず並列化する
調査・監査 Swarm Worker: Haiku / 集約: Sonnet 1エージェント1企業(1トピック)を厳守。集約フェーズにだけSonnetを使う
事業リサーチ Pipeline(収集→分析→構造化) Lead: Opus / Worker: Sonnet 検索ソースを限定する(site:指定)。数値には必ずソースURLを併記させる
ビジネスモデル分析 Pipeline(Web収集→図解生成) Sonnet or Haiku IR情報が充実した企業ほど精度が高い。フレームワーク(9マス等)をプロンプトに明示する
社内資料・勉強会 単体 or Pipeline Sonnet 「誰が読むか」をプロンプトに明記。技術用語禁止・業務シーン例示の指示が効く

数字で見る実績

monthly-stats (2026-02)
# Agent Team 月次実績

チーム起動回数:          11
総エージェント起動数:    〜150
最大チームサイズ:        32 エージェント(fix-mobile-auth-refresh)

# 実装成果物
モバイルアプリ実装:      2チーム(音声再生・Control Center対応)
実装タスク:              15タスク(bg-audio 5 + control-center 10)
生成コード(ツール):    3,538行(TypeScript / freee-shinkoku)
生成スライド:            91枚(5デッキ)
バグ修正タスク:          17タスク(認証・再生・ナビゲーション)

# 非エンジニアリング成果物
企業分析レポート:        9件(ビジネスモデル図解)
クリエイター市場調査:    21ジャンル(各20〜50プロフィール / CSV出力)
事業リサーチレポート:    3件(海外市場・SaaS戦略・キャリア計画)
社内勉強会資料:          1件(ビジネスサイド向けClaude製品ガイド)

# 完了率
チーム完走率:            100%(途中クラッシュゼロ)
bg-audio タスク完了:     100%(5/5)
control-center タスク:   進行中(10タスク)

# 品質指標
ファイル競合:            0件(1エージェント1ファイル原則を遵守)
型エラー:               0件(Zodスキーマ + strict TypeScript)
E2Eテスト:              Appium自動化(モバイル実装チーム)
手戻り:                 1件(gogcli ノートAPI制約)
最大の学び: Agent Teamの品質は「プロンプトの詳細度」と「タスク分割の正確さ」で決まる。freee-shinkoku の tax-engine プロンプトは80行以上の詳細仕様(端数処理ルール、参照すべきファイルパス、各関数のシグネチャ)を含んでおり、それが 1,350 行のバグなし計算ロジック生成につながった。逆に「調べて実装して」だけの曖昧な指示では、モデルが Opus でも品質は担保できない。

アンチパターン

1. 全員 Opus 症候群

「良い出力が欲しいから全員Opusにしよう」は、全社員をシニアエンジニアで固めるようなもの。コストが爆発する上に、単純作業にオーバースペックなモデルを使っても品質は変わりません。

2. チームメイトの過負荷

1つのチームメイトに複数ファイルの実装を任せると、コンテキストウィンドウを圧迫して品質が落ちます。タスクは小さく、エージェントは多くが基本。

3. ブロードキャスト濫用

SendMessagetype: "broadcast" はチームメンバー全員にメッセージを送ります。N人のチームなら N回のメッセージ送信が発生し、コストが線形に増加する。特定のメンバーへの個別メッセージをデフォルトにすべき。

4. 依存関係の過剰設計

すべてのタスクを直列に繋げると、Agent Teamの意味がない。「本当に前のタスクの出力が必要か?」を考え、可能な限り並列化する。

parallelism
# BAD: 全部直列(Agent Teamの意味なし)
Task 1 → Task 2 → Task 3 → Task 4 → Task 5

# GOOD: 可能な限り並列
Task 1 ──→ Task 3 ──→ Task 5
Task 2 ──→ Task 4 ──↗

Agent Team内でコンテキストを共有する6つの方法

Agent Teamの各チームメイトは独立したコンテキストで動いています。リーダーとの会話履歴を持たず、他のチームメイトの作業も見えません。しかし「共有できない」わけではなく、明示的に設計すれば複数の方法でコンテキストを共有できます。

方法 共有タイミング 永続性 適用場面
1. 起動プロンプト埋め込み チームメイト起動時 セッション中ずっと有効 仕様・API設計・型定義の共有
2. 中間ファイル方式 任意のタイミング ファイルが存在する限り 段階的に確定する設計情報
3. CLAUDE.md 自動(起動時に読み込み) 永続 コーディング規約・アーキテクチャ
4. 共有タスクリスト TaskGet で都度参照 チーム存続中 タスク間の依存情報・進捗
5. SendMessage リアルタイム 受信者の会話履歴のみ 作業中の発見・方針変更
6. チーム設定ファイル Read で都度参照 チーム存続中 メンバー構成の把握

方法1: 起動プロンプト埋め込み

チームメイトを Task(team_name=..., prompt=...) で起動する際、prompt に仕様全体を埋め込む方法です。最も確実にコンテキストを渡せます。

spawn-time-context-injection
# チームメイト起動時にプロンプトに仕様を埋め込む
Task(
  team_name = "freee-shinkoku",
  name      = "freee-connector",
  prompt    = """
あなたは freee-connector 担当です。

## 実装するファイル
### src/freee/auth.ts - OAuth2認証
- getAuthorizationUrl(clientId, redirectUri): 認証URL生成
- exchangeCode(clientId, clientSecret, code, redirectUri): トークン取得
- refreshToken(clientId, clientSecret, refreshToken): リフレッシュ
- OAuth2エンドポイント: https://accounts.secure.freee.co.jp/...

### src/freee/client.ts - APIクライアント
- getCompanies(): GET /api/1/companies
- getDeals(companyId, params): GET /api/1/deals
- レート制限対応: 429 → 指数バックオフ

## 注意事項
- 金額は全てint(円単位)。float禁止
- any型禁止(unknownを使用)
"""
)

これは実際の freee-shinkoku チームで使ったパターンです。各チームメイトに80行超の詳細プロンプトを渡し、API仕様、エンドポイント、型定義、エラーハンドリング方針まで含めました。チームメイトは起動直後から迷いなく実装を開始できます。

メリット: 起動時点でコンテキストが確定しているため、「ファイルを読み忘れた」「情報が見つからない」という事故が起きない。
デメリット: 起動後にプロンプトを変更できない。仕様が途中で変わる場合は方法2や5と併用する。

方法2: 中間ファイル方式(最も汎用的)

リーダーが設計や仕様をファイルに書き出し、チームメイトのプロンプトに「まずこのファイルを Read せよ」と指示する方法です。

intermediate-file-sharing
# Phase 1: リーダーが設計書を書き出す
Write("design/01_api_spec.md", api_design_content)
Write("design/02_db_schema.md", db_schema_content)

# Phase 2: チームメイトに「先にファイルを読め」と指示
Task(
  name   = "backend-engineer",
  prompt = """
まず以下のファイルを Read で読んでから実装を開始してください:
1. design/01_api_spec.md(API仕様)
2. design/02_db_schema.md(DBスキーマ)

実装先: src/handlers/
"""
)

# 別のチームメイトも同じファイルを参照できる
Task(
  name   = "frontend-engineer",
  prompt = """
まず design/01_api_spec.md を Read で読み、
API仕様に合わせたフロントエンド実装を行ってください。
"""
)

この方法の最大の強みは、Phase 1 で確定した設計を Phase 2 の複数チームメイトが同時に参照できることです。提案資料生成の proposal-slides チームでは、01_structure.json をリーダーが生成し、slide-plannervisual-designer の2名が並列で読み込んで作業しました。

実践Tips: ファイル名に番号を付けて実行順を表現する(01_spec.md02_design.md03_impl/)。チームメイトは番号で作業の前後関係を直感的に理解できる。

方法3: CLAUDE.md(プロジェクト全体の共有コンテキスト)

プロジェクトの CLAUDE.md は、同じ作業ディレクトリで起動されたすべてのエージェントに自動的に読み込まれます。チームメイトの cwd を同じディレクトリに設定すれば、コーディング規約やアーキテクチャの方針を暗黙的に共有できます。

claude-md-shared-context
# プロジェクトの CLAUDE.md に書いておくと全員が従う

## コーディング規約
- TypeScript strict モード
- any 型禁止(unknown を使用)
- 金額は int(円単位)、float 禁止

## アーキテクチャ
- API: Hono + Zod バリデーション
- DB: Prisma ORM
- テスト: Vitest

## ファイル構成
src/
├── handlers/    # APIハンドラー
├── services/    # ビジネスロジック
├── types/       # 型定義
└── utils/       # ユーティリティ

# → チームメイト全員がこの構成に従って実装する
注意: CLAUDE.md は「全員に同じ情報を渡す」ものであり、チームメイトごとに異なるコンテキストを渡すことはできない。タスク固有の情報は方法1(プロンプト)か方法2(中間ファイル)で渡す。

方法4: 共有タスクリスト

Agent Teamの全メンバーは同じタスクリスト(~/.claude/tasks/{team-name}/)にアクセスできます。TaskGet でタスクの description を読めば、他のチームメイトに割り当てられたタスクの内容も確認できます。

shared-task-list
# タスクの description にコンテキストを含める
TaskCreate(
  subject     = "OAuth2認証モジュール実装",
  description = """
freee OAuth2フローを実装する。
- 認証URL: https://accounts.secure.freee.co.jp/public_api/authorize
- トークンURL: https://accounts.secure.freee.co.jp/public_api/token
- スコープ: read write
- トークン保存先: .freee-tokens.json

[依存] Task #1 の型定義(src/freee/types.ts)が必要。
先に TaskGet(#1) で型定義の詳細を確認すること。
"""
)

# 別のチームメイトが TaskGet で内容を確認できる
# → 自分のタスクとの整合性を自発的にチェック可能

方法5: SendMessage によるリアルタイム共有

作業中に発見した情報や方針変更を、SendMessage で特定のチームメイトに直接伝えます。

realtime-context-sharing
# 作業中に発見した問題を関係者に即座に共有
SendMessage(
  type      = "message",
  recipient = "frontend-engineer",
  content   = """
APIレスポンスの型が変わりました。
変更前: { users: User[] }
変更後: { data: User[], meta: { total: number } }

src/types/api.ts を更新済みなので Read で確認してください。
"""
)

# 注意: broadcast は全員に送信されるため、
# 「全員停止」「根本方針変更」以外では使わない
注意: SendMessage は受信者の会話履歴に入るだけで、ファイルとして残らない。重要な情報はファイルに書き出してからメッセージで通知するのがベスト。「型が変わった」ではなく「型を更新したファイルを Read してください」。

方法6: チーム設定ファイル

チーム設定ファイル(~/.claude/teams/{team-name}/config.json)は全メンバーが Read で参照できます。メンバー名・役割・作業ディレクトリが記載されており、「誰に何を聞けばいいか」を把握できます。

team-config-discovery
# チームメイトはチーム設定を読んでメンバー構成を把握できる
Read("~/.claude/teams/freee-shinkoku/config.json")

# → members 配列から以下がわかる:
#   - "freee-connector": freee API連携担当(型定義は彼に聞く)
#   - "tax-engine": 税額計算ロジック担当
#   - "team-lead": オーケストレーター

# これにより、チームメイト同士が
# 「型定義について freee-connector に SendMessage する」
# といった自発的な連携が可能になる

使い分けのガイドライン

context-sharing-decision-tree
# コンテキスト共有の使い分け

起動前に確定している情報?
├── Yes → 方法1: プロンプト埋め込み(最も確実)
│         └── 例: API仕様、型定義、実装ルール
└── No → 情報は全チームメイト共通?
          ├── Yes → 方法3: CLAUDE.md(自動読み込み)
          │         └── 例: コーディング規約、アーキテクチャ方針
          └── No → 情報はファイルとして残すべき?
                    ├── Yes → 方法2: 中間ファイル(最も汎用)
                    │         └── 例: 設計書、スキーマ、中間成果物
                    └── No → 方法5: SendMessage(即時通知)
                              └── 例: 方針変更、発見した問題
実践で最も効果的な組み合わせ: 方法3(CLAUDE.md)で全体方針 + 方法1(プロンプト)でタスク固有の仕様 + 方法2(中間ファイル)でフェーズ間の成果物受け渡し。この3層構造で、チームメイトが「何をどう作るか」を迷うことはほぼなくなる。

組織論から学ぶAgent Team設計

Agent Teamの設計は、実は企業の組織論と驚くほど共通しています。50年以上の研究蓄積がある組織論を応用すれば、Agent Teamの設計をさらに洗練できます。ここでは5つの組織論を紹介し、そのうち現在のClaude Codeの仕組みだけでは実現できない3つについて、具体的なツール設計を示します。

適用できる組織論の全体像

組織論 核心のアイデア Agent Teamへの応用 実現状況
Inverse Conway Maneuver 組織構造がシステム構造を決める。逆に、望むアーキテクチャに合わせて組織を設計する コードのモジュール境界に合わせてエージェントを配置 実現可能
Team Topologies 4種のチーム型と3種の連携モードで認知負荷を管理 エージェント間の連携契約を明示化 要ツール設計
RACI Matrix 各タスクのResponsible/Accountable/Consulted/Informedを明確化 メッセージルーティングの自動化 要ツール設計
SECI Model(野中郁次郎) 暗黙知→形式知の変換サイクルで組織の知識を創造 チーム横断の学習・知識蓄積 要ツール設計
Andon Cord(トヨタ) 品質問題を発見したら誰でもラインを止められる エージェントが品質問題で全体を一時停止 要ツール設計

1. Inverse Conway Maneuver(すでに適用可能)

Mel Conwayが1967年に発見した法則: 「システムの構造は、それを設計する組織のコミュニケーション構造を反映する」。逆コンウェイ戦略はこれを逆手に取り、望むシステム構造に合わせて組織を設計します。

inverse-conway-maneuver
# 望むアーキテクチャ(マイクロサービス的な分離)
src/
├── auth/          # 認証ドメイン
├── payment/       # 決済ドメイン
├── notification/  # 通知ドメイン
└── shared/types/  # 共有型定義

# → エージェント構成をアーキテクチャに合わせる
Agent "auth-engineer"         → src/auth/ のみ担当
Agent "payment-engineer"      → src/payment/ のみ担当
Agent "notification-engineer" → src/notification/ のみ担当
Agent "type-architect"        → src/shared/types/ を先に確定

# 各エージェントがドメイン境界を越えないため、
# 自然とクリーンなモジュール分離が維持される

これは原則2「1エージェント1ファイル」の上位概念です。「1エージェント1ドメイン」にすることで、DDD(Domain-Driven Design)の Bounded Context とエージェント境界が一致し、意図しないドメイン汚染を防げます。

すぐに使えるTips: チーム設計の最初に「まずディレクトリ構造を決める → 各ディレクトリの担当エージェントを決める」の順で進めると、Inverse Conway Maneuverが自然に実現される。

2. Team Topologies: 連携モードの契約化

Matthew SkeltonとManuel PaisのTeam Topologiesは、チーム間の連携を3つのモードに分類します。

連携モード 企業組織での例 Agent Teamでの対応
Collaboration 2チームが共同で新機能開発 2エージェントが同じファイルを参照・相互レビュー
X-as-a-Service プラットフォームチームがAPIを提供 エージェントAが仕様書を出力、Bがそれを消費
Facilitating SREチームが他チームの運用改善を支援 レビューアーエージェントが実装を検証して改善提案

現在のClaude Code Agent Teamには「連携モード」を定義する仕組みがありません。全エージェントがフラットに SendMessage で通信するため、あるエージェントの出力が別のエージェントにとって「仕様書」なのか「相談」なのか「参考情報」なのかが曖昧になります。

ツール設計: Team Topology Protocol

チームの連携契約をJSON定義し、エージェント間通信を構造化します。

.claude/team-topologies/project-x.json
{
  "agents": {
    "api-designer":    { "type": "complicated-subsystem", "domain": "API設計" },
    "frontend":        { "type": "stream-aligned",       "domain": "UI実装" },
    "backend":         { "type": "stream-aligned",       "domain": "サーバー実装" },
    "reviewer":        { "type": "enabling",            "domain": "品質保証" }
  },
  "interactions": [
    {
      "from": "api-designer",
      "to": ["frontend", "backend"],
      "mode": "x-as-a-service",
      "contract": "design/openapi-spec.yaml",
      // ↑ api-designerはこのファイルを「成果物」として出力し、
      //   frontendとbackendはこれを「入力仕様」として消費する
    },
    {
      "from": "frontend",
      "to": "backend",
      "mode": "collaboration",
      "shared_files": ["src/types/"],
      // ↑ 型定義を双方が参照・更新する(ファイルの共同所有)
    },
    {
      "from": "reviewer",
      "to": ["frontend", "backend"],
      "mode": "facilitating",
      // ↑ reviewerは実装を検証し改善提案するが、自らは書き換えない
    }
  ]
}

この定義があれば、リーダーのプロンプトに「interactions 定義に従ってチームメイトを起動・連携させよ」と書くだけで、曖昧だった通信パターンが契約になります。

topology-aware-orchestration
# X-as-a-Service モード: 一方通行の仕様提供
Phase 1: api-designer → design/openapi-spec.yaml を出力
Phase 2: frontend, backend が spec.yaml を Read して並列実装
         # frontendはapi-designerに直接質問しない(契約で定義済み)

# Collaboration モード: 双方向の共同作業
Phase 2: frontend ⟷ backend が src/types/ を共同編集
         # 型変更時は SendMessage で相互通知

# Facilitating モード: 検証と改善提案
Phase 3: reviewer が frontend, backend の成果物をレビュー
         # 直接修正はしない。改善点をメッセージで指摘する

3. RACI Matrix: メッセージルーティングの自動化

RACI Matrixは企業の責任分担を4つの役割で明確にするフレームワークです。Agent Teamでは「誰に何の粒度で情報を送るか」を自動化できます。

役割 定義 Agent Teamでの行動 受け取る情報
Responsible 作業を実行する タスクを担当するエージェント タスクの全詳細
Accountable 最終承認する リーダー(またはレビューア) 成果物 + 判断ポイント
Consulted 事前に意見を求められる 関連ドメインのエージェント 設計概要 + 質問
Informed 事後に報告を受ける 影響を受ける周辺エージェント 1行サマリーのみ

現在の Agent Team では SendMessage の宛先を手動で選ぶ必要があり、リーダーの判断で「誰に送るか」「どの粒度で送るか」が変わってしまいます。

ツール設計: RACI Auto-Router

タスク完了時に RACI 定義を読み込み、役割に応じた粒度でメッセージを自動送信するシステムです。

.claude/raci/project-x.json
{
  "tasks": {
    "api-design": {
      "R": "api-designer",
      "A": "team-lead",
      "C": ["frontend", "backend"],
      "I": ["reviewer"]
    },
    "frontend-impl": {
      "R": "frontend",
      "A": "team-lead",
      "C": ["api-designer"],
      "I": ["backend"]
    }
  }
}

# api-designer がタスク完了すると、Auto-Router が:
# 1. team-lead(A)に全文レポートを送信 → 承認要求
# 2. frontend, backend(C)に設計概要 + 「意見ありますか?」を送信
# 3. reviewer(I)に「API設計完了」の1行通知のみ送信
raci-auto-router.ts(実装イメージ)
// PostToolUse フックで TaskUpdate(status: "completed") を検知
function onTaskCompleted(taskId: string, output: string) {
  const raci = readRaciConfig(teamName);
  const task = raci.tasks[taskId];

  // Accountable: 全文 + 承認要求
  sendMessage(task.A, {
    content: `タスク完了: ${output}\n\n承認をお願いします。`,
    summary: `${taskId} 完了 - 承認要求`
  });

  // Consulted: 要約 + 意見求む
  for (const agent of task.C) {
    sendMessage(agent, {
      content: `${taskId} が完了しました。\n概要: ${summarize(output)}\n影響がありそうな点があればお知らせください。`,
      summary: `${taskId} 完了 - レビュー依頼`
    });
  }

  // Informed: 1行通知のみ
  for (const agent of task.I) {
    sendMessage(agent, {
      content: `[通知] ${taskId} が完了しました。`,
      summary: `${taskId} 完了通知`
    });
  }
}
期待される効果: RACI Auto-Router により、broadcast の乱用を構造的に排除できる。全員に同じ粒度で送るのではなく、「承認者には全文」「関係者には要約」「周辺には1行」と自動で分けるため、トークン消費を大幅に抑えながら情報の行き渡りを保証できる。

4. SECI Model: チームを越えた組織学習

野中郁次郎のSECIモデルは、知識創造を4つのプロセスで説明します。Agent Teamの最大の弱点は、チームが終了するとすべての知識が消えることです。

プロセス 変換 企業での例 Agent Team での現状
Socialization 暗黙知 → 暗黙知 OJT、ペアプログラミング SendMessage での情報共有
Externalization 暗黙知 → 形式知 ベストプラクティスの文書化 チーム終了で消滅
Combination 形式知 → 形式知 マニュアルの統合・体系化 チーム横断の統合なし
Internalization 形式知 → 暗黙知 研修、標準手順の実践 CLAUDE.mdで部分的に実現

人間の組織では、プロジェクトが終わっても参加者の頭に経験が残ります。しかし Agent Team は TeamDelete した瞬間にすべてが消えます。次に同種のプロジェクトを始めても、前回の失敗を繰り返す可能性があります。

ツール設計: Organizational Memory System

チーム終了時に自動でレトロスペクティブを生成し、知識を永続化する仕組みです。

organizational-memory-architecture
# 知識の永続化ディレクトリ
~/.claude/memory/team-learnings/
├── retros/                          # 自動生成レトロスペクティブ
│   ├── 2026-02-15-freee-shinkoku.md
│   ├── 2026-02-20-proposal-slides.md
│   └── 2026-02-25-bg-audio-playback.md
├── patterns/                        # 成功パターン集
│   ├── effective-prompts.md         # よく効いたプロンプト設計
│   ├── cost-optimization.md         # コスト最適化の知見
│   └── parallel-patterns.md         # 並列化パターン
└── anti-patterns/                   # 失敗パターン集
    ├── context-sharing-failures.md
    └── over-parallelization.md
auto-retrospective-hook(TeamDelete時に自動実行)
# .claude/settings.json に追加するフック
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "TeamDelete",
        "script": "~/.claude/hooks/generate-retro.sh"
      }
    ]
  }
}

# generate-retro.sh の動作:
# 1. チームのタスクリストを読み込み
# 2. 完了タスクの description, blockedBy, 所要時間を集計
# 3. レトロスペクティブを自動生成:
#    - チーム構成(メンバー数、モデル配分)
#    - タスク完了率、並列化率
#    - ボトルネックになったタスク
#    - 使えたパターン / 改善すべき点
# 4. ~/.claude/memory/team-learnings/retros/ に保存
retro-example.md(自動生成されるレトロ)
# Retrospective: freee-shinkoku (2026-02-15)

## チーム構成
- リーダー: Opus(オーケストレーション)
- freee-connector: Opus(API連携実装)
- tax-engine: Opus(税額計算エンジン)

## 成果
- 14ファイル / 3,538行のTypeScriptコード
- 全タスク完了率: 100%

## 学び
- [有効] 起動プロンプトに80行の詳細仕様を埋め込み → 追加指示ゼロ
- [有効] 金額int/float禁止ルールをプロンプトに明記 → 端数処理バグなし
- [改善] 3名全員Opusは過剰。freee-connectorはSonnetで十分だった
- [改善] freee APIのレート制限429をプロンプトで言及したが、
         実際のテストは不足

## 次回への推奨
- API連携系エージェントはSonnetで起動すること
- テストタスクを独立した4番目のエージェントに分離すること

蓄積されたレトロスペクティブは、次のチーム起動時にリーダーのプロンプトへ自動注入できます:

knowledge-injection
# 新チーム起動時のリーダープロンプト
"""
## 過去の学び(自動注入)
~/.claude/memory/team-learnings/retros/ を Read して、
同種プロジェクトの学びを活かしてください。

特に以下を確認:
- 同じドメインの過去レトロ
- anti-patterns/ の回避すべきパターン
- patterns/ の有効なプロンプト設計
"""
SECIモデルとの対応:
Externalization = レトロスペクティブの自動生成(暗黙知→形式知)
Combination = patterns/ への知見集約(形式知→形式知)
Internalization = 次のチームのプロンプトへの自動注入(形式知→実践知)

5. Andon Cord: 品質問題での全体停止

トヨタ生産方式のAndon Cord(あんどん紐)は、生産ラインの作業者が品質問題を発見したとき、ラインを止めて問題解決を優先する仕組みです。

現在の Agent Team では、あるエージェントが致命的な問題を発見しても、他のエージェントは知らずに作業を続けてしまいます。broadcast で全員に通知しても、受信側が「作業を止めるべきか」を判断する基準がありません。

ツール設計: Andon Signal

andon-system
# チームメイトが品質問題を発見した場合の手順

# 1. Andon ファイルを作成(全エージェントが監視)
Write(".claude/andon/{team-name}.json", {
  "triggered_by": "backend-engineer",
  "severity": "critical",
  "reason": "DB スキーマの外部キー制約が全エンドポイントに影響",
  "timestamp": "2026-02-28T14:30:00Z"
})

# 2. PreToolUse フックが全エージェントの Write/Edit を一時停止
#    → "Andon が発動中です。.claude/andon/ を確認してください"

# 3. リーダーが問題を確認し、解決策を決定

# 4. Andon ファイルを削除 → 全エージェントの作業再開
Bash("rm .claude/andon/{team-name}.json")

# PreToolUse フック例:
# if [ -f ".claude/andon/${TEAM_NAME}.json" ]; then
#   echo "BLOCK: Andon発動中。作業を一時停止してください。"
#   exit 1
# fi
Andon が必要な典型例: broadcastとの違いは、フックによって物理的に作業を停止させる点にある。broadcastは「通知」であり、受信側が読み飛ばす可能性がある。Andonは「強制停止」。

組織論適用のまとめ

organizational-theory-application-map
# 組織論をAgent Teamに適用するロードマップ

Phase 1: 今すぐできること
├── Inverse Conway Maneuver
│   └── ディレクトリ構造 = エージェント境界
└── CLAUDE.md による組織文化の共有
    └── コーディング規約・アーキテクチャ方針

Phase 2: プロンプト設計で実現
├── Team Topologies の連携モード
│   └── .claude/team-topologies/*.json をリーダーが参照
├── RACI Matrix
│   └── .claude/raci/*.json に基づきリーダーが手動ルーティング
└── Andon の簡易版
    └── "問題発見時は broadcast + 全員作業停止" をプロンプトに明記

Phase 3: フック / スクリプトで自動化
├── RACI Auto-Router
│   └── PostToolUse フックで TaskUpdate を検知 → 自動送信
├── Andon Signal
│   └── PreToolUse フックでファイル存在チェック → 強制停止
└── Organizational Memory
    └── TeamDelete 前にレトロ自動生成 → memory/ に永続化

# 推奨: Phase 1 → 2 を今日から実践し、
# Phase 3 は繰り返し使うチーム構成が固まってから投資する

まとめ

原則 人間チームでの対応 Agent Teamでの実装
Why/What の分離 リーダーに方針、メンバーにタスク リーダーPromptに目的、TaskCreateに作業
ファイル所有権 コード所有権(CODEOWNERS) 1エージェント1ファイル
自己完結コンテキスト 仕様書・設計書の共有 中間成果物をファイルに書き出す
適材適所 ジュニア/シニアの役割分担 Haiku/Sonnet/Opusのモデル選択
依存関係の明示 ガントチャート、Jiraの依存設定 addBlockedBy/addBlocks
中間レビュー PR レビュー、デイリースタンドアップ フェーズ間でリーダーが成果物を確認
終了処理 プロジェクト完了、振り返り shutdown_request → TeamDelete

判断フレームワーク

これまでの内容をまとめると、Agent Teamの活用は3つの問いに集約されます:

  1. そもそもAgent Teamが必要か? — Subagentで足りるなら使わない
  2. どのパターンを使うか? — Swarm / Pipeline / Competing Hypotheses / Watchdog
  3. コストに見合うか? — モデル選択とチームサイズを最適化
結論: Agent Teamは「賢いスクリプト」ではなく「チーム」です。良いマネージャーが良いチームを作るように、良い指示設計が良い出力を生む。失敗を恐れず使い倒して、自分のプロジェクトに合ったパターンを見つけることが一番の近道です。
$ _|