はじめに
2025年4月9日にGoogleが発表した Agent2Agent(A2A)プロトコル が、1周年を迎えた2026年4月に v1.0正式リリース を達成しました。
AWS、Microsoft、Salesforce、SAP、ServiceNow を含む 150以上の組織 が採用し、Linux Foundation のもとでオープン標準として管理される A2A は、異なるフレームワーク・ベンダーが構築したAIエージェント同士が通信するための共通言語です。
この記事で学べること
- A2A Protocol v1.0 の主要新機能と設計思想
-
a2a-sdk(Python)を使ったエージェントサーバーの実装手順 -
AgentCard/AgentSkillの定義方法 - 署名付き AgentCard によるセキュアな認証の仕組み
- A2Family(AP2・A2UI・UCP)エコシステムの全体像
対象読者
- マルチエージェントシステムの設計・実装を検討しているエンジニア
- MCP との違いや使い分けを知りたい方
- ADK / LangGraph / CrewAI などを本番運用しているチーム
前提環境
- Python 3.10 以上
- pip または uv がインストール済み
TL;DR
- A2A Protocol が v1.0(2026年3月)でプロダクション対応。150組織採用・仕様リポジトリ 23.4K+ GitHub stars。
- v1.0 の主な追加機能: 署名付き AgentCard・マルチテナント対応・OAuth 2.0 / mTLS 認証・gRPC サポート。
- Python SDK(
a2a-sdk v1.0.2)はpip install a2a-sdkで即インストール可能。 - ADK / LangGraph / AG2 / CrewAI との相互運用が公式サポートされている。
- A2Family(AP2・A2UI・UCP)として決済・UI生成への拡張が進行中。
A2A Protocol とは — 1年間の軌跡
| 日付 | 出来事 |
|---|---|
| 2025年4月9日 | Google が A2A プロトコルを発表(Microsoft・Salesforce・SAP・ServiceNow 等が主要ローンチパートナー) |
| 2025年6月23日 | Linux Foundation へ寄贈(Open Source Summit North America)— AWS・Cisco が参加し初期ガバナンスメンバーに |
| 2026年3月 | v1.0 リリース — 署名付き AgentCard・マルチテナント・gRPC 対応 |
| 2026年4月9日 | 1周年:150以上の組織が参加、仕様リポジトリ(a2aproject/A2A)23.4K+ stars |
A2A が解決する課題は「エージェントの孤立」です。LangGraph で構築したエージェントが ADK のエージェントに作業を委譲したい場合、従来は独自のREST APIやメッセージキューを設計する必要がありました。A2A は、その通信レイヤーを標準化します。
"We have been delighted by the breadth of ecosystem adoption, and look forward to A2A continuing to grow as the standard for agent communication."
— A year of open collaboration: Celebrating the anniversary of A2A(Google Open Source Blog, 2026-04-09)
v1.0 の主要新機能
1. 署名付き AgentCard(Signed Agent Cards)
v1.0 では、AgentCard を JSON Web Signature(JWS / RFC 7515) で署名できるようになりました。JSON Canonicalization Scheme(JCS / RFC 8785)で正規化したのち署名することで、AgentCard の改ざん検知と発行元の証明が可能です1。
{
"name": "Inventory Agent",
"version": "1.0.0",
"url": "https://agent.example.com/a2a",
"signature": "eyJhbGciOiJFUzI1NiJ9..."
}
2. エンタープライズ向け認証・マルチテナント
OpenAPI 認証スキームとの整合が明確化され、以下の認証方式を AgentCard 内で宣言できます2。
- OAuth 2.0 / OpenID Connect — トークンベース認証
- API Key — シンプルな静的キー認証
- Mutual TLS(mTLS) — クライアント証明書による相互認証
また、1エンドポイントで複数テナントのエージェントをホスト できるマルチテナント構成が正式サポートされました。SaaS プロバイダーがテナントごとに異なるエージェントを提供するケースで活用できます。
3. gRPC トランスポート
JSON-RPC(HTTP+JSON)に加えて gRPC がトランスポートとして追加されました。低レイテンシが求められるエージェント間通信(特に内部サービス間)での活用が見込まれます。
4. 後方互換モード
v1.0 Python SDK は v0.3 との互換モードを保持しており、既存の A2A サーバーを段階的に移行できます3。
アーキテクチャ概要
A2A の基本要素は3つです。
| 要素 | 役割 |
|---|---|
| AgentCard | エージェントの「名刺」。/.well-known/agent-card.json に公開し、他エージェントが機能を発見できるようにする |
| AgentSkill | エージェントが実行できる具体的な能力の定義 |
| Task | クライアントからの作業依頼。非同期ストリーミングにも対応 |
通信フロー:
クライアント
│
├─ GET /.well-known/agent-card.json → AgentCard を取得
│
└─ POST /a2a (JSON-RPC) → タスク送信
│
└─ AgentExecutor がタスクを処理 → 結果を返却(同期 or SSE ストリーミング)
Pythonで実装するA2Aエージェントサーバー
インストール
pip install a2a-sdk
# または
uv add a2a-sdk
HTTP サーバー(Starlette ベース)を使う場合:
pip install "a2a-sdk[http-server]"
OpenTelemetry トレーシングを有効にする場合:
pip install "a2a-sdk[http-server,telemetry]"
AgentSkill の定義
from a2a.types import AgentSkill
translate_skill = AgentSkill(
id="translate_text",
name="Translate Text",
description="Translates text between languages using a language model.",
tags=["translation", "nlp", "language"],
examples=[
"Translate 'Hello World' to Japanese",
"英語に翻訳してください: Bonjour le monde",
],
)
AgentCard の定義
AgentCard は /.well-known/agent-card.json に公開します。
from a2a.types import AgentCard, AgentCapabilities, AgentInterface
agent_card = AgentCard(
name="Translation Agent",
description="Multi-language translation agent powered by a language model.",
version="1.0.0",
default_input_modes=["text/plain"],
default_output_modes=["text/plain"],
capabilities=AgentCapabilities(
streaming=True,
extended_agent_card=True,
),
supported_interfaces=[
AgentInterface(
transport="JSONRPC",
url="http://localhost:9999",
)
],
skills=[translate_skill],
)
AgentExecutor の実装
from a2a.server.agent_execution import AgentExecutor, RequestContext
from a2a.utils import new_agent_text_message
class TranslationAgentExecutor(AgentExecutor):
async def execute(
self,
context: RequestContext,
event_queue,
) -> None:
# context.get_user_input() でユーザーの入力テキストを取得
user_input = context.get_user_input()
# ここでLLM呼び出しや翻訳ロジックを実行
# (例: OpenAI API / Claude API / Gemini API)
result_text = f"[Translation result for: {user_input}]"
await event_queue.enqueue_event(
new_agent_text_message(result_text)
)
サーバー起動
import uvicorn
from a2a.server.apps import A2AStarletteApplication
from a2a.server.request_handlers import DefaultRequestHandler
from a2a.server.tasks import InMemoryTaskStore
handler = DefaultRequestHandler(
agent_executor=TranslationAgentExecutor(),
task_store=InMemoryTaskStore(),
)
app = A2AStarletteApplication(
agent_card=agent_card,
http_handler=handler,
)
if __name__ == "__main__":
uvicorn.run(app.build(), host="0.0.0.0", port=9999)
起動後、http://localhost:9999/.well-known/agent-card.json に AgentCard が公開されます。
A2Aクライアントの実装
別のエージェント(または人間)がこのサーバーにタスクを送信するには、A2A クライアントを使います。
import asyncio
import httpx
from a2a.client import A2AClient
from a2a.types import MessageSendParams, SendMessageRequest
from uuid import uuid4
async def main():
async with A2AClient.get_client_from_agent_card_url(
httpx.AsyncClient(),
"http://localhost:9999",
) as client:
request = SendMessageRequest(
id=str(uuid4()),
params=MessageSendParams(
message={
"role": "user",
"parts": [{"kind": "text", "text": "Translate 'Hello World' to Japanese"}],
"messageId": str(uuid4()),
}
),
)
response = await client.send_message(request)
print(response.model_dump_json(indent=2))
asyncio.run(main())
署名付き AgentCard の生成
v1.0 の新機能である署名付き AgentCard を生成するには、JWS 署名を追加します。公式 SDK では ECDSA(ES256)を推奨しています4。
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
import json, base64, hashlib
# 秘密鍵の生成(初回のみ)
private_key = ec.generate_private_key(ec.SECP256R1())
# AgentCard を JSON 正規化 → 署名(JCS + JWS ES256 の概念例)
card_json = agent_card.model_dump_json()
# 実際の署名処理は a2a-sdk の署名ユーティリティを使用すること
# 詳細: https://a2a-protocol.org/latest/specification/
MCPとの比較・使い分け
A2A と MCP(Model Context Protocol)は補完関係にあります。
| 観点 | MCP | A2A |
|---|---|---|
| 通信の主体 | LLM ↔ ツール / リソース | エージェント ↔ エージェント |
| 設計思想 | ホスト(LLM クライアント)がツールを呼び出す | 対等なエージェント同士が協調 |
| 発見方法 | .well-known/mcp-server-card.json |
/.well-known/agent-card.json |
| 認証 | サーバー証明書 | OAuth2 / mTLS / API Key + 署名付き AgentCard |
| 典型ユースケース | Webブラウザ操作、DB照会 | 複数AIエージェントのタスク分散 |
実際のシステムでは、MCP でツールを管理しながら、A2A でエージェント間を連携させる アーキテクチャが増えています。ADK(Google Agent Development Kit)は両方のプロトコルをネイティブサポートしています5。
A2Family エコシステム
A2A プロジェクトは「A2Family」として3つの補完プロトコルを育てています。
| プロトコル | 正式名称 | 用途 |
|---|---|---|
| A2A | Agent2Agent Protocol | エージェント間通信の基盤 |
| AP2 | Agent Payment Protocol | セキュアなエージェント駆動決済(決済・金融サービスを中心に60以上の組織が参加) |
| A2UI | Agent to User Interface | エージェントが UI コンポーネントを動的生成するプロトコル(v0.9 リリース済み) |
| UCP | Universal Commerce Protocol | エージェントによるコマース自動化 |
AP2 は、エージェントが人間の介在なしに決済トランザクションを完結させるためのプロトコルです。A2UI は、Google が発表した UI生成エージェント標準(A2UI v0.9 解説記事 も参照)です。
対応フレームワーク
v1.0 時点で A2A をネイティブサポートするフレームワーク:
| フレームワーク | サポート状況 |
|---|---|
| Google ADK(Agent Development Kit) | ネイティブ対応 |
| LangGraph(LangChain) | 公式統合済み |
| AG2(AutoGen の後継) | 公式統合済み |
| CrewAI | 公式統合済み |
| AWS Bedrock AgentCore | A2A プロトコル準拠 |
| Microsoft Agent Framework 1.0 | A2A + MCP 両対応 |
| Salesforce Agentforce | 本番稼働中 |
注意点
A2A v0.3 → v1.0 移行について
Python SDK v1.0.2 は v0.3 との後方互換モードを持ちますが、AgentCard の JSON フィールド名に一部変更があります(例:
protocolVersionの扱い)。移行の際は 公式マイグレーションガイド を参照してください。
gRPC はオプション依存
gRPC トランスポートを使うには
pip install "a2a-sdk[grpc]"が必要です。デフォルトの HTTP+JSON-RPC では不要です。
まとめ
- A2A Protocol が v1.0(2026年3月)で初のプロダクション対応バージョンに到達
- 署名付き AgentCard・OAuth2/mTLS 認証・マルチテナント・gRPC により エンタープライズ要件を満たす 設計になった
- 150以上の組織 が参加しており、ADK / LangGraph / CrewAI / AG2 / AWS Bedrock / Microsoft Agent Framework など主要プラットフォームで利用可能
- Python SDK(
a2a-sdk)はpip install a2a-sdkで利用開始でき、AgentCard→AgentExecutor→A2AStarletteApplicationの3ステップでサーバーを構築できる - MCP はツール呼び出し、A2A はエージェント間連携 と役割が異なる — 両方を組み合わせる設計が主流になりつつある
マルチエージェントシステムを本番運用する際の通信標準として、A2A Protocol は有力な選択肢です。特に複数ベンダー・フレームワークを組み合わせる環境では、共通プロトコルの採用が長期的な保守コストを下げることが期待されます。
参考リンク
- A2A Protocol 公式サイト — Specification v1.0
- a2a-python SDK(GitHub) — Apache 2.0
- a2a-samples(GitHub) — 公式サンプル集
- A year of open collaboration: Celebrating the anniversary of A2A — Google Open Source Blog, 2026-04-09
- A2A Protocol Surpasses 150 Organizations — PR Newswire, 2026-04-09
- a2a-sdk — PyPI — v1.0.2
- Enterprise Features — A2A Protocol — 公式ドキュメント