コンテンツにスキップ
X

Level 10: Swarm Architect — エージェントがエージェントを構築する

スウォーム(Swarm)アーキテクチャでは、複数の自律的なエージェントが協調して動作します。さらに発展させると、Claude 自身が新しいエージェントの役割・設定・コードを設計・生成することができます。「AI を使う」段階から「AI システムを設計・構築する」段階への転換点です。

対象読者: Level 9 まで実践済みで、自律型の AI システム設計に挑戦したい上級エンジニア。

学習時間の目安: 読了 30分 + 実践 60分


スウォームアーキテクチャとは

Section titled “スウォームアーキテクチャとは”

スウォーム(Swarm)は、複数の自律的なエージェントが分担・協調して動くシステムです。各エージェントは特定の専門分野を担い、コーディネーターが全体を管理します。

User Request

Coordinator Agent(全体の進行管理・統合)
    ├── Researcher Agent(情報収集・調査)
    ├── Coder Agent(コード実装)
    ├── Reviewer Agent(レビュー・品質確認)
    └── Deployer Agent(デプロイ・リリース)

各スペシャリストエージェントは独立して動作し、他のエージェントの完了を待たずにタスクを処理します。コーディネーターは全スペシャリストの出力を受け取り、最終的な成果物に統合します。

エージェントがエージェントを生成するパターン

Section titled “エージェントがエージェントを生成するパターン”

Claude に「このサービスに必要な専門エージェントを設計してください」と依頼することで、Claude 自身がエージェント群の設計図を生成します。

> Python + FastAPI の API サーバーを開発・運用するために必要な
> エージェント群を設計してください。
>
> 各エージェントについて以下を定義してください:
> 1. 役割と責任範囲
> 2. 使用するツール(MCP・コマンド等)
> 3. 入出力のインターフェース(JSON スキーマ)
> 4. CLAUDE.md に書くべき制約とルール
> 5. スラッシュコマンドの設計

Claude が生成する設計の例:

## エージェント群の設計

### 1. spec-agent(要件定義担当)
役割: ユーザーの要求を受け取り、API 仕様を OpenAPI 形式で定義する

入力: 自然言語の機能要求
出力: {"openapi": "3.0.0", "paths": {...}} 形式の JSON

スラッシュコマンド:
/spec {機能名} → OpenAPI 仕様を生成して docs/api-spec.json に保存

### 2. coder-agent(実装担当)
役割: spec-agent の出力を受け取り、FastAPI のエンドポイントを実装する

入力: OpenAPI 仕様 JSON
出力: src/api/routes/{resource}.py

スラッシュコマンド:
/implement {spec-file} → 仕様に基づいてコードを生成

...

Anthropic Agent SDK でのスウォーム実装

Section titled “Anthropic Agent SDK でのスウォーム実装”

Python の Anthropic SDK を使って、コーディネーターとスペシャリストを持つスウォームを実装します。

# swarm/api_builder.py
# Python + FastAPI の API サーバーを自動構築するスウォーム実装例

import anthropic
import concurrent.futures
import json

client = anthropic.Anthropic()

def run_specialist(role: str, system_prompt: str, task: str) -> str:
    """スペシャリストエージェントを実行して結果を返す"""
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=4096,
        system=system_prompt,
        messages=[{"role": "user", "content": task}]
    )
    return response.content[0].text

def build_api_server(requirements: str) -> dict:
    """スウォームで API サーバーの設計・実装を自動化する"""

    # Step 1: 要件定義エージェントが仕様を作成する
    spec = run_specialist(
        "spec-agent",
        "API 設計の専門家です。要件を受け取り、詳細な API 仕様を JSON で返します。",
        f"以下の要件に基づいて FastAPI の API 仕様を設計してください。\n\n{requirements}"
    )

    # Step 2: 並列でコード生成・テスト生成・ドキュメント生成を実行する
    parallel_tasks = {
        "coder": (
            "FastAPI の実装専門家です。API 仕様を受け取り、実装コードを生成します。",
            f"以下の仕様に基づいて FastAPI のエンドポイントを実装してください。\n\n{spec}"
        ),
        "tester": (
            "テストエンジニアです。API 仕様を受け取り、pytest のテストコードを生成します。",
            f"以下の仕様に基づいて pytest のテストコードを生成してください。\n\n{spec}"
        ),
        "documenter": (
            "テクニカルライターです。API 仕様を受け取り、開発者向けドキュメントを生成します。",
            f"以下の仕様を基に Markdown 形式のドキュメントを生成してください。\n\n{spec}"
        ),
    }

    results = {}
    with concurrent.futures.ThreadPoolExecutor() as executor:
        futures = {
            executor.submit(run_specialist, role, system, task): role
            for role, (system, task) in parallel_tasks.items()
        }
        for future in concurrent.futures.as_completed(futures):
            role = futures[future]
            results[role] = future.result()

    # Step 3: コーディネーターが全成果物を統合レビューする
    summary = run_specialist(
        "coordinator",
        "複数の専門家の成果物を統合し、品質を確認するコーディネーターです。",
        f"""
        以下の成果物を統合し、問題点があれば指摘してください。

        仕様: {spec}
        実装コード: {results['coder']}
        テストコード: {results['tester']}
        ドキュメント: {results['documenter']}
        """
    )

    return {
        "spec": spec,
        "implementation": results["coder"],
        "tests": results["tester"],
        "docs": results["documenter"],
        "review": summary,
    }

if __name__ == "__main__":
    requirements = """
    ユーザー管理 API を構築する。
    - ユーザーの作成・取得・更新・削除(CRUD)
    - JWT による認証
    - SQLite をデータベースとして使用
    """
    result = build_api_server(requirements)
    print(json.dumps(result, ensure_ascii=False, indent=2))

要件定義から全自動デプロイまでの流れ

Section titled “要件定義から全自動デプロイまでの流れ”

スウォームを使うと、自然言語の要件からデプロイまでを連続して実行できます。

1. ユーザーが要件を自然言語で入力

2. spec-agent が OpenAPI 仕様を生成

3. (並列)
   coder-agent が実装コードを生成
   tester-agent がテストコードを生成
   documenter-agent がドキュメントを生成

4. reviewer-agent が品質を確認・修正指示

5. (修正が完了したら)
   deployer-agent が CI/CD をトリガー

6. 人間が最終確認してマージ・デプロイ承認

ステップ 6 の人間による確認は、完全自動化においても省略しないことを推奨します。

各エージェントは 1 つの役割のみを持ちます。「コーダー兼レビュアー」のような複数責任を持つエージェントは作りません。役割が明確なほど、プロンプトが簡潔になり精度が上がります。

エージェント間のデータの受け渡しは JSON などの構造化フォーマットで統一します。自然言語のままやり取りすると、後続エージェントが解釈ミスを起こすリスクがあります。

1 つのエージェントが失敗しても全体が止まらないよう、リトライロジックとフォールバック(代替処理)を実装します。特に外部 API を呼び出すエージェントは必ず例外処理を入れます。

完全自動化でも、本番デプロイ・コンテンツの公開・外部サービスへのデータ送信など、影響範囲の大きい操作では必ず人間の確認ステップを設けます。

レベル帯位置づけ主なスキル
Level 0〜2AI ツールを使うコンテキスト設定・MCP 接続
Level 3〜5AI ワークフローを設計するカスタムコマンド・Issue 駆動開発
Level 6〜8AI システムを構築するヘッドレス・ブラウザ自動化・並列実行
Level 9〜10AI インフラを運用する常時稼働・スウォーム設計

Q. スウォームと Level 8 のオーケストレーターパターンの違いは?

オーケストレーターパターンは「人間が設計したスクリプトがエージェントを管理」します。スウォームは「エージェント自身がエージェントの設計や役割分担を決める」点が異なります。

Q. スウォームを導入するのはどのタイミングが適切?

単一エージェントで対応できるタスクにスウォームを使っても複雑になるだけです。並列化できる独立したタスクが3つ以上あり、かつ高頻度で繰り返す場合に導入を検討してください。


このレベルの実践チュートリアル →


Level 0 から Level 10 まで到達しました。Claude Code を「ターミナルで動くチャット」から「24/7 稼働する AI インフラ」として設計・運用する土台を習得しています。

次のステップとして、自分のプロジェクトに最適なレベルのシステムを構築してみてください。すべてのプロジェクトが Level 10 である必要はなく、規模・リスク・チームの習熟度に合わせてレベルを選択するのが実践的なアプローチです。