🤖 Google Agent Development Kit (ADK) 入門ガイド

## 🌟 はじめに

こんにちは！今回は2025年4月にGoogle Cloudイベントで発表された **Google Agent Development Kit (ADK)** について詳しく解説します。AIエージェント開発の新しい波が来ていますが、特に複数のAIエージェントを連携させるマルチエージェントシステムの開発に注目が集まっています。

この記事では、ADKの基本概念から実装方法、ユースケースまで、初めての方でも理解できるように解説していきます。さあ、未来のAIエージェント開発の世界を一緒に探検しましょう！

## 📝 Google ADKとは？

**Google Agent Development Kit (ADK)** は、AIエージェントを効率的に構築・管理・評価・デプロイするためのオープンソースフレームワークです。特に注目すべきは、複雑なマルチエージェントシステムを100行未満のコードで構築できる点です。

> 💡 **ADKの目的**: エージェント開発の「フルスタックのエンドツーエンド開発」ライフサイクル全体を簡素化し、開発者により細かな制御と柔軟性を提供すること

### 主な特徴

- ✅ **コードファーストアプローチ**: Pythonコードを中心にエージェントのロジック、ツール、オーケストレーションを定義
- ✅ **モジュール性**: 特化したエージェントの組み合わせによる再利用性とスケーラビリティ向上
- ✅ **多様なモデル対応**: Gemini, OpenAI, Anthropic, Meta, Mistralなど多様なLLMをサポート
- ✅ **マルチエージェント設計**: 階層構造でエージェント間の委任や協調が可能
- ✅ **Google Cloud最適化**: 特にGeminiモデルやVertex AIとのシームレスな連携

## 🏗️ ADKのアーキテクチャ

ADKは複数の層から構成される包括的なフレームワークです。以下がその全体像です：

```mermaid
flowchart TB
    subgraph ADK["Agent Development Kit (ADK)"]
        subgraph AgentLayer["エージェント層"]
            LlmAgent["LlmAgent"]
            Sequential["SequentialAgent"]
            Parallel["ParallelAgent"]
            Workflow["WorkflowAgent"]
        end
        subgraph ToolLayer["ツール層"]
            FunctionTool["FunctionTool"]
            AgentTool["AgentTool"]
            ExternalTool["External API Tool"]
            CodeTool["Code Exec Tool"]
        end
        subgraph ModelLayer["モデル層"]
            Gemini["Gemini LLM"]
            VertexAI["Vertex AI Models"]
            LiteLLM["LiteLLM Integration"]
        end
        subgraph InfraLayer["インフラ層"]
            Session["セッションサービス"]
            Memory["メモリサービス"]
            Artifact["アーティファクト"]
            Runner["Runner"]
        end
    end
    
    App["アプリケーション\n(ユーザー制作)"] --> AgentLayer
    External["外部システム\n連携"] --> ToolLayer
    LLMServices["LLMサービス"] --> ModelLayer
    Cloud["クラウド基盤"] --> InfraLayer
    
    style ADK fill:#f5f5f5,stroke:#333,stroke-width:2px
    style AgentLayer fill:#e1f5fe,stroke:#01579b
    style ToolLayer fill:#e8f5e9,stroke:#1b5e20
    style ModelLayer fill:#fff3e0,stroke:#e65100
    style InfraLayer fill:#f3e5f5,stroke:#4a148c
```

### コアコンポーネント

1. **エージェント（Agent）** 🤖
   - LlmAgent: 基本的なLLM駆動エージェント
   - SequentialAgent: エージェントを順番に実行
   - ParallelAgent: エージェントを並列に実行
   - WorkflowAgent: 複雑なワークフローを構築

2. **ツール（Tool）** 🔧
   - FunctionTool: Python関数をエージェントのツールとして提供
   - AgentTool: 他のエージェントをツールとして利用
   - ExternalTool: 外部APIやサービスとの連携

3. **モデル（Model）** 🧠
   - Gemini: Google提供のLLM（最適化済み）
   - 各種LLM: LiteLLM統合で様々なモデルをサポート

4. **インフラ（Infrastructure）** 🏢
   - セッション管理: 会話文脈の保持
   - メモリサービス: 長期情報の保存
   - Artifactサービス: ファイルやデータの管理

### マルチエージェントアーキテクチャ

ADKの強みは複数のエージェントを階層的に組み合わせられる点にあります：

```mermaid
flowchart TB
    subgraph ClientAgent["クライアントエージェント"]
        Orchestrator["オーケストレーター"]
    end
    
    ClientAgent --> Agent1
    ClientAgent --> Agent2
    ClientAgent --> Agent3
    
    subgraph Agent1["専門エージェント1\n(例: 情報収集)"]
    end
    
    subgraph Agent2["専門エージェント2\n(例: 分析)"]
    end
    
    subgraph Agent3["専門エージェント3\n(例: 要約)"]
    end
    
    Agent1 --> Tool1["ツール1\n(例: Web検索)"]
    Agent2 --> Tool2["ツール2\n(例: データ分析)"]
    Agent3 --> Tool3["ツール3\n(例: 文書生成)"]
    
    style ClientAgent fill:#bbdefb,stroke:#1976d2,stroke-width:2px
    style Orchestrator fill:#e3f2fd,stroke:#1976d2
    style Agent1 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style Agent2 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style Agent3 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style Tool1 fill:#dcedc8,stroke:#558b2f
    style Tool2 fill:#dcedc8,stroke:#558b2f
    style Tool3 fill:#dcedc8,stroke:#558b2f
```

### Google Cloud Platformとの統合

ADKはGoogle Cloudサービスとシームレスに連携します：

```mermaid
flowchart TB
    subgraph GCP["Google Cloud Platform"]
        subgraph VertexAI["Vertex AI"]
            GeminiAPI["Gemini API"]
        end
        subgraph BQ["BigQuery"]
            DataAnalysis["データ分析"]
        end
        subgraph Storage["Cloud Storage"]
            Documents["ドキュメント"]
        end
        subgraph Apigee["Apigee"]
            APIManagement["API 管理"]
        end
        subgraph FS["Firestore"]
            NoSQL["NoSQLデータ"]
        end
        subgraph CF["Cloud Functions"]
            Serverless["サーバーレス"]
        end
    end
    
    GCP <--> ADK
    
    subgraph ADK["Agent Development Kit (ADK)"]
        subgraph AgentLayer["エージェント層"]
            LlmAgent["LlmAgent"]
            Sequential["SequentialAgent"]
            Parallel["ParallelAgent"]
        end
        subgraph Connectors["GCPコネクタ層"]
            VertexAiLlm["VertexAiLlm"]
            BigQueryConnector["BigQuery\nConnector"]
            StorageConnector["Storage\nConnector"]
        end
    end
    
    ADK <--> Apps
    
    subgraph Apps["アプリケーション"]
        WebUI["Webインターフェース"]
        Mobile["モバイルアプリ"]
        Enterprise["エンタープライズ\nシステム連携"]
    end
    
    style GCP fill:#4285f4,color:white,stroke:#2962ff,stroke-width:2px
    style VertexAI fill:#669df6,color:white,stroke:#2962ff
    style BQ fill:#669df6,color:white,stroke:#2962ff
    style Storage fill:#669df6,color:white,stroke:#2962ff
    style Apigee fill:#669df6,color:white,stroke:#2962ff
    style FS fill:#669df6,color:white,stroke:#2962ff
    style CF fill:#669df6,color:white,stroke:#2962ff
    
    style ADK fill:#fbbc04,stroke:#f9a825,stroke-width:2px
    style AgentLayer fill:#fff8e1,stroke:#f9a825
    style Connectors fill:#fff8e1,stroke:#f9a825
    
    style Apps fill:#34a853,color:white,stroke:#2e7d32,stroke-width:2px
    style WebUI fill:#a5d6a7,color:black,stroke:#2e7d32
    style Mobile fill:#a5d6a7,color:black,stroke:#2e7d32
    style Enterprise fill:#a5d6a7,color:black,stroke:#2e7d32
```

## 🚀 ユースケース

ADKはさまざまな分野で活用できます。その中でも主なユースケースをご紹介します：

### 1. マルチエージェントによるタスク分割と処理

複数の専門エージェントが連携して複雑なタスクを処理：

- 🧠 **企画開発システム**: 企画生成、評価、改善エージェントが連携して企画案を洗練
- 📊 **研究アシスタント**: データ収集、分析、レポート作成を体系的に自動化

### 2. 企業データ統合システム

既存の企業システムと連携したインテリジェントな対応：

- 👥 **顧客サポートシステム**: CRMデータ、製品情報、対応履歴を統合
- 📈 **ビジネスインテリジェンス**: 社内データベースに自然言語でクエリ

### 3. 専門分野向けアプリケーション

特定産業に特化した知識を持つエージェント：

- ⚖️ **法務アシスタント**: 法律文書分析、契約書レビュー
- 🏥 **医療診断支援**: 患者データ、医学文献、症例分析の統合
- 💰 **金融アドバイザー**: 市場分析、リスク評価、投資提案

### 4. 教育・トレーニングシステム

学習者に合わせたパーソナライズされた学習体験：

- 📚 **適応型学習**: 理解度に応じたコンテンツ調整
- 💻 **プログラミング教育**: コード分析、エラー説明、課題提供

### 5. 高度な自動化システム

複雑なワークフローを自動化：

- 📝 **コンテンツ制作**: 調査、ドラフト作成、編集、画像生成の一元化
- 🔄 **プロダクト開発**: 市場調査から製品設計、テスト、マーケティングまで統合

### 実際のアプリケーション例：企画開発支援システム

```mermaid
flowchart TB
    UI["ユーザーインターフェース"] --> ClientAgent
    
    subgraph ClientAgent["PlanningClientAgent\n(クライアントエージェント)"]
    end
    
    ClientAgent --> Generator
    ClientAgent --> Evaluator
    ClientAgent --> Improver
    
    subgraph Generator["PlanGeneratorAgent\n(企画生成エージェント)"]
    end
    
    subgraph Evaluator["PlanEvaluatorAgent\n(企画評価エージェント)"]
    end
    
    subgraph Improver["PlanImproverAgent\n(企画改善エージェント)"]
    end
    
    Generator --> GenModel["Gemini LLM\n(生成モデル)"]
    Evaluator --> EvalModel["Gemini LLM\n(評価モデル)"]
    Improver --> ImprModel["Gemini LLM\n(改善モデル)"]
    
    GenModel --> SessionService
    EvalModel --> SessionService
    ImprModel --> SessionService
    
    GenModel --> MemoryService
    EvalModel --> MemoryService
    ImprModel --> MemoryService
    
    subgraph Infrastructure["インフラストラクチャ"]
        SessionService["セッションサービス\n(対話履歴管理)"]
        MemoryService["メモリサービス\n(コンテキスト保持)"]
    end
    
    style UI fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    style ClientAgent fill:#b3e5fc,stroke:#0288d1,stroke-width:2px
    
    style Generator fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style Evaluator fill:#dcedc8,stroke:#689f38,stroke-width:2px
    style Improver fill:#f0f4c3,stroke:#afb42b,stroke-width:2px
    
    style GenModel fill:#bbdefb,stroke:#1976d2
    style EvalModel fill:#bbdefb,stroke:#1976d2
    style ImprModel fill:#bbdefb,stroke:#1976d2
    
    style Infrastructure fill:#d1c4e9,stroke:#512da8,stroke-width:2px
    style SessionService fill:#e1bee7,stroke:#8e24aa
    style MemoryService fill:#f3e5f5,stroke:#7b1fa2
```

## 🔄 他のフレームワークとの比較

ADKは他のAIエージェントフレームワークとどう違うのでしょうか？

| 機能/特徴 | Google ADK | LangChain | AutoGen | CrewAI | LlamaIndex |
|---------|------------|-----------|---------|--------|------------|
| **オープンソース** | ✅ | ✅ | ✅ | ✅ | ✅ |
| **開発言語** | Python | Python, JavaScript | Python | Python | Python, TypeScript |
| **マルチエージェント設計** | ✅ (ネイティブサポート) | ⚠️ (部分的サポート) | ✅ | ✅ | ⚠️ (部分的サポート) |
| **LLMサポート** | Geminiネイティブ + LiteLLMで多様なモデル | 広範なモデルサポート | 広範なモデルサポート | 広範なモデルサポート | 広範なモデルサポート |
| **ストリーミングサポート** | ✅ (双方向ストリーミング) | ✅ | ✅ | ⚠️ (部分的) | ✅ |
| **メモリ管理** | ✅ (組み込み) | ✅ (組み込み) | ⚠️ (限定的) | ⚠️ (限定的) | ✅ (組み込み) |
| **開発ツール** | ✅ (CLI + Web UI) | ⚠️ (限定的) | ⚠️ (限定的) | ❌ | ⚠️ (限定的) |
| **評価フレームワーク** | ✅ (組み込み) | ✅ (LangSmith) | ❌ | ❌ | ❌ |
| **デプロイオプション** | ✅ (コンテナ化簡易) | ✅ | ⚠️ (限定的) | ⚠️ (限定的) | ⚠️ (限定的) |
| **A2A連携** | ✅ (ネイティブサポート) | ❌ | ❌ | ❌ | ❌ |
| **Google Cloud統合** | ✅ (深い統合) | ⚠️ (部分的) | ⚠️ (部分的) | ⚠️ (部分的) | ⚠️ (部分的) |
| **マルチモーダルサポート** | ✅ | ⚠️ (部分的) | ⚠️ (部分的) | ⚠️ (部分的) | ⚠️ (部分的) |
| **コミュニティ成熟度** | 🆕 (新興) | ✅ (確立済み) | ⚠️ (成長中) | ⚠️ (成長中) | ✅ (確立済み) |
| **学習曲線** | 中程度 | 急 | 中程度 | 緩やか | 中程度 |

Google ADKの主な強みは：

- 🔥 **マルチエージェントシステムのネイティブサポート**
- 🔥 **Google Cloudサービスとの緊密な統合**
- 🔥 **A2Aプロトコルによるエージェント間相互運用性**
- 🔥 **組み込みの評価・デバッグツール**

一方で、新しいフレームワークのため、コミュニティリソースやサンプルは他の確立されたフレームワークと比較するとまだ発展段階にあります。

## 🛠️ 環境構築手順

ADKを使うための環境構築は比較的シンプルです。

### 前提条件

- Python 3.9以上
- pip（Pythonパッケージ管理ツール）

### 基本的な環境構築

```bash
# 仮想環境の作成と有効化（推奨）
python -m venv adk_env
source adk_env/bin/activate  # Windowsの場合: adk_env\Scripts\activate

# ADKパッケージのインストール
pip install google-adk google-generativeai

# Geminiモデル使用のためのAPIキー設定（環境変数）
export GOOGLE_API_KEY=あなたのAPIキー
# Windowsの場合: set GOOGLE_API_KEY=あなたのAPIキー
```

### Google Cloud環境での設定（オプション）

```bash
# Google Cloud統合のための環境変数
export PROJECT_ID=あなたのプロジェクトID
export LOCATION=us-central1  # または他のリージョン
export GOOGLE_GENAI_USE_VERTEXAI=true
```

APIキーはGoogle AI Studioから取得できます。

## 💻 サンプルコード

### 基本的なエージェント実装

以下は、ADKを使用した基本的なエージェント実装の例です：

```python
from google.adk.agent import LlmAgent
from google.adk.tool import define_function_tool
from google.adk.integration.llm.gemini import GeminiLlm
from google.adk.integration.vertexai.session import InMemorySessionService
from google.adk.runner import Runner

# シンプルなツール関数の定義
def get_current_weather(location: str, unit: str = "celsius") -> str:
    """指定された場所の現在の天気を取得する"""
    # 実際のAPI呼び出しなどはここに実装
    return f"{location}の天気は晴れ、気温は25{unit}です"

# 関数をADKツールに変換
weather_tool = define_function_tool(get_current_weather)

# エージェントの構築
def build_agent():
    return LlmAgent(
        llm=GeminiLlm(),
        description="天気情報を提供するアシスタントです",
        instruction="""
        ユーザーから天気に関する質問があった場合は、get_current_weather関数を使って回答してください。
        それ以外の質問には一般的な知識に基づいて返答してください。
        """,
        tools=[weather_tool]
    )

# エージェントの実行
def main():
    agent = build_agent()
    runner = Runner(
        agent=agent,
        session_service=InMemorySessionService()
    )
    
    # ユーザーとの対話
    session = runner.create_session()
    response = runner.run(session, "大阪の天気を教えてください")
    print(response.text)

if __name__ == "__main__":
    main()
```

### マルチエージェントシステムの実装例

複数のエージェントを連携させたシステムの実装例：

```python
from google.adk.agent import SequentialAgent, LlmAgent
from google.adk.integration.llm.gemini import GeminiLlm
from google.adk.runner import Runner

# 質問生成エージェント
def build_question_generator():
    return LlmAgent(
        llm=GeminiLlm(),
        description="トピックに基づいて質問を生成するエージェント",
        instruction="与えられたトピックについて、3つの関連質問を生成してください。"
    )

# 質問回答エージェント
def build_answer_generator():
    return LlmAgent(
        llm=GeminiLlm(),
        description="質問に回答するエージェント",
        instruction="前のエージェントが生成した質問に対して、詳細な回答を提供してください。"
    )

# 複数のエージェントを連携させるSequentialAgent
def build_sequential_agent():
    return SequentialAgent(
        agents=[
            build_question_generator(),
            build_answer_generator()
        ],
        description="トピックについての質問と回答を生成するシステム"
    )

# メイン実行関数
def main():
    agent = build_sequential_agent()
    runner = Runner(agent=agent)
    
    session = runner.create_session()
    response = runner.run(session, "人工知能の未来について教えてください")
    
    print(response.text)

if __name__ == "__main__":
    main()
```

### Google Cloud統合の例

Vertex AIのGeminiモデルを使用したエージェント実装例：

```python
from google.cloud import aiplatform
from google.adk.agent import LlmAgent
from google.adk.tool import define_function_tool
from google.adk.integration.vertexai.llm import VertexAiLlm
from google.adk.runner import Runner
from google.adk.integration.vertexai.session import VertexAiSessionService

# Google Cloud初期化
def initialize_gcp():
    aiplatform.init(
        project="あなたのプロジェクトID",
        location="us-central1"
    )

# Vertex AIのGeminiモデルを使用するエージェントを構築
def build_vertex_agent():
    # 外部関数ツールの定義
    def search_knowledge_base(query: str) -> str:
        """知識ベースを検索して回答を見つける"""
        # 実際の実装では、Vertex AI Search または企業の知識ベースへのクエリを実行
        return f"知識ベースから「{query}」に関する情報を取得しました。"
    
    # 関数をツールに変換
    kb_search_tool = define_function_tool(search_knowledge_base)
    
    # Vertex AI上のGeminiモデルを使用するエージェントを作成
    return LlmAgent(
        llm=VertexAiLlm(model_name="gemini-1.5-pro"),  # Vertex AIのモデルを指定
        description="企業の知識ベースにアクセスできるアシスタント",
        instruction="""
        企業の知識ベースから情報を検索して質問に回答してください。
        知識ベースに情報がない場合は、一般的な知識に基づいて答えてください。
        """,
        tools=[kb_search_tool]
    )

# メイン実行関数
def main():
    # GCP初期化
    initialize_gcp()
    
    # エージェント構築
    agent = build_vertex_agent()
    
    # Vertex AIのセッションサービスを使用
    runner = Runner(
        agent=agent,
        session_service=VertexAiSessionService()
    )
    
    # セッション作成と実行
    session = runner.create_session()
    response = runner.run(session, "当社の最新の製品ラインナップについて教えてください")
    print(response.text)

if __name__ == "__main__":
    main()
```

## 🔮 今後の展望

Google ADKの今後の展望としては以下が考えられます：

### 1. A2Aプロトコルとの連携強化 🤝

**Agent2Agent (A2A) プロトコル**は、異なるベンダーやフレームワークで構築されたエージェント間の相互運用性を実現する標準です。50以上の技術パートナーが貢献し、2025年後半にはプロダクションレディ版が提供される予定です。

### 2. マルチモーダル機能の強化 🎨

テキスト、画像、音声、ビデオなどを含むマルチモーダルな対話能力がさらに拡張されるでしょう：

- Gemini 2.0以降のマルチモーダルモデルとの連携強化
- リアルタイム音声・映像ストリーミングの機能拡充
- マルチモーダル入出力を活用した新しいユーザー体験の創出

### 3. エンタープライズ統合の拡充 🏢

企業システムとの連携が強化されていく見込みです：

- 既存の100以上の事前構築されたコネクタのさらなる拡張
- Vertex AI、BigQuery、AlloyDBなどのサービスとのシームレスな統合
- 企業のセキュリティとコンプライアンス要件に対応した機能強化

### 4. コミュニティとエコシステムの成長 👥

オープンソースプロジェクトとして、以下の方向に発展すると予想されます：

- サードパーティの拡張機能とプラグインのエコシステム形成
- コミュニティ主導の改善とベストプラクティスの確立
- 業界固有のソリューションテンプレートの開発

### 5. マルチエージェントシステムの標準化 📊

複雑なマルチエージェントシステムの設計・実装パターンを標準化する方向に進むでしょう：

- エージェント間通信とオーケストレーションの標準プラクティス確立
- マルチエージェントシステムのためのデザインパターンライブラリ
- エージェント協調のための新しいアーキテクチャモデルの提案

## 📝 まとめ

Google Agent Development Kit (ADK)は、AIエージェントとマルチエージェントシステムの開発を大幅に簡素化するフレームワークです。特にGoogleのクラウドサービスとの統合に優れ、Geminiモデルの能力を最大限に引き出す設計になっています。

主な特徴をまとめると：

- ✅ **マルチエージェント設計に最適化** - 複数の専門エージェントを階層的に組み合わせて複雑なタスクを解決
- ✅ **Googleエコシステムとの緊密な統合** - GeminiやVertex AIとのシームレスな連携
- ✅ **柔軟なモデル対応** - LiteLLM統合による多様なLLMモデルのサポート
- ✅ **開発ツールの充実** - CLIとWeb UIによる開発・デバッグ・評価機能
- ✅ **A2Aプロトコル対応** - 異なるフレームワーク間の相互運用性

まだ新しいフレームワークではありますが、その潜在能力は非常に高く、今後のAIエージェント開発における重要なツールになることでしょう。特に複数エージェントの連携が必要なプロジェクトや、Googleのクラウドサービスと統合したいケースでは、ADKの導入を検討する価値があります。

---

いかがでしたか？この記事が皆さんのGoogle ADK理解の助けになれば嬉しいです。質問やフィードバックがあれば、ぜひコメントで教えてください！👋

### 参考リソース

- [Google ADK公式ドキュメント](https://google.github.io/adk-docs/agents/workflow-agents/)
- [Google Cloud Blog - Agent Development Kit](https://cloud.google.com/blog/products/ai-machine-learning/build-and-manage-multi-system-agents-with-vertex-ai)
- [A2Aプロトコル仕様](https://google.github.io/A2A)