「Google製のエージェントフレームワークって、他と何が違うの?」
実際にGoogle ADK(Agent Development Kit)を触ってみて、率直に驚いた。セットアップの速さと、マルチエージェント対応の柔軟性が、他のフレームワークより一歩先を行っていた。adk create 一発でプロジェクトが立ち上がり、adk web でブラウザ上のチャットUIが動く。コードよりも先に動くものを見せてくれる設計思想が、開発者体験として非常に良かった。
Google ADKはPython、TypeScript、Go、Javaに対応しており、Gemini以外のLLM(Claude、Ollamaなど)も使えるモデル非依存設計だ。2025年5月にv1.0がリリースされ、2026年3月時点でv1.27.1まで継続的にアップデートされている(GitHub Releases参照)。
この記事では、Google ADK Pythonを使って最初のエージェントを動かすまでの手順を、コピペ可能なコード例とともに全公開する。
AIエージェントフレームワークの全体像については、AIエージェントとは何か — 基礎から構造までで体系的にまとめています。
まず5分で動かす — Google ADKクイックスタート
セットアップの全体像はシンプルだ。インストール → Gemini APIキー取得 → プロジェクト作成 → 実行、の4ステップ。
ステップ1: インストール
Python 3.10以上が必要。仮想環境を作ってからインストールするのが推奨。
# 仮想環境作成(推奨)
python3 -m venv adk-env
source adk-env/bin/activate # macOS/Linux
# adk-envScriptsactivate # Windows
# Google ADKインストール
pip install google-adk
# 動作環境: Python 3.10+, google-adk>=1.27.0
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
ステップ2: Gemini APIキー取得
Google AI Studioにアクセスし、「Get API key」からAPIキーを発行する。無料枠でも試せる。
ステップ3: プロジェクト作成と初期エージェント
# プロジェクト作成
adk create my_first_agent
# 生成されるファイル構成
# my_first_agent/
# ├── agent.py ← エージェントの本体
# ├── .env ← APIキー設定
# └── __init__.py
# agent.py
# 動作環境: Python 3.10+, google-adk>=1.27.0
from google.adk.agents import Agent
def get_current_time(city: str) -> dict:
"""指定した都市の現在時刻を返す。
Args:
city: 都市名(例: "Tokyo", "New York")
Returns:
{"time": "HH:MM", "timezone": "JST"} 形式の辞書
"""
import datetime, zoneinfo
tz_map = {
"Tokyo": "Asia/Tokyo",
"New York": "America/New_York",
"London": "Europe/London",
}
tz_name = tz_map.get(city, "UTC")
tz = zoneinfo.ZoneInfo(tz_name)
now = datetime.datetime.now(tz)
return {"time": now.strftime("%H:%M"), "timezone": tz_name}
root_agent = Agent(
name="time_agent",
model="gemini-2.0-flash",
description="都市の現在時刻を教えるエージェント",
instruction="ユーザーが都市名を入力したら get_current_time ツールを呼び出して時刻を返してください。",
tools=[get_current_time],
)
ステップ4: 実行
# CLI モード(ターミナル上でチャット)
adk run my_first_agent
# Web UIモード(開発・デバッグ専用)
# ※ Webモードは本番環境での使用は非推奨。
adk web --port 8000
# → http://localhost:8000 にアクセス
Google ADKの3つのアーキテクチャを理解する
| エージェント種別 | 特徴 | 向いているユースケース |
|---|---|---|
| LLMエージェント | LLMが動的にツール呼び出しを判断。最も柔軟 | 会話、Q&A、可変的なタスク |
| ワークフローエージェント(Sequential/Parallel/Loop) | 実行順序が固定。予測可能で安定 | データ処理パイプライン、定型業務自動化 |
| マルチエージェント | 複数の専門エージェントを階層的に組み合わせ | 複雑なワークフロー、役割分担が必要なタスク |
実践: カスタムツールとマルチエージェントの実装
カスタム検索ツール付きエージェント
# search_agent/agent.py
# 動作環境: Python 3.10+, google-adk>=1.27.0, requests>=2.31.0
# pip install google-adk requests
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
from google.adk.agents import Agent
import requests
def search_web(query: str) -> dict:
"""DuckDuckGo Instant Answer APIで簡易検索する。
Args:
query: 検索クエリ(日本語可)
Returns:
{"abstract": "...", "source": "..."} 形式の辞書
"""
url = "https://api.duckduckgo.com/"
params = {"q": query, "format": "json", "no_html": 1}
try:
resp = requests.get(url, params=params, timeout=5)
resp.raise_for_status()
data = resp.json()
abstract = data.get("Abstract", "")
source = data.get("AbstractSource", "不明")
if not abstract:
return {"abstract": "該当情報が見つかりませんでした。", "source": ""}
return {"abstract": abstract, "source": source}
except requests.RequestException as e:
return {"abstract": f"検索エラー: {str(e)}", "source": ""}
root_agent = Agent(
name="search_agent",
model="gemini-2.0-flash",
description="Webから情報を検索して回答するエージェント",
instruction=(
"ユーザーの質問に対して search_web ツールで情報を取得し、"
"取得した情報をもとに簡潔に回答してください。"
),
tools=[search_web],
)
マルチエージェント(サブエージェント委任)
# multi_agent/agent.py
# 動作環境: Python 3.10+, google-adk>=1.27.0
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
from google.adk.agents import Agent
translator_agent = Agent(
name="translator",
model="gemini-2.0-flash",
description="テキストの翻訳を行うエージェント",
instruction="受け取ったテキストを指定された言語に翻訳してください。",
)
summarizer_agent = Agent(
name="summarizer",
model="gemini-2.0-flash",
description="テキストの要約を行うエージェント",
instruction="受け取ったテキストを3文以内で要約してください。",
)
root_agent = Agent(
name="orchestrator",
model="gemini-2.0-flash",
description="翻訳と要約を組み合わせる統合エージェント",
instruction=(
"ユーザーの要求に応じて、translator(翻訳)または"
"summarizer(要約)のサブエージェントに処理を委任してください。"
),
sub_agents=[translator_agent, summarizer_agent],
)
他のフレームワークとの比較
| 項目 | Google ADK | LangChain | Dify |
|---|---|---|---|
| セットアップ速度 | 速い(adk createで即立ち上がり) | 中程度(設定多め) | 速い(UI操作) |
| マルチエージェント | ネイティブ対応 | LangGraph経由 | 限定的 |
| モデル対応 | Gemini優先、他LLMも可 | 全モデル対応 | 複数対応 |
| GCP連携 | ネイティブ(Vertex AI等) | サードパーティ経由 | なし |
| コード量 | 少ない | 多め | ほぼ不要 |
料金情報の最終確認: 2026-03-17。Google ADKはオープンソース(無料)。APIコストは使用するLLMのAPI料金に依存する。
【要注意】よくある失敗パターンと回避策
失敗1: root_agentを定義し忘れてadk runが動かない
❌ my_agentという名前の変数でエージェントを定義し、adk run を実行
⭕ 必ず root_agent という変数名でAgentオブジェクトを定義する
なぜ重要か: ADKは内部で root_agent という名前で起動エントリーポイントを探す。変数名を変えると見つからずエラーになる。
失敗2: .envをGitにコミットしてAPIキーを漏洩
❌ .env ファイルをそのままgit addしてリモートにpush
⭕ .gitignore に .env を必ず追加してからコミット
なぜ重要か: GitHubのpublicリポにAPIキーを上げると、数分以内にボットにスキャンされてキーが悪用される事例が多数報告されている。
失敗3: adk webを本番環境に使ってしまう
❌ adk web で立ち上げたUIをそのまま本番ユーザーに公開
⭕ 本番環境ではCloud RunやVertex AI Agent Engineにデプロイする
なぜ重要か: 公式ドキュメントに「not meant for use in production deployments」と明記されている開発用UIだ。
失敗4: ツール関数のdocstringを省略してLLMが使い方を誤解
❌ ツール関数にdocstringなし
⭕ 引数の説明・戻り値の型・使用上の注意をdocstringで明記する
なぜ重要か: ADKはツール関数のdocstringをそのままLLMに渡してツールの使い方を解説させる。docstringが不足すると、LLMが誤ったパラメータを渡してエラーになる。
参考・出典
- Google ADK 公式ドキュメント — Google(参照日: 2026-03-17)
- ADK Python クイックスタート — Google(参照日: 2026-03-17)
- google-adk-python リリースノート — GitHub(参照日: 2026-03-17)
- google-adk PyPI — PyPI(参照日: 2026-03-17)
- What’s new with Agents: ADK, Agent Engine, and A2A Enhancements — Google Developers Blog(参照日: 2026-03-17)
まとめ: 今日から始める3つのアクション
- 今日やること:
pip install google-adk→adk create my_first_agent→adk webでブラウザ上のエージェントを動かす(所要5分) - 今週中: カスタムツール(業務API呼び出し・DB検索等)を1つ追加して自分のユースケースに応用する
- 今月中: マルチエージェント構成を試し、複数の専門エージェントを組み合わせた本番想定の設計を検証する
あわせて読みたい:
著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー10万人超。
100社以上の企業向けAI研修・導入支援。著書累計3万部突破。
SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。
ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。