Agent Development Kit(ADK)は、結局Mastra、LangGraphを超えるのか？

## はじめに

2024年4月にGoogleが発表したAgent Development Kit（ADK）。発表直後は最速の「やってみた」記事が数多く投稿されたものの、その後は具体的な実装例が思うように出てこず、MastraやLangGraphの豊富な情報量に押されて、最近投稿を見かけることも少なくなってきました（気がしていただけかも）

しかし、先日メルカリさんが[データアナリティクス AI エージェント「Socrates」でのADK活用事例](https://speakerdeck.com/na0/merukariniokerudetaanariteikusu-ai-eziento-socrates-to-adk-huo-yong-shi-li)を発表するなど、活用例も徐々に出てきており、公式ドキュメントも以前より格段に充実してきています。

https://speakerdeck.com/enakai00/agent-development-kit-niyoruezientokai-fa-ru-men

改めてADKを深く調べてみると、用途によってはMastraやLangGraphよりも明らかに優れている点があることがわかりました。本記事では、ADKが優れている点をご紹介いたします。

## ADKとは何か？

Google Agent Development Kit（ADK）は、AIエージェントの効率的な構築、管理、評価、デプロイを可能にする、柔軟かつモジュール式のオープンソースフレームワークです。

とてもかわいい図でまとめられていますが、こちら公式抜粋資料です。基本的には、Mastra、LangGraphと変わらずかなと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3905769/164fd0ca-8a13-4a9a-ba3c-e6662abcb6af.png)

https://speakerdeck.com/enakai00/agent-development-kit-niyoruezientokai-fa-ru-men

# ADKが明らかに優れている3つのポイント

## 1. 機能連携の強力さ

### Google Cloudエコシステムとのシームレスな統合

ADKの最も大きな優位点は、Google Cloudサービスとの深い統合にあります。他のフレームワークが外部サービスとの連携で複雑な設定や認証処理を必要とするのに対し、ADKでは数行で多様なGoogle Cloudサービスを利用できます。特にエージェントとして今後重要になってくるであろうデータ分析基盤BigQueryとの接続性の良さなどがうれしいところで、メルカリでも実際に使われ始めているみたいです。

```python
# Google検索を1行で統合
from google.adk.tools import GoogleSearchTool
search_tool = GoogleSearchTool()

# Google DocsやSheetsとの連携
from google.adk.tools import DocsToolset, SheetsToolset
docs_tools = DocsToolset()  # ドキュメント作成・編集
sheets_tools = SheetsToolset()  # スプレッドシート操作

# BigQueryによるデータ分析
from google.adk.tools import BigQueryTool
bq_tool = BigQueryTool()  # 大規模データセットの分析

# Vertex AI RAG Engineによる社内ドキュメント検索
from google.adk.tools import VertexRAGTool
rag_tool = VertexRAGTool()  # 社内ナレッジベース検索
```

**メルカリのSocratesでの実際の活用例:**
- **知識アクセス系ツール**: Vertex AI RAG Engineによる社内ドキュメント検索、BigQueryテーブル定義検索
- **計算・データ処理系ツール**: BigQuery実行、Pythonコード実行
- **外部連携・API呼び出し系ツール**: Google Drive、他API連携

**メルカリでのADK活用説明スライド**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3905769/8307d74f-6344-4c8d-a079-71ebdf5b77c1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3905769/e8875513-38e8-4b5b-9359-1c1299e1a6ea.png)
https://speakerdeck.com/na0/merukariniokerudetaanariteikusu-ai-eziento-socrates-to-adk-huo-yong-shi-li?slide=48

## 2. デプロイの圧倒的な簡単さ

### ワンコマンドでCloud Runデプロイ

ADKは、エージェントの本番デプロイを`adk deploy cloud_run`という単一コマンドで実現します。これは他のフレームワークでは複数のステップと設定ファイルが必要な作業を、劇的に簡素化しています。Mastraのcloudflare, vercelデプロイがセキュリティ的にかなり微妙。LangChain, LangGraphはFastAPIで自分でラッピングして、、、とかめんどくさい処理がMastraよりさらに多い印象で、デプロイのしやすさはかなりありがたい。

```bash
# たった1行で本番デプロイ完了
adk deploy cloud_run \
  --project=$GOOGLE_CLOUD_PROJECT \
  --region=$GOOGLE_CLOUD_LOCATION \
  $AGENT_PATH
```



## 3. 複数エージェントを数行で表現できるWorkflowAgent
複数種類のエージェントを使ったワークフローを、数行のコードで表現できるのがADKの大きな特徴。これをLangGraphで実現しようとしたら、状態、ノード、エッジの定義でかなりの行数行きます。Mastraもかなり簡単に描けるものの、LoopAgentとかの標準実装的にADKのほうがやりやすい印象です。

### SequentialAgent - 順次実行の簡潔な記述


```python
from google.adk.core import SequentialAgent

# 複数のエージェントを順番に実行
workflow = SequentialAgent(
    agents=[
        data_collector_agent,    # データ収集
        analyzer_agent,          # 分析実行
        report_generator_agent   # レポート生成
    ]
)
```

### ParallelAgent - 並列処理の簡単な実装

並列処理が必要な場面でも、設定は極めてシンプルです。

```python
from google.adk.core import ParallelAgent

# 複数のエージェントを並列実行
parallel_workflow = ParallelAgent(
    agents=[
        flight_search_agent,     # フライト検索
        hotel_search_agent,      # ホテル検索
        activity_search_agent    # アクティビティ検索
    ]
)
```

### LoopAgent - 反復処理の直感的な記述

反復処理やリトライロジックも、直感的に記述できます。

```python
from google.adk.core import LoopAgent

# 条件を満たすまで繰り返し実行
retry_workflow = LoopAgent(
    agent=data_validation_agent,
    max_iterations=5,
    exit_condition=lambda result: result.status == "success"
)
```

### 階層的な組み合わせ

これらのWorkflowAgentは階層的に組み合わせることができ、極めて複雑なワークフローも簡潔に表現できます。

```python
# 複雑なワークフローの階層的構成
main_workflow = SequentialAgent([
    data_preparation_agent,
    ParallelAgent([
        model_training_agent_a,
        model_training_agent_b,
        model_training_agent_c
    ]),
    LoopAgent(
        agent=validation_agent,
        max_iterations=3
    ),
    deployment_agent
])
```


## 課題感

1. **SDKとしての未成熟さ**
   アップデートが行われて毎日使いやすくなっているものの、互換性のないアップデート等で、初期から追い続けると大型アップデートに震える日々を過ごすのでは？という俯瞰感がありそうです。


2. **事例の少なさ**
   今回メルカリさんが事例を出すまで、やってみた系以外の実装例がなく、LangGraphのDeepResearch等に匹敵した事例がないと実装に詰まる部分が出てきそうな印象です。（これは、Mastraも抱える課題かなと思います）


## LangGraph・Mastraとの棲み分け

### ADK
特に、エンタープライズレベルでの利用や、Googleのサービスとの深い統合が必要な場面では、ADKの選択をするのがありになっていると思いました。さらに、LangGraphとCrewAI等の接続性もよく、今後のアプデ次第ではPython系SDKの長になる可能性もなくはないのかなと思います。

### LangGraph
ただ、LangGraphの状態管理・ワークフロー管理で実現できる複雑性は唯一無二だと思っているので、今後も複雑な業務要件ユースとして残っていくと思います。カスタマイズ性が高い一方、クイックに開発していくような要件には一致しないと思うので、そこは他二つで実装していくところだと思います。

### Mastra
Mastraとのすみ分けとしてはフロントとの接続性とAIでの開発体験かなと思います。Mastraは型付けを強制できるため、AIにめちゃくちゃにされることなく、NextJSを用いたフロントとの接続性の良さで今後も重宝されると思います。ただ、A2AやNL-webといった標準プロトコルが軒並みpython仕様であるため、ここら辺の対応に送れることがあるのかなと思います。