Genkit vs Agent Development Kit (ADK): Google 製 AI フレームワークの違いと使い分け
はじめに
Google は AI 開発を支援するオープンソースのフレームワークとして Genkit と Agent Development Kit (ADK) を提供しています。
どちらも Google の大規模言語モデル (LLM) を活用できますが、想定するユースケース、アーキテクチャ、開発者向けの機能が異なります。
Genkit と ADK の概要
Genkit は、アプリケーションへの AI 機能組み込み をシンプルにするためのフレームワークです。
Firebase チームによって開発され、プラグインやテンプレートを活用して多様な生成 AI モデルを統合し、迅速に AI 機能を構築できます。
一方、ADK は、高度な AI エージェントシステムの開発 に特化した Python ツールキットです。
複数のエージェント間の協調動作や外部ツール連携を含む、複雑な マルチエージェント シナリオに対応できる基盤を提供します。
本記事では、Genkit と ADK の違いを明確にするため、ユースケース、統合先プラットフォーム、対応モデル、開発スタイル、提供状況 といった観点から両者を比較します。
それぞれの特徴を理解し、どちらのフレームワークが読者のプロジェクトに適しているか判断する手助けとなれば幸いです。
Genkit と ADK の比較表
まず、主要な情報を下記の表にまとめました。
観点 | Genkit | Agent Development Kit (ADK) |
---|---|---|
ユースケース | アプリへの生成 AI 機能組み込み全般 (チャットボット、要約、推薦、RAG など)。 単一または少数の LLM によるワークフロー自動化や簡易エージェント機能。 |
複数エージェントが協調する複雑なエージェントシステムの構築 (マルチエージェント対話、役割分担による問題解決など)。 LLM がツールやサブエージェントを利用するエージェント指向アプリケーション。 |
統合先プラットフォーム | Firebase (Cloud Run functions for Firebase) との親和性が高いが、Cloud Run や GKE など Firebase 外の環境にもデプロイ可能。 ベンダーロックインがないのが特徴。 |
任意のコンテナ環境にもデプロイ可能だが、Google Cloud (特に Vertex AI Agent Engine) との統合に最適化されている。 |
モデル対応 | 幅広いモデルに対応: Google (Gemini, Imagen 等)、Anthropic、OpenAI、Ollama 経由のローカルモデルなどを Genkit プラグイン で統一的に利用可能。 | Google 複数モデルに対応: LiteLLM や Vertex AI Model Garden を介して様々なモデルを利用可能。 Google の Gemini 系モデルとの統合が最も深く、高度な推論・ツール使用能力を活かせる。 Using Different Models with ADK |
開発スタイル | コード中心 (Node.js/Go/Python) + ローカル UI: 開発者が Flow を定義。 ブラウザ UI (Genkit Developer UI) でテスト・デバッグ可能。Function Calling によるエージェント的動作も可能。 |
コード中心 (Python) + ローカル UI: 開発者がエージェントクラスやツールを実装する。 ローカル Web UI や CLI でテスト・デバッグ可能。 LLM がツールやサブエージェントを自律的に呼び出すエージェント指向オーケストレーションが特徴。 |
提供状況 | Firebase チームによって開発され、Node.js 版 (GA) が 2025 年 2 月にリリースされた。 Go 版 (Beta)、Python 版 (Alpha) も提供中。Genkit GitHub |
Pre-GA、2025 年 5 月 Google Cloud Next'25 にて発表された。 2025 年 4 月時点では、対応言語は Python のみ。 ADK GitHub |
この表から、
- Genkit は「幅広い AI ユースケースに柔軟に対応できる統合フレームワーク」
- ADK は「複雑なエージェントシステム構築に特化した専門フレームワーク」
というそれぞれの特徴が見えてきます。
詳細比較
各観点について、さらに詳しく見ていきましょう。
ユースケースの違い
Genkit
Genkit は、モバイルアプリや Web アプリに 多様な生成 AI 機能を追加する のに向いています。
- チャットボットによるユーザーサポート
- 文章の自動要約・生成
- パーソナライズされたコンテンツ推薦
- 社内文書を活用した RAG ベースの Q&A システム
Genkit は、AI モデルを使ったワークフローを構築するための基本的な部品を提供します。
単一または少数の LLM を組み合わせて一連の処理をコードで記述し、アプリケーションの機能として統合する場合に役立ちます。
そのため「自社アプリに手軽に AI 機能を追加したい」「既存の Firebase アプリに生成 AI を統合したい」といったニーズに応えることができます。
ADK
ADK は、複数の AI エージェントが協調して動作する高度なシステム を構築する場合に特に強みを発揮します。
- 専門分野の異なる複数のエージェントが協力して複雑なタスクを解決する
- ユーザーの意図に応じて、AI が自律的にサブタスクを他のエージェントやツールに委譲する
例えば、ユーザーからの問い合わせ内容に応じて、挨拶担当エージェント、情報検索担当エージェント、要約担当エージェントなどが連携して応答を生成するようなシナリオが考えられます。
ADK はエージェント間の階層構造や役割分担を定義し、LLM 自身に適切な処理の振り分けを判断させる仕組みを提供します。
公式ドキュメントでも、天気情報を答えるメインエージェントが、挨拶や別れの挨拶を専門とするサブエージェントを利用する例が紹介されています。
まとめると、以下のようになります。
- Genkit: 単一の LLM やシンプルなワークフローで実現できる AI 機能向け
- ADK: 複数の LLM エージェントが連携する、より複雑で自律的な AI システム向け
公式ブログでも「綿密に協調する複雑なエージェントシステムを構築するなら ADK、より柔軟で幅広い GenAI プロジェクトには Genkit が適している」と説明されています。
さらに、私が所属している Discord の Genkit コミュニティでは下記の言及もありました。
ADK is specifically only for building agents, and it has an opinionated foundation for how to construct multi-agent systems. Genkit is a general purpose toolkit for building with GenAI which includes agent-building capabilities, but we take fewer strong opinions on the specific construction of agents. Genkit is also available across three languages while ADK is currently Python-only.
If the concepts of ADK seem to match your needs well and you're planning to only work in Python, you can go with that. If you're looking for more flexibility and cross-language support, go with Genkit. As someone who works on Genkit I think its ergonomics and flexibility are pretty great, but either choice can be used to build an agent system. Hope that helps a bit!
以下、日本語訳
ADK は特にエージェントを構築するためだけのものであり、マルチエージェントシステムをどのように構築するかについての基礎に意見を持っている。Genkit は、エージェント構築機能を含む GenAI で構築するための汎用ツールキットですが、エージェントの具体的な構築方法についての強い意見はあまりありません。また、Genkit は 3 つの言語で利用可能ですが、ADK は現在 Python のみです。
ADK のコンセプトがあなたのニーズにうまくマッチしそうで、Python だけで作業するつもりなら、そちらを利用すればいいでしょう。より柔軟で言語横断的なサポートを求めるのであれば、Genkit を選ぶといいだろう。Genkit で仕事をしている者として、その人間工学と柔軟性はとても素晴らしいと思いますが、どちらの選択もエージェントシステムを構築するのに使うことができます。少しでも参考になれば幸いです!
この Discord での言及は、Genkit の汎用性と柔軟性、そして ADK のマルチエージェント構築への特化という、両フレームワークの設計思想の違い を端的に示しているように感じます。
では、これらの違いが具体的にどのようなアーキテクチャや開発体験に繋がっているのか、さらに詳しく見ていきましょう。
アーキテクチャの違い
Genkit
Genkit は、開発者が 明示的にワークフロー(フロー)を定義 するスタイルを取ります。
コード上で「LLM A でテキスト生成 → 結果を加工 → 関数 B を実行 → ...」といった処理手順を記述します。
Genkit は ai.generate()
のような統一 API や、構造化データ出力、プラグイン関数呼び出し (Function Calling) といった機能を提供し、これらのステップを簡潔に実装しやすくなっています。
const characterTranslationEnPrompt = ai.prompt<z.ZodTypeAny, z.ZodTypeAny>(`characterTranslationEn`)
const characterDescriptionGeneratorPrompt = ai.prompt<z.ZodTypeAny, z.ZodTypeAny>(`characterDescriptionGenerator`)
const characterImageGeneratorPrompt = ai.prompt<z.ZodTypeAny, z.ZodTypeAny>(`characterImageGenerator`)
export const generateCharacterFlow = onFlow(
ai,
{
name: `generateCharacterFlow`,
// リクエストデータの型定義
inputSchema: z.object({
characterName: z.string(),
age: z.number(),
gender: z.string(),
personality: z.string(),
story: z.string(),
}),
// レスポンスデータの型定義
outputSchema: z.object({
description: z.string(),
image: z.string(),
}),
// 認証ポリシー -> 匿名ユーザーのみアクセス可能
authPolicy: firebaseAuth((user) => {
if (user.firebase?.sign_in_provider !== `anonymous`) {
throw new Error(`Only anonymously authenticated users can access this function`)
}
}),
httpsOptions: {
secrets: [googleAIapiKey],
cors: true,
region: `asia-northeast1`,
},
},
// メインの処理フロー
async (input) => {
// 1. クライアントのリクエスト情報からキャラクターの説明文を日本語で生成
const { output: characterDescription } = await characterDescriptionGeneratorPrompt(input)
// 2. キャラクター情報を英語に翻訳(画像生成モデルの Imagen3 が日本語に対応していないため)
const { output: translatedCharacter } = await characterTranslationEnPrompt(input)
// 3. 翻訳された情報をもとに画像を生成
const { media } = await characterImageGeneratorPrompt(translatedCharacter)
// 4. 生成された説明文と画像 (Base64) を返却
return {
description: characterDescription.description,
image: media?.url || ``,
}
}
)
Function Calling を使えば、LLM が必要に応じて定義された関数を呼び出す半自律的なエージェントのような振る舞いも実現できます が、基本的には開発者がフロー全体を制御します。
外部ツールやデータソースとの連携はプラグイン機構を通じて行われ、例えばベクトル DB を使った RAG パターンも容易に構築できます。
ADK
ADK は エージェント指向 のアーキテクチャを採用しています。
開発者はエージェント (Agent クラス) を定義し、それぞれに役割 (指示プロンプト) と利用可能なツールやサブエージェントを設定します。
# @title Define the get_weather Tool
def get_weather(city: str) -> dict:
"""Retrieves the current weather report for a specified city.
Args:
city (str): The name of the city (e.g., "New York", "London", "Tokyo").
Returns:
dict: A dictionary containing the weather information.
Includes a 'status' key ('success' or 'error').
If 'success', includes a 'report' key with weather details.
If 'error', includes an 'error_message' key.
"""
# Best Practice: Log tool execution for easier debugging
print(f"--- Tool: get_weather called for city: {city} ---")
city_normalized = city.lower().replace(" ", "") # Basic input normalization
# Mock weather data for simplicity
mock_weather_db = {
"newyork": {"status": "success", "report": "The weather in New York is sunny with a temperature of 25°C."},
"london": {"status": "success", "report": "It's cloudy in London with a temperature of 15°C."},
"tokyo": {"status": "success", "report": "Tokyo is experiencing light rain and a temperature of 18°C."},
}
# Best Practice: Handle potential errors gracefully within the tool
if city_normalized in mock_weather_db:
return mock_weather_db[city_normalized]
else:
return {"status": "error", "error_message": f"Sorry, I don't have weather information for '{city}'."}
# @title Define the Weather Agent
# Use one of the model constants defined earlier
AGENT_MODEL = MODEL_GEMINI_2_5_PRO # Starting with a powerful Gemini model
weather_agent = Agent(
name="weather_agent_v1",
model=AGENT_MODEL, # Specifies the underlying LLM
description="Provides weather information for specific cities.", # Crucial for delegation later
instruction="You are a helpful weather assistant. Your primary goal is to provide current weather reports. "
"When the user asks for the weather in a specific city, "
"you MUST use the 'get_weather' tool to find the information. "
"Analyze the tool's response: if the status is 'error', inform the user politely about the error message. "
"If the status is 'success', present the weather 'report' clearly and concisely to the user. "
"Only use the tool when a city is mentioned for a weather request.",
tools=[get_weather], # Make the tool available to this agent
)
実行時、LLM は自身の役割とユーザーの入力に基づいて、「自分で処理すべきか」「他のエージェントに委譲すべきか」「どのツールを使うべきか」を判断します。
処理フローは静的に固定されず、エージェント間の動的なやり取りによって決まります。
ADK はこのエージェント間のメッセージング、ツール呼び出し、ストリーミング制御などを支える基盤を提供します。
さらに、エージェントを独立したサービスとしてデプロイし、相互に通信させるマイクロサービス的な構成 (A2A: Agent-to-Agent プロトコル) も可能です。
つまり、以下のように整理できます。
- Genkit: 開発者主導の明示的なワークフロー制御 (軽量なエージェント実装も可)
- ADK: LLM の推論に基づく動的なエージェントオーケストレーション
開発体験の違い
観点 | Genkit | ADK |
---|---|---|
言語 | Node.js (TS/JS), Go (Beta), Python (Alpha) の利用が可能。 | Python (Pre-GA) のみ。 |
ローカル開発 |
Genkit Developer UI: フロー実行、トレース確認、自動評価。![]() |
ADK Development UI: エージェント動作確認、ツール/エージェント間通信追跡。![]() |
デプロイ | Cloud Run functions for Firebase, Cloud Run functions, Cloud Run, GKE, セルフホスト環境 | Vertex AI Agent Engine, Cloud Run Deploying Your Agent |
コミュニティ |
Genkit Discord サーバー が非常に活発。 Genkit リポジトリに対するコードレビュー依頼やさまざまな議論が活発。 |
GitHub リポジトリのみ。 ※リリースされたばかりなのでコミュニティはこれから活発になっていくと考えられる。 |
使い分けガイド
プロジェクトの性質や目的に応じて、適切なフレームワークを選択すると良いでしょう。
シナリオ/条件 | 推奨フレームワーク | 理由/例 |
---|---|---|
シンプルな AI 機能を迅速にアプリに組み込みたい。 | Genkit | 例: チャットボット、要約、RAG。 Firebase との連携が容易で開発スピード重視の場合。 |
複数の専門エージェントが協調する複雑な AI システム。 | ADK | 例: 複数データソース/ツール利用、役割分担。 エージェント間のオーケストレーションが必要な場合に効果的。 |
開発チームが JavaScript / TypeScript 中心。 | Genkit | Node.js に対応している。 Firebase や Web フロントエンド開発の経験を活かせる。 |
開発チームが Python 中心。 | ADK | 機械学習やデータ処理の経験を活かせる。 |
既存の Firebase アプリに AI 機能を追加したい。 | Genkit | 既存アーキテクチャとの親和性が高い。 |
Google Cloud データ/企業システムと連携したい。 | ADK | 例: BigQuery, 他の SaaS など。 Vertex AI や豊富なコネクタを活用でき、エンタープライズ用途に適している。 |
将来的に様々な AI ユースケースに対応したい。 | Genkit | プラグインによる拡張性が高く、柔軟に対応できる。 |
初期はシンプルだが、将来的に複雑なマルチエージェント化。 | ADK | 将来の拡張を見据えて、最初から ADK で基盤を構築する方が効率的な場合もある。 |
公式ブログでも述べられているように、「プロジェクトの具体的なゴール」に基づいて最適な方を選ぶことが重要です。
迷った場合は、両方のフレームワークで簡単なプロトタイプを作成し、実現したい機能や開発のしやすさを比較検討するのも良い方法です。
まとめ
Genkit と ADK は、それぞれ異なる強みを持つ AI 開発フレームワークです。
- Genkit: アプリケーションへの AI 機能統合を容易にし、幅広いユースケースに柔軟に対応。開発者体験と生産性を重視。
- ADK: 複雑なマルチエージェントシステムの構築に特化。高度な制御性とエンタープライズ連携を実現。
どちらのフレームワークも、
- オープンソースであり、コミュニティによる拡張が可能
- Genkit Developer UI / ADK Development UI によるローカルでの開発・デバッグ環境が充実
- Google の最新 LLM (Gemini など) を活用可能
といった共通点があります。
プロジェクトの要件を明確にし、チームのスキルセットや既存の技術スタックを考慮して、最適なフレームワークを選択することが成功への近道となるでしょう。
公式ドキュメントやサンプルを参考に、実際に触ってみることをおすすめします。
最新情報を追いかけながら、Genkit と ADK を活用して、革新的な AI アプリケーション開発を進めていくことが期待されます。
Discussion