Genkit vs ADK: Google AI フレームワーク選定ガイド
Google は AI 開発を支援するオープンソースのフレームワークとして Genkit と Agent Development Kit(ADK) を提供しています。
どちらも Google の大規模言語モデル(Gemini)を活用できますが、想定するユースケースやアーキテクチャ、開発者向けの機能が異なります。
本記事では、Genkit と ADK の違いを明確にするため、ユースケース、統合先プラットフォーム、対応モデル、開発スタイル、提供状況といった観点から両者を比較します。
それぞれの特徴を理解し、どちらのフレームワークがプロジェクトに適しているか判断する手助けとなれば幸いです。
時間がない方向け:Genkit team が運営する subreddit r/GenkitFramework には、Genkit 開発元による使い分けの説明があります。
if you’re looking for the rich enterprise features of Agent Platform, and want to build multi-agent standalone systems, ADK is for you.
if you’re looking to add Gen AI or agentic features into your app, or want to build agents with lower level components especially using a variety of platforms and models, Genkit is the way to go.
これがおおよその結論。本記事は背景・歴史・最新動向・コード例まで踏み込んで補足します。
| 観点 | Genkit | ADK |
|---|---|---|
| 主なユースケース | アプリへの生成 AI 機能組み込み(チャット、要約、RAG など) | 複数エージェントが協調するマルチエージェントシステム構築 |
| 対応言語 | Node.js (GA)、Go (GA)、Python (Beta)、Dart (Preview) | Python (GA)、Go (GA)、Java (GA)、TypeScript (GA) |
| 設計思想 | 開発者がフローを明示的に制御 | LLM がエージェント間の委譲を動的に決定 |
| デプロイ先 | Cloud Run、GKE、Vercel など任意の環境 | 任意の環境、Gemini Enterprise Agent Platform との統合が深い |
どちらを選ぶべきかは、解決したい問題の複雑さとチームが得意な言語によって決まります。両者は統合されておらず、独立した OSS フレームワークとして並走しています。
フレームワークの概要
Section titled “フレームワークの概要”Genkit
Section titled “Genkit”Genkit は、アプリケーションへの AI 機能組み込みをシンプルにするためのフレームワークです。
元々は Firebase チームによって開発されましたが、Google の再編成を経て独立した製品となり、現在は Flutter、Dart、Go などと同じ開発者プラットフォームチームに所属しています。
プラグインやテンプレートを活用して多様な生成 AI モデルを統合し、迅速に AI 機能を構築できます。
主な特徴:
- 対応言語:
- Node.js(2025 年 2 月 GA)
- Go(2025 年 9 月 GA)
- Python(2026 年 2 月から Beta)
- Dart(Preview)
- Java(コミュニティ実装
genkit-ai/genkit-java、1.0.0-SNAPSHOT で開発中)
- ランタイム: Cloud Run、GKE、Vercel、オンプレなど任意の環境にデプロイ可能
- モデルサポート: Gemini、OpenAI、Anthropic Claude、Ollama など(プラグイン経由)
- 開発体験: ローカル Developer UI でプロンプトテスト、ステップごとのトレース、スキーマ検証
- マルチエージェント: プロンプトをツールとして扱うパターンで Beta サポート
- Middleware: Generate / Model / Tool の 3 レイヤで横断的な拡張(ガードレール、キャッシュ、リトライ、HITL 承認など)。2026 年 5 月正式発表、TypeScript / Go / Dart で利用可能(Python は予定)
また、Genkit Dart の開発も活発に進められており、Dart 向けフル Genkit SDK として進化しています。モデルプラグイン(genkit_google_genai、genkit_firebase_ai)、フロー・ツール定義、genkit_shelf によるサーバーサイド HTTP ホスティングを提供し、Node.js・Go SDK と同等の機能を備えています。サーバーサイド Dart と Flutter の両方から利用可能です。
Agent Development Kit(ADK)
Section titled “Agent Development Kit(ADK)”ADK は、高度な AI エージェントシステムの開発に特化したツールキットです。複数のエージェント間の協調動作や外部ツール連携を含む、複雑なマルチエージェントシナリオに対応できる基盤を提供します。
主な特徴:
- 対応言語:
- Python(2025 年 5 月 GA、約 10 ヶ月先行。v2.0 は Python 限定で Beta phase)
- Go(2026 年 3 月 v1.0 stable)
- Java(2026 年 3 月 v1.0 stable)
- TypeScript(2026 年 4 月 v1.0 stable)
- ランタイム: Cloud Run、GKE など任意のコンテナ環境にデプロイ可能。Gemini Enterprise Agent Platform(2026 年 4 月の Cloud Next 26 で Vertex AI からリブランド・拡張された後継プラットフォーム)の Agent Runtime(旧 Agent Engine)との統合が深い
- モデルサポート: Agent Platform 経由の Gemini、LiteLLM アダプタで他モデルも対応
- 開発体験: ローカル開発 UI(
adk web)、CLI 評価ツール(adk eval) - マルチエージェント: Agent、Tool、Sub-agent、ワークフローオーケストレーションのファーストクラスサポート
- エンタープライズ連携: ApplicationIntegrationToolset で Salesforce、ServiceNow、JIRA、SAP など 100 以上のコネクタを提供。さらに Vertex AI Search Tool、UrlContextTool、SkillToolset、Spanner Admin Toolset、Apigee モデル連携などのビルトインツール群が追加
Renault Group、Box、Revionics などの企業が ADK を活用したシステムを構築しています。
両者は競合ではなく、レイヤーが違います。
Google の Genkit エンジニアは、Genkit の役割を次のようにまとめています:
Genkit は「低レイヤー」の AI API にフォーカスしています:モデル、ツール、プロンプト、MCP、そして o11y ツールやプレイグラウンドなどの開発者ツール。Genkit では LLM と直接やり取りでき、デフォルトではハードコードされたプロンプトがなく、o11y ツールでエージェントが何をしているかを正確に確認できます。
この視点から整理すると:
- Genkit は低レイヤーの AI フレームワーク。モデル、ツール、プロンプト、MCP、o11y にフォーカス。単体でエージェントを構築することも、高レイヤーのフレームワークの基盤として使うこともできます。
- ADK は高レイヤーのエージェントフレームワーク。セッション管理、メモリ、評価、Gemini Enterprise Agent Platform との統合など、バッテリー同梱の機能を備えています。
Genkit チームは Discord でも「ADK はエージェント構築専用で multi-agent システムの組み方に明確な方針を持つ。Genkit は GenAI 構築のための汎用ツールキットで、エージェントの具体的な作り方には強い意見を持たない」と整理しています。要するに Genkit は柔軟、ADK はマルチエージェント特化と棲み分けがされていて、要件に応じて選びます。
| 観点 | Genkit | ADK |
|---|---|---|
| 主なユースケース | アプリへの生成 AI 機能組み込み全般(チャットボット、要約、推薦、RAG など) | 複数エージェントが協調する複雑なエージェントシステム構築 |
| 言語 | Node.js (GA)、Go (GA)、Python (Beta)、Dart (Preview) | Python (GA)、Go (GA)、Java (GA)、TypeScript (GA) |
| 開発スタイル | コードで定義したフロー、明示的な制御 | エージェント中心、LLM 駆動のオーケストレーション |
| マルチエージェント | Beta(プロンプトをツール化するパターン)、Middleware で横断的拡張 | ファーストクラス(Sequential / Parallel / Loop、v2.0 Beta で graph-based Workflow) |
| デプロイ | Cloud Run、GKE、Vercel など任意の環境 | 任意の環境、Gemini Enterprise Agent Platform / Agent Runtime との相性が最も良い |
| モデル柔軟性 | Genkit プラグインで Gemini / OpenAI / Anthropic / Ollama などを切替 | Agent Platform 経由の Gemini が中心、LiteLLM で他ベンダーも対応 |
| 成熟度 | Node GA(2025-02)、Go GA(2025-09)、Python Beta(2026-02〜)、Dart Preview | Python GA(2025-05)、Go / Java / TS が 2026-03〜04 に v1.0 stable、Python v2.0 Beta |
アーキテクチャパターン
Section titled “アーキテクチャパターン”Genkit: フローオーケストレーション
Section titled “Genkit: フローオーケストレーション”Genkit は、開発者が明示的にワークフロー(フロー)を定義するスタイルを取ります。
コード上で「LLM A でテキスト生成 → 結果を加工 → 関数 B を実行 → …」といった処理手順を記述します。Genkit は ai.generate() のような統一 API や、構造化データ出力、プラグイン関数呼び出し(Function Calling)といった機能を提供し、これらのステップを簡潔に実装しやすくなっています。
TypeScript の例:
import { genkit } from 'genkit';import { googleAI } from '@genkit-ai/google-genai';
const ai = genkit({ plugins: [googleAI()] });
const { text } = await ai.generate({ model: googleAI.model('gemini-2.5-flash'), prompt: 'Why is Genkit awesome?'});Go の例:
import ( "context" "github.com/firebase/genkit/go/ai" "github.com/firebase/genkit/go/plugins/googlegenai")
func main() { ctx := context.Background() g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{}))
resp, _ := genkit.Generate(ctx, g, ai.WithModel(googlegenai.GoogleAIModel("gemini-2.5-flash")), ai.WithPrompt("Why is Genkit awesome?"), ) fmt.Println(resp.Text())}Function Calling を使えば、LLM が必要に応じて定義された関数を呼び出す半自律的なエージェントのような振る舞いも実現できますが、基本的には開発者がフロー全体を制御します。
ADK: エージェント中心のオーケストレーション
Section titled “ADK: エージェント中心のオーケストレーション”ADK はエージェント指向のアーキテクチャを採用しています。
開発者はエージェント(Agent クラス)を定義し、それぞれに役割(指示プロンプト)と利用可能なツールやサブエージェントを設定します。
ADK ではサブエージェントの連携に複数のパターンがあります:
sub_agentsパターン: LLM が自動的にtransfer_to_agentを生成してサブエージェントに制御を移譲AgentToolパターン: サブエージェントをツールとしてラップし、ルートエージェントから呼び出す
以下は AgentTool パターンの例です。サブエージェントが独自のツールを持ち、ルートエージェントから「ツール」として呼び出されます。
from google.adk.agents import Agentfrom google.adk.tools import AgentTool, ToolContext
# --- Sub-agent 1: Goal Setting ---def get_user_goal(tool_context: ToolContext) -> dict: """Retrieves the user's current health goal from session state.""" goal = tool_context.state.get("health_goal") if goal is None: return {"status": "not_set", "message": "No goal set yet."} return {"status": "success", "health_goal": goal}
def set_user_goal(tool_context: ToolContext, goal_type: str, description: str) -> dict: """Sets the user's health goal in session state.""" tool_context.state["health_goal"] = {"goal_type": goal_type, "description": description} return {"status": "success", "message": f"Goal set: {goal_type}"}
goal_setting_agent = Agent( name="goal_setting_agent", description="Handles health goal setting and retrieval.", instruction="You help users set and check their health goals.", tools=[get_user_goal, set_user_goal],)
# --- Sub-agent 2: Meal Advisor ---meal_advisor_agent = Agent( model="gemini-2.5-flash", name="meal_advisor_agent", description="Provides meal recommendations based on user goals.", instruction="You suggest meals considering the user's health goals and calorie targets.",)
# --- Root Agent ---root_agent = Agent( model="gemini-2.5-flash", name="health_advisor", description="Main health advisor agent", instruction="""You are a health advisor assistant.
## Your Role- Understand user requests and delegate to appropriate sub-agents- Use goal_setting_agent for goal-related queries- Use meal_advisor_agent for meal recommendations
## Direct Response Cases- Greetings: respond directly- General health questions: respond directly""", tools=[ AgentTool(agent=goal_setting_agent), AgentTool(agent=meal_advisor_agent), ],)ルートエージェントは LLM の判断に基づいて、適切なサブエージェントに処理を委譲します。各サブエージェントは独自のツールと指示を持ち、専門的なタスクを処理します。
また、ワークフロー制御用のエージェントも用意されています:
- SequentialAgent: エージェントを順番に実行
- ParallelAgent: エージェントを並行実行
- LoopAgent: 条件を満たすまで繰り返し
ADK 2.0(Beta): graph ベースの Workflow ランタイム
Section titled “ADK 2.0(Beta): graph ベースの Workflow ランタイム”2026 年 4 月、ADK は v2.0 Beta フェーズに入りました。v2.0 の中心は graph-based Workflow ランタイムで、タスクのルーティング、fan-out / fan-in、ループ、リトライ、HITL(human-in-the-loop)承認、nested workflow を graph として明示的に記述できます。Task API を組み合わせると、エージェント間の委譲を input / output contract で型付けでき、Sequential / Parallel / Loop よりも複雑な分岐を扱いやすくなります。
ただし v2.0 は Python 限定で、執筆時点では Beta phase。v1.x は production 継続で、v2.0 と v1.x は同じプロセス内で混在可能(互換性は維持されている)。本番ワークロードを今すぐ v2.0 に寄せる必要はなく、Sequential / Parallel / Loop で書ける範囲なら v1.x のままで問題ありません。複雑な graph オーケストレーションが必要になったときに、選択肢として v2.0 を検討する位置づけになります。
| シナリオ/条件 | 推奨 | 理由 |
|---|---|---|
| シンプルな AI 機能を迅速にアプリに組み込みたい | Genkit | チャットボット、要約、RAG など。開発スピード重視の場合 |
| 複数の専門エージェントが協調する複雑な AI システム | ADK | 複数データソース/ツール利用、役割分担が必要な場合 |
| 開発チームが TypeScript / JavaScript 中心 | Genkit | Node.js に対応、Web フロントエンド開発の経験を活かせる |
| 開発チームが Python 中心 | ADK | 機械学習やデータ処理の経験を活かせる。Python が GA |
| 開発チームが Go 中心 | どちらも可 | Genkit Go は GA、ADK Go も利用可能 |
| Google Cloud データ/企業システムと連携したい | ADK | BigQuery、Salesforce、ServiceNow など豊富なコネクタ |
| 将来的に様々な AI ユースケースに対応したい | Genkit | プラグインによる拡張性が高く、柔軟に対応できる |
言語による選択
Section titled “言語による選択”ADK が Python、TypeScript、Go、Java をサポートし、Genkit が Node.js、Go、Python、Dart をサポートする今、言語の好みだけで決まることは少なくなりました。
ただし、成熟度には差があります:
| 言語 | Genkit | ADK |
|---|---|---|
| TypeScript/Node.js | GA | v1.0 stable(2026-04) |
| Go | GA | v1.0 stable(2026-03) |
| Python | Beta(2026-02〜) | v1.x GA + v2.0 Beta |
| Dart | Preview | 非サポート |
| Java | コミュニティ実装(1.0.0-SNAPSHOT) | v1.0 stable(2026-03) |
チームが Python を書いていて本番環境での安定性を最優先するなら、ADK(v1.x が 2025-05 から GA で実績がある)が自然な選択です。複雑な graph オーケストレーションを試したい場合は v2.0 Beta も視野に入ります。Go で安定した AI ツールキットが欲しいなら、Genkit Go と ADK Go のどちらも v1.x stable で、ユースケース(アプリに AI / agentic 機能を埋める vs スタンドアロン multi-agent システムを組む)で決まります。Dart や Flutter でシステムを構築しているチームなら、Genkit Dart(Preview)が現実的な唯一の選択肢。Java は ADK の v1.0 stable が手堅く、Genkit Java も 1.0.0-SNAPSHOT で動いているので、Java で Genkit パターンを試したいなら覗いてみるのもありです。
開発ツールとの統合
Section titled “開発ツールとの統合”両者とも、AI 開発ツール(Gemini CLI、Claude Code、Codex 等)と組み合わせて自然言語からエージェント開発を進められる流れを整えてきています。
Genkit: Gemini CLI 向けに Genkit Extension が提供されています。MCP ツール経由でフロー実行・ドキュメント参照・トレース分析ができ、Genkit のパターンに沿ったコード生成も支援されます。導入手順は公式リポジトリを参照してください。
ADK: Agents CLI(Apache-2.0 ライセンスの OSS)が、ADK と組み合わせて使うスキャフォールディング / 評価 / デプロイ / observability の CLI として用意されています。scaffold、eval run、deploy、publish gemini-enterprise などのサブコマンドと、AI コーディングツールに読み込ませる 7 つの skill バンドルを提供します。インストール方法やセットアップは公式ドキュメントを参照してください。
どちらも、エージェント開発のワークフローを「ツールに任せる」方向に進めるアプローチで、構築するシステムの方向性(Genkit / ADK のどちらか)が決まった後で開発体験をさらに加速させたいときの選択肢になります。
学習パスと組み合わせパターン
Section titled “学習パスと組み合わせパターン”低レイヤーから高レイヤーへ
Section titled “低レイヤーから高レイヤーへ”Genkit コミュニティでよく共有される推奨事項があります。それは Anthropic の「Building effective agents」のガイダンスに従うことです。
特に学び始めのうちは、Genkit のような低レイヤーのツールキットから始めて、モデル、ツール、プロンプト、o11y を深く理解し、その後アプリケーションの要件に基づいて ADK のような高レイヤーのフレームワークを採用するのが理にかなっています。
この基礎があれば、ADK でも他のフレームワークでも対応できます。
ユースケースで分ける、その上で組み合わせる
Section titled “ユースケースで分ける、その上で組み合わせる”「補完的なレイヤー」と言うより、まずユースケースで分けるのが現在の公式の姿勢に近い。Genkit と ADK の使い分けについて、SNS ではこんな棲み分けがよく示されています:
Have an app (web, mobile, etc)? Want to add agentic features to it? Use Genkit!
Building complex, standalone, multi-agent systems? E.g. on GCPs Agent Platform? Use ADK.
- Genkit を選ぶとき: 既存アプリ(Web / モバイル / API バックエンド)に AI / agentic 機能を足したいケース。チャット、要約、RAG、ツール呼び出しなど。スタートが早く、アプリ開発者にとって扱いやすい
- ADK を選ぶとき: Agent Platform 上で複数エージェントが協調するスタンドアロンな複雑システム。コネクタ・ガバナンス・評価などエンタープライズ要件が前面に出るケース
「どっちも使いたい」場合は組み合わせも可能です。例えば Genkit で書いた API バックエンドから、別途デプロイした ADK エージェントを呼び出す構成。ただ最初から「組み合わせ前提」で設計する必要はなく、まずは自分のユースケースがどちら寄りかを見極めてから、必要に応じて橋渡しを考える順番で十分です。
Genkit と ADK は「どちらが良いか」ではなく、補完的なレイヤーとして捉えるのが実践的です。
| レイヤー | フレームワーク | フォーカス |
|---|---|---|
| 低レイヤー | Genkit | モデル、ツール、プロンプト、MCP、o11y |
| 高レイヤー | ADK | セッション管理、メモリ、評価、マルチエージェントオーケストレーション |
学び始めは Genkit で AI の基礎を理解し、要件が複雑になったら ADK を検討する。あるいは、Genkit を基盤として ADK を組み合わせる。この柔軟な選択肢があることが、Google の AI フレームワークエコシステムの強みです。