はじめに
Googleが公開したエージェント開発キット「ADK(Agent Development Kit)」。その魅力の一つは、独自の機能を組み込める「カスタムスキル」の柔軟性にあります。
本記事では、ADKをDockerコンテナ上で起動し、Vertex AI(Gemini)と連携させて自作のカスタムスキルを動かすまでの検証プロセスを徹底解説。実装中に見えてきた「スキルの命名規則」の罠や、構成のポイントを詳しくシェアします。
1. プロジェクトの全体構成
ADKのカスタムスキルは、ディレクトリ単位で独立して管理できるのが特徴です。今回は「挨拶」と「計算」の2つのスキルを自作しました。
skill-test/
├── Dockerfile
├── docker-compose.yml
├── .env # Vertex AI等の環境設定
├── requirements.txt # 依存ライブラリ
├── {SERVICE_ACCOUNT_JSON} # Google Cloud サービスアカウントキー
└── my_agent/
├── __init__.py
├── agent.py # ルートエージェント定義
└── skills/ # カスタムスキル格納用
├── greeting-skill/ # 挨拶スキル
│ ├── SKILL.md
│ └── references/
└── calculator-skill/ # 計算スキル
├── SKILL.md
└── references/
2.カスタムスキルの実装ルール
ADKにおけるスキルは、L1(メタデータ)、L2(指示)、L3(参照資料)の3層構造で定義します。SKILL.md の例 (greeting-skill、calculator-skill)ここで非常に重要なのが、name の命名規則です。
検証の結果、ハイフン(ケバブケース)を使用し、ディレクトリ名と一致させる必要があることがわかりました。
greeting-skill
---
name: greeting-skill
description: ユーザーへの挨拶、自己紹介、礼儀正しい会話を担当するスキル
---
# 挨拶スキル
このスキルは、ユーザーへの挨拶と自己紹介を担当します。
## 使い方
- ユーザーが「こんにちは」「おはよう」「はじめまして」などの挨拶をしたとき
- ユーザーがエージェントの説明を求めたとき
- 会話の開始時
## 応答ルール
1. 常に丁寧かつフレンドリーに応答する
2. 時間帯に応じた挨拶を使う(例: 朝→おはようございます)
3. ユーザーの名前が分かれば積極的に使う
4. 詳細なガイドは `references/greeting_guide.md` を参照
## サンプル応答
- 「こんにちは!今日もよろしくお願いします。何かお手伝いできることはありますか?」
- 「はじめまして!私はADKエージェントです。計算や挨拶など、様々なことでお手伝いできます。」
calculator-skill
---
name: calculator-skill
description: 四則演算や基本的な数値計算を行うスキル
---
# 計算スキル
このスキルは、数値の計算をサポートします。
## 対応する計算
- 四則演算 (足し算、引き算、掛け算、割り算)
- パーセント計算
- 単純な数式の評価
## 使い方
ユーザーが「計算して」「〇〇を足して」「〇〇 ÷ 〇〇は?」などを求めたとき。
## 応答ルール
1. 計算式を明示して見やすく示す
2. ゼロ除算などのエラーは丁寧に説明する
3. 計算結果だけでなく、途中の式も示す
## サンプル応答
入力: 「123 + 456 は?」
出力:
123 + 456 = 579
入力: 「1000円の20%は?」
出力:
1000 × 0.20 = 200円
3. Vertex AI連携とDocker化
ADKをコンテナ環境で動かすための設定です。
Dockerfile
FROM python:3.13-slim
# Vertex AI連携用の環境変数
ENV GOOGLE_GENAI_USE_VERTEXAI=TRUE
ENV GOOGLE_CLOUD_PROJECT={PROJECT_ID}←プロジェクトIDを入れる
ENV GOOGLE_CLOUD_LOCATION={LOCATION}
ENV GOOGLE_APPLICATION_CREDENTIALS=/app/{SERVICE_ACCOUNT_JSON}←サービスアカウントの情報を入れる
WORKDIR /app
# 依存関係のインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# ソースコードと認証情報のコピー
COPY .env .
COPY {SERVICE_ACCOUNT_JSON} .
COPY my_agent/ ./my_agent/
EXPOSE 8000
# ADK Web UIを起動
CMD ["adk", "web", "--port", "8000", "--host", "0.0.0.0"]
requirements.txt
google-adk>=0.5.0
google-cloud-bigquery>=3.0.0
python-dotenv>=1.0.0
4. エージェントの定義(Python)
agent.py で、読み込んだスキルをツールセットとしてエージェントに紐付けます。
import pathlib
from google.adk.agents import Agent
from google.adk.skills import load_skill_from_dir
from google.adk.tools import skill_toolset
# スキルのディレクトリパス
SKILLS_DIR = pathlib.Path(__file__).parent / "skills"
# ファイルベースのスキルを読み込む
greeting_skill = load_skill_from_dir(SKILLS_DIR / "greeting-skill")
calculator_skill = load_skill_from_dir(SKILLS_DIR / "calculator-skill")
# SkillToolsetにまとめる
my_skill_toolset = skill_toolset.SkillToolset(
skills=[greeting_skill, calculator_skill]
)
# ルートエージェントを定義
root_agent = Agent(
model="gemini-2.0-flash-001",
name="sample_skill_agent",
description="ADK Skillのサンプルエージェント。挨拶と計算スキルを持ちます。",
instruction="""
あなたは親切なアシスタントです。
以下のスキルを使ってユーザーの質問に答えてください:
- greeting-skill: 挨拶や自己紹介に関する質問
- calculator-skill: 数値計算に関する質問
""",
tools=[my_skill_toolset],
)
5. 検証
今回の検証により、ADKの SkillToolset がユーザーの入力内容から最適なカスタムスキルを自動的に選択し、実行するプロセスが正常に機能しました。
6. まとめ:ADKで独自のAI体験を
今回の検証で、Google ADKは「カスタムスキルの管理」において非常に優れた構造を持っていることが分かりました。
- スキルは独立したディレクトリで管理
- 命名規則(ケバブケース)を遵守
- Docker × Vertex AI でセキュアな運用が可能
これらを押さえることで、特定の業務に特化した強力なAIエージェントを短期間で構築できます。皆さんもぜひ、独自のカスタムスキル開発に挑戦してみてください!
最後に
最後まで読んでいただきありがとうございました。ADKとカスタムスキルを活用したエージェント開発は、今後のAI活用におけるスタンダードになる可能性を秘めています。この記事が、皆さんの開発プロジェクトのヒントになれば幸いです。
