Google ADK(AIエージェント開発フレームワーク)の紹介
※本記事はADK Advent Calendar 2025の2025/12/11の記事になります。
はじめに/Google ADKの概要
Googleが提供するAgent Development Kit(以降、Google ADK)は、AIエージェントを開発・デプロイするための柔軟なオープンソースフレームワークです。本記事ではPython版(ADK Python)を中心に解説します。
公式では「ソフトウェア開発の原則をAIエージェント開発に適用する(applies software development principles to AI agent creation)」と謳われており、YAMLやJSONではなくPythonコードでエージェントを定義するコードファーストなアプローチが特徴です(参考)。
現状はPython版(v1.20.0/2025年12月3日リリース)が中心となりますが、公式リリースは1~2週間ペースで更新されており、Java版や2025年11月にはGo版が公式提供され始めています。
v1.18.0では視覚的なワークフロー設計が可能な 「ADK Visual Agent Builder」 が追加され、開発Web UI上でエージェント構築をより直感的に行えるようになり、出力されたコードを用いてシームレスにエージェントの実装・組み立てを行うことができる機能も搭載されました。

Google ADKにおける開発者体験
直感的なマルチエージェント構築が可能
Google ADKでは各エージェントを 「LLMエージェント」 と 「ワークフローエージェント」 に整理し、親子階層で組み合わせるシンプルな構造となっています。動的な分岐やエージェントの追加も可能で、状況に応じて適切なサブエージェントのみを実行するといった柔軟なワークフローも構築可能です。
開発者ツールWebUIが充実している
プリセットで開発者向けのWebUIが用意されており、エージェント対話のテストやデバッグを直感的に行えます。マルチモーダル入力にも対応しており、画像や音声応答などにもデフォルトで設定が備わっています。コマンドもadk webのみで起動し、localhost:8000としてアクセスできるため、スピーディーな確認が容易です(もちろんCLIベースでの確認も、adk runコマンド一つで実行可能)

(https://google.github.io/adk-docs/get-started/python/#next-build-your-agent より)
このWebUI環境ごとデプロイして共有することで、ビジネスサイドメンバーも手軽にエージェントを試用することが可能です。開発初期段階から実際の挙動ベースで議論が展開できるため、早期にフィードバックを得て改善サイクルを回すことも容易となります。
ADKにはCloud Run向けのデプロイ機能が標準で用意されており、adk deploy cloud_run コマンドを 1 回叩くだけで コンテナイメージのビルドから Cloud Runへのデプロイまでを自動で実行してくれます。
公式サンプルが充実している
Googleから公式サンプル集がGitHubにて公開されており、シンプルな対話ボットから複数エージェントが連携する高度なワークフローまで幅広い例が揃っています。
URL:https://github.com/google/adk-samples
エージェントの構成要素
各エージェントの説明
LLMエージェント
LLMエージェントは、大規模言語モデル(LLM)の推論能力を活用し、柔軟な振る舞いや意思決定を行う「考える」部分です。外部ツールの利用や思考プロセスを自律的かつ動的に決定し、自然言語の理解や応答生成を行います。各種プロパティに関しては、以下の記事が大変参考になります。
ワークフローエージェント
ワークフローエージェントは、事前に定められたロジック(手順)に従ってサブエージェントの実行順序を制御する役割を持ちます。これにより、順次実行や並列実行といったあらかじめ決められた順序どおりの実行パターンを保証し、処理のフローを構造化します。ワークフローエージェントには以下の3種類が存在します。
・シーケンシャルエージェント(順次実行型)

・ループエージェント(繰り返し実行型)

・パラレルエージェント(並列実行型)

簡単な実装紹介
以下に、LLMエージェントのごく簡単なPythonコード例を示します。
# LLMエージェント例
from google.adk.agents import Agent
root_agent = Agent(
model='gemini-2.5-flash', # 利用可能なモデルは適宜調整
name='root_agent',
description='ユーザーの質問に対応するアシスタント。',
instruction='あなたの知る限り最善を尽くしてユーザーの質問に回答してください。',
)
最低限、上記のようなコードだけでもエージェントとして十分に動作させることが可能です。これはGoogle ADKの導入・利用のしやすさを示しています。
Toolの扱い
Toolとは、エージェントがWeb検索、計算、API操作などの外部機能を利用するための仕組みです。Google ADKにおける実装は非常にシンプルで、Pythonの関数を作成し、Agentのtoolsパラメータにリストとして渡すだけで完了します。
複雑な定義ファイルは不要で、エージェントは関数の型ヒント(Type Hint)やdocstringから使い方を自動で理解し、会話の流れに応じて適切なタイミングでToolを自律的に実行します。
Toolの実行結果もADKが自動的にLLMへフィードバックするため、開発者が呼び出しや結果の受け渡し処理(Function Callingのループ)を記述する必要はありません。また、Google Searchなどの強力なビルトインツール(built-in) も標準で用意されています。
AIエージェント開発における注意点と解決策
Stateの管理とマルチエージェント連携
AIエージェント、特に複数のエージェントが協調するマルチエージェントにおいて、「誰が何を知っているか(コンテキストの共有)」 は非常に重要です。Google ADKでは、セッションを通じて維持される State(状態) という共有領域を通じて、エージェント間の情報の受け渡しを行います。
output_key による情報の受け渡し
Google ADKでは、Agent定義時に output_key を指定することで、そのエージェントの最終回答を自動的にState内の指定キーへ保存できます。
-
エージェントA(調査担当):
output_key="research_result"と設定。 -
エージェントB(執筆担当): プロンプト内で「State内の
research_resultを参照して記事を書いて」と指示。
このように output_key を介することで、複雑なコーディングなしにエージェント間の情報の受け渡しを構築可能です。
ただし、output_key は基本的に 「単一キーへの上書き」 である点に注意が必要です。(詳しくは公式ドキュメントを参照)
ToolによるState操作
Tool(関数)内からStateを操作する場合は、ToolContext を引数に取ることで tool_context.state["key"] へのアクセスが可能になります。
ここで注意が必要なのが、データの蓄積です。通常の代入では値が上書きされてしまうため、複数のエージェントが順次情報を追加していくようなシナリオ(例:複数視点からの分析結果をリスト化して保持したい場合)では、値をリストとして保持して追加していくのが有効です。
以下は、Googleの実践コースでも紹介されていた、Stateへの追記を行うカスタムツールの実装パターンです。
def append_to_state(values_to_append: dict, tool_context: ToolContext) -> dict:
"""
指定されたキーに対し、値を上書きではなく「リストへの追記」としてStateに保存するツール。
マルチエージェント環境での情報集約に役立ちます。
"""
appended_keys = []
for key, response in values_to_append.items():
# 既存の値を取得(なければ空リスト)
existing = tool_context.state.get(key, [])
if isinstance(existing, str): existing = [existing] # 文字列ならリスト化
elif not isinstance(existing, list): existing = []
# リスト結合で追記
tool_context.state[key] = existing + [response]
appended_keys.append(key)
return {"status": "success", "keys": appended_keys}
このツールを活用することで、各エージェントは過去の履歴を消すことなく、自身の成果を共有スペース(State)に積み上げていくことが可能になります。
その他のコンテキスト管理機能
- ArtifactService: 画像やPDF、CSVなどの大きなファイルデータはState(メモリ)に直接展開せず、Artifact として管理するのが推奨されます。これによりトークン消費を抑えつつ、必要な時だけ参照させることができます。(詳細は公式ドキュメントをご参照ください:https://google.github.io/adk-docs/artifacts/#why-use-artifacts)
- Static Instruction (v1.15.0~): バイナリデータや長大なルール定義など、変更されない固定情報をあらかじめプロンプトコンテキストに埋め込みたい場合、Static Instruction 機能を使用することで、効率的にエージェントへ事前知識を与えることが可能です。
その他
Google ADK開発者が集う日本語のDiscordコミュニティがあります。ADKに関する情報交換や議論に興味がある方は、ぜひ参加してみてください。
まとめ
エージェントのコンテキスト管理では、Stateによるデータの共有・保存やArtifactの活用、静的インストラクションなど、押さえておくべきポイントが多く存在します。これらを駆使することで、エージェントの応答精度や効率を向上させ、より高度なタスクに対応できるようになります。
採用のご紹介
SOMPO Digital Labでも、こうした最先端のAIエージェント技術に取り組んでおり、現在エンジニアやデータスペシャリストなど様々なポジションで仲間を募集しています。もし本記事の内容に興味を持っていただけたなら、ぜひ弊社の採用情報ページも覗いてみてください。一緒に次世代のAIソリューションを創っていきましょう!カジュアル面談の申し込み、お待ちしております!
Discussion