なぜ今ADK for Kotlinなのか
AIエージェントが開発の中心になるにつれて、その実装を支えるフレームワークも急速に進化しています。これまでPythonやJava、Goでのみ利用可能だったAgent Development Kitが、ついにKotlinをサポートしました。特にAndroid開発者にとっては朗報です。ADK for Androidも同時にリリースされ、デバイス上で動作するオンデバイスAIエージェントを構築できるようになりました。
すでにGemini Nanoは1億4000万台以上のAndroidデバイスで利用可能になり、クラウドに依存せずに強力なAI機能を提供できる環境が整っています。ADKは複雑なオーケストレーション、コンテキスト管理、エラーハンドリングを自動で処理するため、開発者はビジネスロジックに集中できます。
本記事では、ADK for Kotlinの始め方と、Androidアプリへの統合パターンを実際のコードとともに解説します。
![]()
ADK for Kotlinを始める
1. 依存関係の追加
ADK for Kotlinを使用するには、build.gradle.ktsファイルに以下の依存関係を追加してください。
// build.gradle.kts
dependencies {
// ADKコアモジュール
implementation("com.google.adk:google-adk-kotlin-core:0.1.0")
// @AdkToolsアノテーション生成のためのKSPプロセッサ
ksp("com.google.adk:google-adk-kotlin-processor:0.1.0")
}
2. エージェントの定義
エージェントはLlmAgentクラスで定義します。以下は旅行アシスタントの例です。
val orchestrator = LlmAgent(
name = "genius_orchestrator",
model = Gemini(apiKey = apiKey, name = MODEL_NAME),
instruction = Instruction("""
あなたは旅行の天才アシスタントです。
まず、`get_trip_details`ツールを使って旅行の全行程を取得し、
予定されているイベントを理解してください。
その後、旅行の状態に合わせてウェルカムメッセージを返してください。
""".trimIndent()),
tools = listOf(GetTripDetailsTool(tripId)),
subAgents = listOf(carRentalPipeline, hotelPipeline),
disallowTransferToPeers = true,
disallowTransferToParent = true,
)
3. ツールの定義
LLMに追加機能を提供するために、@Toolと@Paramアノテーションでツールを定義します。例として、銀河ヒッチハイク・ガイドに登場する「不可能確率ドライブ」サービスを作成します。
class ImprobabilityDriveService {
/** 特定のイベントの不可能確率を計算します。 */
@Tool
fun calculateImprobability(
@Param("計算するイベント(例: 'ティーカップが空中に現れる')")
event: String
): String {
return "'$event'の不可能確率は約42:1です。"
}
}
このツールを使用するサブエージェントを作成します。
val heartOfGoldAgent = LlmAgent(
name = "HeartOfGold",
description = "銀河船のコンピューター。不可能確率ドライブのクエリを処理します。",
model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
instruction = Instruction("""
あなたはHeart of Goldの船内コンピューターです。明るく、親切で、少しうるさい存在です。
無限不可能確率ドライブにアクセスできます。
自分に関する質問には事実を交えつつ、ユーモアを忘れずに。
""".trimIndent()),
tools = ImprobabilityDriveService().generatedTools()
)
このサブエージェントをルートエージェントに接続します。
val rootAgent = LlmAgent(
name = "MissionControl",
description = "宇宙関連クエリの中央ルーター。HeartOfGoldにルーティングします。",
subAgents = listOf(heartOfGoldAgent),
model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
instruction = Instruction("""
あなたはMission Controlです。すべての通信のハブです。
ユーザーのクエリを最も適切なエージェントにルーティングするのが主な仕事です。
- 不可能確率、無限不可能確率ドライブ、Heart of Goldに関する質問は`HeartOfGold`に転送してください。
- それ以外は、プロフェッショナルだがストレスフルなペルソナで直接応答してください。
""".trimIndent())
)
4. Androidアプリへの統合
Androidアプリでは、google-adk-kotlin-core-android依存関係を追加します。
// build.gradle.kts
implementation("com.google.adk:google-adk-kotlin-core-android:0.1.0")
このモジュールはML Kit GenAI APIとクラウドGeminiをデフォルトでサポートします。クラウドオーケストレーターが必要なときに、オンデバイスのサブエージェントにタスクを委譲するハイブリッド構造を簡単に構築できます。

注意点とヒント
- バージョン安定性: 現在0.1.0は実験的なバージョンです。APIが変更される可能性があるため、プロダクション適用前にリリースノートを必ず確認してください。
- オンデバイスモデルの選択: Gemini Nanoはデバイス性能によって動作が異なる場合があります。低スペック端末ではモデルを直接選択するか、クラウドモデルにフォールバックする戦略を検討してください。
- プライバシー強化: オンデバイスエージェントは機密データをデバイス外に送信しないため、金融・医療などプライバシーが重要なドメインで特に有用です。
- オーケストレーションコスト: クラウドオーケストレーターを使用するとAPI呼び出しコストが発生します。オンデバイスで処理できるタスクは可能な限りローカルで処理するよう設計するのが良いでしょう。
日本市場での適用文脈
日本のモバイルサービスでは、ユーザー体験とプライバシー保護の両立が求められることが多いです。例えば、銀行アプリで個人の資産情報を分析するAIアシスタントを作る場合、機密データをクラウドに送信せずにオンデバイスで処理できる点は大きな強みです。また、オフライン環境でも基本的なAI機能を提供できるため、通信が不安定な状況でもサービス品質を維持できます。

まとめ
ADK for Kotlinは、Android開発者にとってAIエージェント構築の参入障壁を下げてくれる頼もしいフレームワークです。シンプルな設定でツールやサブエージェントを組み合わせ、複雑なタスクを自動化できます。まだ初期バージョンですが、今後の発展可能性は非常に大きいと言えるでしょう。
次のステップとして、公式GitHubリポジトリでデモを確認し、実際に簡単なエージェントを作成してみることをお勧めします。また、AIエージェントを開発する際には、フィードバックループの重要性を理解することが重要です。予測可能な結果を生み出すためには、エージェントの行動を継続的に観察し、改善するプロセスが不可欠です。
最後に、大規模システムにAIエージェントを適用する際は、サンタンデールのプラットフォームエンジニアリング事例のように、プラットフォームレベルでのアプローチが重要です。インフラ構築にかかる時間を短縮し、反復作業を自動化する文化がエージェント導入の成功を左右します。
ADK for Kotlinを使って、あなただけのスマートなAIエージェントをぜひ作ってみてください。質問があればコメントで共有してください。