DEV Community

Cover image for Google ADK (エージェント開発キット) とは?実践ガイド
Akira
Akira

Posted on • Originally published at apidog.com

Google ADK (エージェント開発キット) とは?実践ガイド

Google ADKは、AIエージェントの構築、評価、デプロイを行うためのオープンソースフレームワークです。AgentspaceのようなGoogle製品内のエージェントでも使われています。すでにOpenAI Agents SDKのようなエージェントスタックを検討しているなら、ADKはGeminiおよびVertex AIとの統合を重視しながら、同じようにツール呼び出し、マルチエージェント構成、評価、デプロイを扱えます。この記事では、ADKの基本構成、最小実装、そしてApidogでエージェントが呼び出すAPIをテスト・モックする方法を整理します。

今すぐApidogを試す

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つです。

  1. エージェント
  2. ツール
  3. マルチエージェント構成
  4. Runner
  5. 評価とデプロイ

エージェント

基本単位はLLMに裏打ちされたエージェントです。Pythonでは google.adk.agents から Agent をインポートします。

AgentLlmAgent の便利なエイリアスです。最低限、次の情報を渡します。

  • 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],
)
Enter fullscreen mode Exit fullscreen mode

この時点で、単一エージェントとして動作する最小構成になります。

実装時のポイントは次のとおりです。

  • 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]
    }
Enter fullscreen mode Exit fullscreen mode

ツール関数を書くときは、次の点を意識します。

  • 関数名は具体的にする
  • 引数名は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),
        }
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

このように責務を分けることで、各エージェントのinstructionとツールを小さく保てます。

Runner

本番コードでは、エージェントを直接呼び出すのではなく、Runner が実行を管理します。

Runner は次の処理を担当します。

  • セッション管理
  • イベントフローの制御
  • 状態更新
  • モデル呼び出し
  • ツール呼び出しの調整

開発中はCLIを使うと、定型コードを書かずに動作確認できます。

adk run
Enter fullscreen mode Exit fullscreen mode

adk run は対話型ターミナルセッションを起動します。

adk web
Enter fullscreen mode Exit fullscreen mode

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],
)
Enter fullscreen mode Exit fullscreen mode

この構成では、trip_planner がユーザーリクエストを解釈し、必要に応じて flight_agenthotel_agent に処理を渡します。

開発フローは次のように進めると実装しやすくなります。

  1. まず単一ツールを持つエージェントを作る
  2. adk web でツール呼び出しを確認する
  3. ツール関数の戻り値を安定させる
  4. 専門ごとにサブエージェントへ分割する
  5. 評価ケースを追加する
  6. デプロイ先を選ぶ

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()
Enter fullscreen mode Exit fullscreen mode

開発中はモックAPI、本番では実APIに切り替えることで、エージェントのロジック検証を早く始められます。

2. ツールの応答形式をアサートする

APIアサーションを使い、ツールエンドポイントがエージェントの期待するフィールドを返すことを確認します。

確認したい項目の例:

  • HTTPステータスコード
  • 必須フィールドの有無
  • フィールド型
  • 配列長
  • エラー形式
  • 認証エラー時のレスポンス

エージェント側で次のような構造を期待しているなら、

{
  "customer_id": "c_123",
  "name": "Yamada Taro",
  "plan": "pro",
  "status": "active"
}
Enter fullscreen mode Exit fullscreen mode

APIテスト側で customer_idplanstatus などの必須フィールドを検証しておきます。契約がずれた場合、混乱したエージェントの会話ログではなく、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()
Enter fullscreen mode Exit fullscreen mode

このようにしておくと、ローカルではモック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をテストします。

実践的には、次の流れです。

  1. ツールが呼び出すAPI仕様を決める
  2. ApidogでモックAPIを作る
  3. ADKツールからモックAPIを呼び出す
  4. 正常系と異常系をエージェントで確認する
  5. APIアサーションでレスポンス契約を検証する
  6. ステージングまたは本番APIに切り替える

Apidogはモックとアサーションの両方を扱えます。ChatGPT APIのテスト方法に関するガイドは、エージェントのツールが呼び出すLLMエンドポイントにも近いパターンです。

まとめ

Google ADKは、GeminiとVertex AIを中心にしながら、他のモデルも利用できるエージェント開発フレームワークです。単一エージェント、ツール呼び出し、マルチエージェント構成、評価、デプロイまでを一貫して扱えます。

最初は、1つのエージェントと少数のツールから始めるのが現実的です。adk web でツール呼び出しと推論の流れを確認し、必要に応じてサブエージェントやマネージドランタイムへ拡張します。

エージェントが外部APIに依存する場合、そのAPIは必ずモックとアサーションの対象にしてください。ADKがエージェントの構成を担い、Apidogがツール呼び出し先のAPI契約を支える、という分担にすると、実装とデバッグが進めやすくなります。

Top comments (0)