Google A2A Agentプロトコル徹底解説:マルチAgent相互運用、タスク委任とMCP比較
概要
- Google A2A(Agent-to-Agent)プロトコルは2026年のマルチAgentシステム相互運用の業界標準
- A2AとMCPは異なるレイヤーの問題を解決:MCPはAgentとツールの接続、A2AはAgent間の協業
- Agent CardはA2Aの「名刺」:能力、エンドポイント、認証方式を宣言
- タスクライフサイクル(Task Lifecycle)がA2Aの中核抽象:送信→処理→完了/失敗/入力要求
- プロトコル原理からPython実装までの完全ソリューション。マルチAgentオーケストレーション実践を含む
目次
- マルチAgent時代の相互運用課題
- A2Aプロトコル中核概念
- Agent Card:Agentの「名刺」
- タスクライフサイクルとステートマシン
- A2A vs MCP:プロトコル層比較
- Python A2A Server実装
- マルチAgent協業実践:カスタマーサービス振り分け
- セキュリティモデルと本番デプロイ
- 面接ポイントと選定ガイド
- まとめと関連記事
マルチAgent時代の相互運用課題
2025年にMCPプロトコルが「Agentがツールにどう接続するか」を解決。2026年に企業が直面する新たな問題:
カスタマーサービスAgent、注文Agent、物流Agent、返金Agent — これらはどう協業するか?
| 課題 | A2Aなし | A2Aあり |
|---|---|---|
| Agent発見 | URLハードコード、1つ変更で全体障害 | Agent Card自動登録・発見 |
| タスク委任 | カスタムHTTP、チームごとに異なる | 標準Task API |
| 状態同期 | ポーリングまたは独自WebSocket | 標準イベントストリーム(SSE) |
| セキュリティ認証 | 各Agentが独自実装 | 統一OAuth2/API Key |
| 異種互換 | Python AgentがGo Agentを呼べない | プロトコル層で統一、言語非依存 |
協業シナリオ例:ユーザーが「先週買ったヘッドホンの配送状況は?」と質問 → カスタマーサービスAgentが注文Agentにタスク委任 → 物流Agentに委任 → 異常時は返金Agentに委任。各AgentはA2A標準プロトコルで自分の領域に専念。
A2Aプロトコル中核概念
中核エンティティ
| エンティティ | 説明 | 類比 |
|---|---|---|
| Agent Card | Agentの能力宣言とエンドポイント情報 | サービスレジストリのサービス記述 |
| Task | 完全なライフサイクルを持つ作業リクエスト | HTTPリクエスト + 非同期ジョブ |
| Message | Task内の単一インタラクション | チャットメッセージ |
| Artifact | Taskの成果物(ファイル、データ、レポート) | APIレスポンスボディ |
| Part | MessageまたはArtifactのコンテンツ断片 | MIMEマルチパート |
Agent Card:Agentの「名刺」
{
"name": "order-agent",
"description": "注文照会、作成、状態変更を処理するAgent",
"url": "https://agents.example.com/order",
"version": "1.0.0",
"skills": [
{"id": "query-order", "name": "注文照会", "description": "注文番号またはユーザーIDで注文詳細を照会"},
{"id": "create-order", "name": "注文作成", "description": "商品リストから新規注文を作成"}
],
"authentication": {"schemes": ["bearer"]}
}
/.well-known/agent.jsonにホスト — OAuthの.well-known/openid-configurationと同様。
タスクライフサイクルとステートマシン
submitted(送信済み)→ working(処理中)→ completed(完了)
→ failed(失敗)
→ input-required(追加入力必要)
Task API中核メソッド
| メソッド | 説明 |
|---|---|
| tasks/send | 新規タスク送信 |
| tasks/get | タスク状態照会 |
| tasks/cancel | タスクキャンセル |
| tasks/subscribe | SSEイベントストリーム購読 |
A2A vs MCP:プロトコル層比較
| 観点 | MCP | A2A |
|---|---|---|
| 解決する問題 | Agentとツール/データの接続 | Agent間の協業と委任 |
| 通信モード | Client-Server | Peer-to-Peer |
| 中核抽象 | Tool、Resource、Prompt | Task、Message、Artifact |
| 状態管理 | ステートレス | ステートフル(Taskライフサイクル) |
| 関係 | 補完関係 | 補完関係 |
一言で:MCPはAgentに「手」(ツール)を与え、A2AはAgentに「チーム編成」(協業)を可能にする。
組み合わせアーキテクチャ
ユーザー → オーケストレーターAgent
├─ A2A → カスタマーサービスAgent → MCP → ナレッジベース
├─ A2A → 注文Agent → MCP → 注文DB
└─ A2A → 物流Agent → MCP → 物流API
Python A2A Server実装
class OrderAgent:
async def handle_task_send(self, params: dict) -> dict:
task_id = params.get("id", str(uuid.uuid4()))
message = params["message"]
user_text = message["parts"][0]["text"]
task = Task(id=task_id, status=TaskStatus.WORKING)
try:
if "query" in user_text.lower() or "照会" in user_text:
order_id = self._extract_order_id(user_text)
if not order_id:
task.status = TaskStatus.INPUT_REQUIRED
return self._task_to_response(task)
order = await self.order_service.get_order(order_id)
task.status = TaskStatus.COMPLETED
task.artifacts.append({"name": "注文詳細", "parts": [{"type": "data", "data": order}]})
except Exception as e:
task.status = TaskStatus.FAILED
return self._task_to_response(task)
マルチAgent協業実践:カスタマーサービス振り分け
class CustomerServiceOrchestrator:
async def handle_user_query(self, query: str) -> str:
intent = await self._classify_intent(query)
agent_url = self.agents.get(intent)
if not agent_url:
return "申し訳ございませんが、現在お問い合わせを処理できません"
task_result = await self._send_a2a_task(agent_url, query)
if task_result["status"] == "completed":
return self._format_artifacts(task_result["artifacts"])
return "処理中に問題が発生しました。しばらくしてから再度お試しください"
セキュリティモデルと本番デプロイ
| レイヤー | 対策 |
|---|---|
| トランスポート | HTTPS/TLS 1.3必須 |
| 認証 | OAuth2 Bearer Token |
| 認可 | Skillレベル権限 |
| 監査 | Task ID全チェーン追跡 |
本番チェックリスト:/.well-known/agent.json、K8s Service公開、API Gateway認証・レート制限、Taskタイムアウト(デフォルト30秒)、Task成功率・平均処理時間・Agent可用性の監視。
面接ポイントと選定ガイド
Q1:A2AとMCPの関係は?
補完関係。MCPは垂直統合(Agent-ツール)、A2Aは水平統合(Agent-Agent)。本番システムでは通常両方を使用。
Q2:A2Aと直接HTTP APIの違いは?
A2Aは標準化されたTaskライフサイクル、Agent発見、状態プッシュ、Artifact受け渡しを提供。直接HTTPは各チームが独自実装が必要で、異なるチームのAgentは相互運用できない。
Q3:A2Aが不要な場合は?
単一Agent + MCPツールで十分な場合。A2Aの価値は複数の専門Agentが協業する必要があるシナリオ(カスタマーサービス振り分け、多段階承認、クロスドメインタスクオーケストレーション)。
Q4:A2Aのタスクタイムアウト処理は?
送信側がタイムアウト設定、タイムアウト後はtasks/cancel呼び出し。長時間タスクはtasks/subscribeでSSEイベントストリームを購読(tasks/getのポーリングではなく)。
A2A プロトコルとエコシステム(2026)
Linux Foundation ガバナンス、MCP と「ツール層 + 協業層」の完全スタック。
SSE ストリーミング実践
tasks/subscribe で長時間タスクの進捗をリアルタイム配信。
マルチテナントと Agent Registry
テナント分離、Skill レベルレート制限、Task 全チェーン監査。
2026年トレンド
Agent Marketplace、ローコード A2A エクスポート、OWASP Agent セキュリティ、エッジ Agent 協業。
まとめと関連記事
Google A2AプロトコルはマルチAgent相互運用の標準化空白を埋め、MCPと「ツール層 + 協業層」の完全なプロトコルスタックを形成。
設計要点:
- A2AはAgent間協業、MCPはAgentとツールの接続を解決
- Agent Cardは
/.well-known/agent.jsonでの発見メカニズム - Taskが中核抽象、完全なライフサイクルステートマシンを持つ
- マルチAgentオーケストレーションはコーディネーターパターン、意図で専門Agentにルーティング
- 本番はHTTPS + OAuth2 + Task全チェーン追跡必須
関連記事:
参考資料:
ブラウザローカルツールを無料で試す →