Google ADKは、AIエージェントの構築、評価、デプロイを行うためのオープンソースフレームワークです。AgentspaceのようなGoogle製品内のエージェントでも使われています。すでにOpenAI Agents SDKのようなエージェントスタックを検討しているなら、ADKはGeminiおよびVertex AIとの統合を重視しながら、同じようにツール呼び出し、マルチエージェント構成、評価、デプロイを扱えます。この記事では、ADKの基本構成、最小実装、そしてApidogでエージェントが呼び出すAPIをテスト・モックする方法を整理します。
Google ADKとは
ADKはAgent Development Kitの略です。Googleは2025年4月のGoogle Cloud Nextで、エージェントのライフサイクル全体を扱うオープンソースツールキットとして発表しました。
ADKで扱う主な作業は次のとおりです。
- エージェントを定義する
- エージェントにツールを渡す
- 複数エージェントを構成する
- 振る舞いを評価する
- 本番環境へデプロイする
当初はPythonが最初にサポートされ、その後GoogleはJavaを追加し、GoとTypeScriptのサポートも追随しています。Pythonが最も早く成熟しているため、最初に試すならPythonから始めるのが実装上は安全です。
ADKはGoogleがAgentspaceやCustomer Engagement Suiteのエージェントで内部的に使用しているものと同じフレームワークです。そのため、単なるサンプル用SDKではなく、本番ワークロードを前提に設計されています。
ADKはモデルに依存しません。ただし、GeminiとVertex AIとの統合に最適化されています。Vertex AI Model Garden経由のモデルや、LiteLLMを通じたAnthropic、Meta、Mistralなどのプロバイダーも利用できます。
ADKがGeminiとVertex AIのエコシステムで占める位置
ADKを理解するときは、次の3レイヤーに分けると整理しやすくなります。
モデル
Gemini、Vertex AI Model Garden、またはLiteLLM経由の他プロバイダーが推論を行います。フレームワーク
ADKがエージェント定義、ツール接続、マルチエージェントフローを管理します。ランタイム
Vertex AI Agent Engineは、本番環境でエージェントを実行するマネージドランタイムです。Cloud Runやその他のコンテナランタイムにもデプロイできます。
つまり、ADKは開発者が直接触るコードレイヤーです。下にはGeminiなどのモデルがあり、上にはVertex AI Agent Engineのような本番実行環境があります。
ローカルでADKを動かして検証し、必要に応じてVertex AI Agent EngineやCloud Runにデプロイする、という進め方が現実的です。
主要な概念
ADKで最初に押さえるべき構成要素は次の5つです。
- エージェント
- ツール
- マルチエージェント構成
- Runner
- 評価とデプロイ
エージェント
基本単位はLLMに裏打ちされたエージェントです。Pythonでは google.adk.agents から Agent をインポートします。
Agent は LlmAgent の便利なエイリアスです。最低限、次の情報を渡します。
-
name: エージェント名 -
model: 使用するモデル -
instruction: 振る舞いの指示 -
tools: 呼び出し可能な関数ツール
from google.adk.agents import Agent
def get_exchange_rate(base: str, target: str) -> dict:
"""Return the exchange rate between two currencies."""
# ここで実際のFX APIを呼び出す
return {
"base": base,
"target": target,
"rate": 1.08,
}
currency_agent = Agent(
name="currency_exchange_agent",
model="gemini-2.0-flash",
instruction="通貨間の換算をユーザーに手伝います。事実に忠実に従ってください。",
tools=[get_exchange_rate],
)
この時点で、単一エージェントとして動作する最小構成になります。
実装時のポイントは次のとおりです。
-
instructionには役割、制約、出力方針を書く -
toolsには副作用や外部API呼び出しを行う関数を渡す - ツール関数には型ヒントとdocstringを書く
- LLMに任せる処理とAPIで確定させる処理を分ける
ツール
ツールは、エージェントがテキスト生成以外の処理を行うための仕組みです。ADKでは、通常のPython関数をそのままツールとして渡せます。
def search_products(keyword: str, limit: int = 5) -> dict:
"""Search products by keyword and return a list of matching items."""
# 実際には商品検索APIを呼び出す
return {
"items": [
{"id": "p_001", "name": "USB-C Cable", "price": 1200},
{"id": "p_002", "name": "USB-C Hub", "price": 4200},
][:limit]
}
ツール関数を書くときは、次の点を意識します。
- 関数名は具体的にする
- 引数名はAPIの意味に合わせる
- 戻り値の構造を安定させる
- docstringで「いつ使うべきか」を説明する
- 外部APIのエラーをそのままLLMに投げず、扱いやすい形式に整形する
例:
def get_order_status(order_id: str) -> dict:
"""Get the current status of an order by order ID."""
# 注文管理APIを呼び出す想定
try:
return {
"order_id": order_id,
"status": "shipped",
"estimated_delivery": "2026-06-28",
}
except Exception as error:
return {
"order_id": order_id,
"error": str(error),
}
ADKは google_search やコード実行などの組み込みツールも提供します。また、外部ツールサーバーと接続するためのModel Context Protocol (MCP)もサポートしています。
LangChainやLlamaIndexのようなサードパーティライブラリをラップしたり、別のエージェントをツールとして扱ったりすることもできます。
実際の業務エージェントでは、多くのツールがREST APIを呼び出します。そのため、APIのレスポンス形式、エラー形式、認証、レート制限を事前にテストしておくことが重要です。
マルチエージェントシステム
単一エージェントでも多くの処理はできますが、ADKは複数エージェントの構成にも対応しています。専門エージェントを分け、コーディネーターが処理を委譲する形にできます。
ADKには、決定論的な制御を行うためのワークフローエージェントがあります。
SequentialAgent
サブエージェントを順番に実行するParallelAgent
サブエージェントを並列に実行するLoopAgent
条件が満たされるまで繰り返す
たとえば、調査、要約、検証を分けたい場合は、次のような設計にできます。
research_agent
├── web_search_agent
├── summarizer_agent
└── fact_check_agent
このように責務を分けることで、各エージェントのinstructionとツールを小さく保てます。
Runner
本番コードでは、エージェントを直接呼び出すのではなく、Runner が実行を管理します。
Runner は次の処理を担当します。
- セッション管理
- イベントフローの制御
- 状態更新
- モデル呼び出し
- ツール呼び出しの調整
開発中はCLIを使うと、定型コードを書かずに動作確認できます。
adk run
adk run は対話型ターミナルセッションを起動します。
adk web
adk web はローカルブラウザUIを開き、エージェントとのチャットや各ステップの確認ができます。
実装時は、まず adk web で以下を確認すると効率的です。
- instructionが期待どおり効いているか
- ツールが適切なタイミングで呼ばれるか
- ツール引数が正しいか
- ツール結果をもとに回答できているか
- 想定外のエラー時に破綻しないか
評価とデプロイ
ADKには評価ハーネスが含まれています。単に出力を目視するのではなく、期待される応答や軌道に対してエージェントを採点できます。
これは、次の変更でエージェントの振る舞いが変わるためです。
- プロンプト変更
- ツール追加
- ツールの戻り値変更
- モデル変更
- サブエージェント構成変更
デプロイには、大きく2つの選択肢があります。
| デプロイ先 | 向いているケース |
|---|---|
| Vertex AI Agent Engine | Google Cloud上でマネージドに運用したい場合 |
| Cloud Runまたは任意のコンテナ基盤 | よりポータブルに運用したい場合 |
Vertex AI Agent Engineは、スケーラブルなマネージドランタイムを提供します。より柔軟に運用したい場合は、エージェントをコンテナ化してCloud Runなどにデプロイできます。
最小構成の実装例
次は、旅行計画エージェントの簡単なマルチエージェント構成です。コーディネーターがフライト検索とホテル検索をサブエージェントに委譲します。
from google.adk.agents import Agent
def search_flights(origin: str, destination: str, date: str) -> dict:
"""Search flight options for a route and date."""
# フライトAPIを呼び出す想定
return {
"flights": [
{
"flight_no": "AB123",
"origin": origin,
"destination": destination,
"date": date,
"price": 42000,
}
]
}
def search_hotels(destination: str, check_in: str, nights: int) -> dict:
"""Search hotel options near the destination."""
# ホテルAPIを呼び出す想定
return {
"hotels": [
{
"name": "Central Hotel",
"destination": destination,
"check_in": check_in,
"nights": nights,
"price_per_night": 15000,
}
]
}
flights = Agent(
name="flight_agent",
model="gemini-2.0-flash",
instruction="ユーザーのルートと日付に合うフライトオプションを検索します。",
tools=[search_flights],
)
hotels = Agent(
name="hotel_agent",
model="gemini-2.0-flash",
instruction="目的地の近くのホテルオプションを検索します。",
tools=[search_hotels],
)
trip_planner = Agent(
name="trip_planner",
model="gemini-2.0-flash",
instruction="旅行を計画します。フライト検索とホテル検索は適切なサブエージェントに委任します。",
sub_agents=[flights, hotels],
)
この構成では、trip_planner がユーザーリクエストを解釈し、必要に応じて flight_agent と hotel_agent に処理を渡します。
開発フローは次のように進めると実装しやすくなります。
- まず単一ツールを持つエージェントを作る
-
adk webでツール呼び出しを確認する - ツール関数の戻り値を安定させる
- 専門ごとにサブエージェントへ分割する
- 評価ケースを追加する
- デプロイ先を選ぶ
ADK対OpenAI Agents SDK
ADKとOpenAI Agents SDKは、どちらもコードファーストのエージェントフレームワークです。ツール、引き渡し、トレースを扱えます。違いは、主にエコシステムの重心です。
| Google ADK | OpenAI Agents SDK | |
|---|---|---|
| デフォルトモデル | Gemini (Vertex AI) | OpenAIモデル |
| その他のモデル | Vertex AI Model Garden, LiteLLM | LiteLLMなど |
| 言語 | Python, Java, Go, TypeScript | Python, JavaScript/TypeScript |
| マルチエージェント | サブエージェントとSequential、Parallel、Loopワークフローエージェント | ツールとしてのエージェントと引き渡し |
| マネージドランタイム | Vertex AI Agent Engine | 持ち込み |
| ツールプロトコル | MCP, 組み込みツール, 関数ツール | MCP, 関数ツール |
Google Cloud上で開発しており、GeminiやVertex AI Agent Engineを使いたい場合はADKが自然に合います。OpenAIを中心に設計している場合は、OpenAI Agents SDKがそのまま使いやすい選択肢です。
どちらもMCPに対応しているため、ツールサーバーを共有できる可能性があります。
ADKを使用すべきとき
ADKを検討しやすいのは、次のようなケースです。
- Google Cloud上で開発している
- GeminiとVertex AI Agent Engineを使いたい
- シーケンシャル、パラレル、ループ制御を伴うマルチエージェント構成が必要
- 評価機能をフレームワーク内で扱いたい
- モデルを後から切り替える可能性がある
- Vertex AI Model GardenやLiteLLMをエスケープハッチとして使いたい
一方で、次のような場合はADKを使わない判断もあります。
- ユースケースが1つのプロンプトと1〜2個の関数呼び出しで完結する
- すでに別のモデルエコシステムに強く依存している
- マルチエージェント構成や評価ハーネスが不要
- フレームワーク導入による構造化コストのほうが大きい
エージェントフレームワークは構造を提供しますが、小さなタスクではその構造自体がオーバーヘッドになることがあります。
Apidogの役割:エージェントが呼び出すAPIのテストとモック
ADKはエージェントを調整します。ただし、エージェントが依存する外部APIそのものをテストするわけではありません。
エージェント内の意味のあるツールは、多くの場合、次のいずれかを呼び出します。
- LLMエンドポイント
- 決済API
- 社内マイクロサービス
- 検索API
- 顧客管理API
- サードパーティのデータソース
これらのAPIが想定外の形式を返すと、エージェントは不正な入力をもとに推論します。その結果、LLMの問題なのか、ツールの問題なのか、API契約の問題なのかを切り分けにくくなります。
Apidogはエージェントフレームワークではなく、ADKを置き換えるものでもありません。Apidogは、ADKツールがアクセスするAPIの1つ下のレイヤーをテスト・モックするためのツールです。
ADK開発では、次のように使えます。
1. ツールが呼び出すエンドポイントをモックする
LLMやツールが呼び出すRESTエンドポイント用のモックAPIを立ち上げます。
これにより、次の状態でエージェントを開発できます。
- 実APIが未完成でも開発できる
- トークンを消費せずに試せる
- レート制限に当たらずに反復できる
- エラーケースを意図的に返せる
- レスポンス形式を固定してテストできる
たとえば、ツール関数側ではモックURLを呼び出すようにしておきます。
import requests
def get_customer_profile(customer_id: str) -> dict:
"""Get customer profile by customer ID."""
response = requests.get(
f"https://mock-api.example.com/customers/{customer_id}",
timeout=10,
)
response.raise_for_status()
return response.json()
開発中はモックAPI、本番では実APIに切り替えることで、エージェントのロジック検証を早く始められます。
2. ツールの応答形式をアサートする
APIアサーションを使い、ツールエンドポイントがエージェントの期待するフィールドを返すことを確認します。
確認したい項目の例:
- HTTPステータスコード
- 必須フィールドの有無
- フィールド型
- 配列長
- エラー形式
- 認証エラー時のレスポンス
エージェント側で次のような構造を期待しているなら、
{
"customer_id": "c_123",
"name": "Yamada Taro",
"plan": "pro",
"status": "active"
}
APIテスト側で customer_id、plan、status などの必須フィールドを検証しておきます。契約がずれた場合、混乱したエージェントの会話ログではなく、APIテストで先に検出できます。
3. 環境ごとにキーを管理する
開発、ステージング、本番でAPIキーやベースURLが異なる場合、Apidogの環境設定を使って切り替えられます。
ADKツール側でも環境変数を使うと、同じコードで接続先を変えられます。
import os
import requests
API_BASE_URL = os.getenv("API_BASE_URL")
def search_orders(customer_id: str) -> dict:
"""Search orders for a customer."""
response = requests.get(
f"{API_BASE_URL}/orders",
params={"customer_id": customer_id},
timeout=10,
)
response.raise_for_status()
return response.json()
このようにしておくと、ローカルではモックAPI、ステージングでは検証用API、本番では実APIを使う構成にできます。
エージェントに特化した詳しい手順が必要な場合は、AIエージェントのツール呼び出しをテストする方法を参照してください。Apidogをダウンロードすれば、単一エンドポイントのモックから始められます。
よくある質問
Google ADKは無料でオープンソースですか?
はい。ADKはApacheライセンスのGitHubリポジトリでオープンソースとして公開されており、費用なしでローカル実行できます。
ただし、呼び出すモデルや、Vertex AI Agent Engineのようなマネージドランタイムには料金が発生します。フレームワーク自体は無料です。
ADKはGeminiでのみ動作しますか?
いいえ。ADKはGeminiとVertex AIに最適化されていますが、モデルに依存しません。Vertex AI Model GardenとLiteLLMを通じて、Anthropic、Meta、Mistral、その他のプロバイダーでエージェントを実行できます。
Geminiはデフォルトとして使いやすい選択肢ですが、必須ではありません。
ADKはどの言語をサポートしていますか?
Pythonが最初にサポートされ、最も完成度が高いです。その後、GoogleはJavaを追加し、GoとTypeScriptのサポートも追随しています。
現時点で最も幅広い機能カバーを重視するなら、Pythonから始めるのが無難です。
ADKエージェントが依存するAPIをテストするにはどうすればよいですか?
エージェントとは別にAPIをテストします。
実践的には、次の流れです。
- ツールが呼び出すAPI仕様を決める
- ApidogでモックAPIを作る
- ADKツールからモックAPIを呼び出す
- 正常系と異常系をエージェントで確認する
- APIアサーションでレスポンス契約を検証する
- ステージングまたは本番APIに切り替える
Apidogはモックとアサーションの両方を扱えます。ChatGPT APIのテスト方法に関するガイドは、エージェントのツールが呼び出すLLMエンドポイントにも近いパターンです。
まとめ
Google ADKは、GeminiとVertex AIを中心にしながら、他のモデルも利用できるエージェント開発フレームワークです。単一エージェント、ツール呼び出し、マルチエージェント構成、評価、デプロイまでを一貫して扱えます。
最初は、1つのエージェントと少数のツールから始めるのが現実的です。adk web でツール呼び出しと推論の流れを確認し、必要に応じてサブエージェントやマネージドランタイムへ拡張します。
エージェントが外部APIに依存する場合、そのAPIは必ずモックとアサーションの対象にしてください。ADKがエージェントの構成を担い、Apidogがツール呼び出し先のAPI契約を支える、という分担にすると、実装とデバッグが進めやすくなります。




Top comments (0)