📖

Google ADK for Go で作る AI エージェント

本記事は Google Cloud Japan Advent Calendar 2025 2 日目の記事です。

12月といえばアドベントカレンダーの季節ですね!
今年は AI や LLM (Large Language Model) 関連の技術が大きく飛躍した年でもありました。

そしてついに! Google から待望の Go 言語版 Agent Development Kit (ADK) が公開されました!
Gopher の皆さん、お待たせしました。これで Go でネイティブに、かつ Google 推奨のプラクティスに沿って AI エージェントをバリバリ開発できます。

今回は、この ADK for Go について紹介し、実際に簡単なエージェントを作ってみたいと思います。

Agent Development Kit (ADK) とは?

Agent Development Kit (ADK) は、AI エージェントを構築、評価、デプロイするためのオープンソースのフレームワークです。
「Code-first」を掲げており、ソフトウェアエンジニアリングの原則を AI エージェント開発に適用することを目指しています。

主な特徴は以下の通りです:

  • Idiomatic Go: Go 言語の強み(並行処理、パフォーマンス、型安全性)を活かした設計。
  • Rich Tool Ecosystem: 定義済みのツールを使ったり、独自の関数をツールとして統合したりすることが容易。
  • Modular Multi-Agent Systems: 複数の専門的なエージェントを組み合わせて、スケーラブルなシステムを構築可能。
  • Deploy Anywhere: Cloud Run などのクラウドネイティブ環境へのデプロイを強力にサポート。

特に Go 言語でバックエンド開発を行っているエンジニアにとって、使い慣れた言語で高度な AI エージェントを記述できるのは大きな魅力です。

LangChain との比較:なぜ ADK なのか?

AI エージェント開発といえば LangChain が有名ですが、ADK for Go には以下のようなメリットがあります。

  1. Go ネイティブな設計 (Idiomatic Go)
    LangChain の Go 版(LangChainGo)もありますが、オリジナルは Python であり、構造が Python の仕様に引きずられることがあります。ADK for Go は最初から Go のために設計されているため、context の扱いやエラーハンドリング、並行処理などが非常に自然に記述できます。

  2. Code-first vs Configuration-first
    LangChain は「Chain」という抽象化を用いて、設定ファイルのようにロジックを組むことが多いですが、複雑になるとデバッグが難しくなりがちです。ADK は「Code-first」を掲げており、通常の Go のコードとしてロジックを記述します。これにより、可読性が高く、テストも書きやすくなります。

  3. Tool 定義の容易さ
    Go の関数をそのまま Tool としてエージェントに渡す仕組みが洗練されています。型安全性を保ちながら、外部 API との連携などをスムーズに実装できます。

早速使ってみよう

それでは、実際に ADK for Go を使って、簡単なエージェントを作成してみましょう。

インストール

まずはプロジェクトを作成し、ADK をインストールします。

mkdir my-agent
cd my-agent
go mod init my-agent
go get google.golang.org/adk

エージェントの実装

今回は、Google 検索を使って都市の時間を教えてくれる「Hello Time Agent」を作ってみます。
main.go を作成し、以下のコードを記述します。

package main

import (
	"context"
	"log"
	"os"

	"google.golang.org/adk/agent"
	"google.golang.org/adk/agent/llmagent"
	"google.golang.org/adk/cmd/launcher"
	"google.golang.org/adk/cmd/launcher/full"
	"google.golang.org/adk/model/gemini"
	"google.golang.org/adk/tool"
	"google.golang.org/adk/tool/geminitool"
	"google.golang.org/genai"
)

func main() {
	ctx := context.Background()

	// 1. Gemini モデルの初期化 (Vertex AI)
	// Google Cloud の Vertex AI を使用します。
	// 環境変数 GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION が設定されているか、
	// 以下のコードで直接指定してください。
	model, err := gemini.NewModel(ctx, "gemini-3-pro-preview", &genai.ClientConfig{
		Project:  os.Getenv("GOOGLE_CLOUD_PROJECT"),  // GCP プロジェクト ID
		Location: "us-central1",                      // リージョン (例: us-central1, asia-northeast1)
		Backend:  genai.BackendVertexAI,              // Vertex AI を明示的に指定
	})
	if err != nil {
		log.Fatalf("Failed to create model: %v", err)
	}

	// 2. エージェントの定義
	// Google 検索ツールを持たせたエージェントを作成します
	timeAgent, err := llmagent.New(llmagent.Config{
		Name:        "hello_time_agent",
		Model:       model,
		Description: "Tells the current time in a specified city.",
		Instruction: "You are a helpful assistant that tells the current time in a city.",
		Tools: []tool.Tool{
			geminitool.GoogleSearch{}, // Google 検索ツール
		},
	})
	if err != nil {
		log.Fatalf("Failed to create agent: %v", err)
	}

	// 3. ランチャーの設定と実行
	config := &launcher.Config{
		AgentLoader: agent.NewSingleLoader(timeAgent),
	}

	l := full.NewLauncher()
	if err = l.Execute(ctx, config, os.Args[1:]); err != nil {
		log.Fatalf("Run failed: %v\n\n%s", err, l.CommandLineSyntax())
	}
}

コードの解説

  1. モデルの初期化: gemini.NewModel を使って Gemini モデルを初期化します。ここでは Vertex AI をバックエンドとして使用するため、ProjectLocation を指定しています。これにより、エンタープライズグレードの信頼性とセキュリティで Gemini を利用できます。
  2. エージェントの定義: llmagent.New でエージェントを作成します。
    • Instruction: エージェントへの指示(プロンプト)を記述します。
    • Tools: エージェントが使用できるツールを指定します。ここでは geminitool.GoogleSearch{} を渡すことで、エージェントが Google 検索を行えるようにしています。
  3. ランチャーの実行: launcher パッケージを使ってエージェントを実行します。これにより、CLI や Web インターフェースでエージェントと対話するための基盤が提供されます。

実行方法

実行する前に、Google Cloud プロジェクトの設定を確認し、認証を通しておきます。

# Google Cloud SDK (gcloud) でログイン
gcloud auth application-default login

# 環境変数の設定
export GOOGLE_CLOUD_PROJECT="your-project-id"

そして、以下のコマンドでエージェントを実行します。

go run main.go

実行すると、インタラクティブなセッションが開始されます(または設定によっては Web UI が立ち上がります)。
「東京の今の時間は?」と聞いてみると、エージェントは Google 検索を使って正確な時間を調べて答えてくれるはずです。

まとめ

Google ADK for Go を使うことで、Go 言語の堅牢さとパフォーマンスを活かした AI エージェント開発が可能になります。
特に、ツール(Function Calling)の統合や、マルチエージェントシステムの構築がコードベースで直感的に行える点が素晴らしいですね。

今回は簡単な例でしたが、ADK はもっと複雑なワークフローや評価システムも備えています。
興味を持たれた方は、ぜひ公式リポジトリやドキュメントをチェックしてみてください!

それでは、良いお年を!Happy Coding!

Google Cloud Japan

Discussion