gemini-agent-dev-support について
Gemini API を使うアプリの開発・デバッグ向けスキルです。SDK の選択、認証情報、ツール呼び出し、会話履歴、表示処理、検証報告の実装ルールを示します。
主な機能
- 01最新 SDK の使用要件
- 02サーバー側での認証情報管理
- 03IME に配慮したメッセージ送信
- 04モデルと時刻の扱い方
- 05ツール・履歴のエラー処理
- 06検証・変更報告の形式
活用シーン
- 01Gemini API 実装の計画
- 02アプリの API キー管理の確認
- 03ツール呼び出しと会話ループの構築
- 04実装確認と残存リスクの報告
MCP 対応
最新の SDK 仕様を確認するため、Docs MCP の `search_docs` を使うか `llms.txt` を参照するよう指示しています。MCP サーバーについての説明はありません。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ drgarbage/ ag-course-index --skill gemini-agent-dev-supportインストール後、Claude Code で/gemini-agent-dev-supportを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
Gemini API 開発スキル
1. 計画フェーズ(定義前)
実装計画を提案する前に、次のアーキテクチャ上の制約を確認し、認識を合わせる必要があります。
- メモリなし:最新の SDK 仕様を確認するには、Docs MCP の
search_docsを検索するか、llms.txtを参照してください。 - SDK のインポート:
@google/genai(JS/TS)またはgoogle-genai(Python)のみを厳密に使用してください。レガシー SDK はインポートしないでください。 - オリジン:Web アプリはローカル開発サーバー(例:
localhost)で実行する必要があります。file://での実行は絶対に避けてください。 - 認証情報ポリシー:API キーと認証情報は、サーバー側/バックエンドプロキシに保持してください。クライアント側のコードでキーを公開しないでください。
- 時間のグラウンディング:計画には、動的なシステム指示への時刻の注入を含める必要があります。
- モック禁止:機能しない要素は無効化するか非表示にしてください。本番コードの実行経路に静的なスタブ応答を含めないでください。
2. コーディングとデバッグのフェーズ(標準パターン)
生成する本番コードにコメントを追加せず、常に次のクリーンコードパターンを使用してください。
A. IME と送信イベント
input.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
if (e.isComposing || e.keyCode === 229) return;
if (!e.shiftKey) {
e.preventDefault();
handleSend();
}
}
});
- 送信後、ただちに
input.valueをクリアしてください。 loading === trueの間は、入力要素と送信ボタンを無効にしてください。input.value.trim() === ""の場合は送信を防いでください。- 音声入力:マイクの権限要求、UI の状態表示(リスニング中、エラー、再試行)、テキスト入力へのフォールバックを実際に実装してください。マイクのアイコンだけを表示するプレースホルダーを使用しないでください。
B. モデルの選択と時間の認識
new GoogleGenAI({}).models.list();
const systemInstruction = `Current local time: ${new Date().toLocaleString()}`;
// API Key Validation (verify by listing models via SDK)
async function validateApiKey(apiKey) {
try {
const ai = new GoogleGenAI({ apiKey });
await ai.models.list();
return true;
} catch {
return false;
}
}
C. ツールの組み合わせ(Gemini 2.x と 3.x)
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
function adaptGenerateContent(options) {
// call tools seperately
// call official tools seperately
}
function withOfficial(options) {
// append official tools
}
async function callGemini(modelName, userInput, tools = [], enableSearch = false) {
const options = {
model: modelName,
contents: userInput,
config: { tools }
}
return checkAllowToolCombine(modelName) ?
await adaptGenerateContent(options) :
await ai.model.generateContent(options);
}
- ツールのグラウンディング:
systemInstructionを動的に更新してください。検索が無効な場合は、次の文を追加してください:"Tool google_search is disabled. Do not attempt to call it."
D. ツールのエラー処理
{
"functionResponse": {
"name": "unknown_or_failed_tool",
"response": {
"error": "Error message for model auto-correction."
}
}
}
- ツールの実行エラーや不明なツール名に対して、直接スローしないでください。上記の構造化されたエラー JSON を返してください。
E. 履歴スキーマ
- 履歴オブジェクトに複数形の
functionCallsフィールドを含めないでください。個々のfunctionCallを、対応するfunctionResponseにマッピングしてください。 - ダイアログループでは、
thought、(interactions context 内の)signature、およびサーバー側のツールコンテキストを保持してください。
F. エラー処理と安全なレンダリング
{
"error": {
"code": "API_LIMIT_EXCEEDED",
"message": "Friendly error summary in Traditional Chinese.",
"details": {
"status": 429,
"reason": "rate_limit_exceeded",
"debug_info": "Debug stack trace without API keys."
}
}
}
import { marked } from 'marked';
import DOMPurify from 'dompurify';
const safetyHtml = DOMPurify.sanitize(marked.parse(markdown));
出力形式
検証ログ
- Docs MCP/スキルのクエリーリンク:[例:search_docs のクエリー]
- モデル:[例:gemini-2.5-flash]
チェックリスト
| ID | 項目 | 結果 | 根拠 |
|---|---|---|---|
| S1 | SDK/ツール | PASS / FAIL / N/A | [コード行またはテストのスクリーンショットリンク] |
コード変更
[file path]:[変更内容]
スモークテストの出力
[test execution logs]
残存リスク
- [未テストの機能、プロキシ、または「なし」]
再発防止
- [防止メカニズムを記述:Rule / Hook / Test / Skill / 「不要」とその理由]
コメント
Markdown 対応