以下が日本語訳です。原文の構造(Markdown、コードブロック、ペイロードブロック、リンク)はすべて維持し、コードセグメント内の人間向け文章は翻訳しています。また、CJK と英数字の間には適宜スペースを挿入し、読みやすい日本語にしています。
スキル設計: 5 つのエージェントパターン(コード付き)
はじめに
𝚂𝙺𝙸𝙻𝙻.𝚖𝚍 について語るとき、開発者はどうしてもフォーマットにこだわりがちです。YAML を正しく記述し、ディレクトリを構造化し、仕様に従うことばかり考えます。しかし、30 以上のエージェントツール(Claude Code、Gemini CLI、Cursor など)が同じレイアウトで標準化しつつある今、フォーマットの問題はほぼ過去のものです。
現在の課題はコンテンツ設計です。仕様書はスキルのパッケージ方法を説明していますが、その内部ロジックをどう構成するかについてはまったく指針を示していません。たとえば、FastAPI の規約をラップするスキルと、4 段階のドキュメントパイプラインを実行するスキルでは、𝕊𝕂𝕀𝕃𝕃.𝕞𝕕 ファイルの外見は同じでも動作はまったく異なります。
Anthropic のリポジトリから Vercel、Google の内部ガイドラインに至るまで、エコシステム全体でどのようにスキルが構築されているかを調査すると、開発者がエージェントを構築する際に役立つ 5 つのデザインパターンが見えてきます。
執筆者: @Saboo_Shubham_ および @lavinigam
この記事では、各パターンを実際の ADK コードとともに解説します。
- ツールラッパー: エージェントをあらゆるライブラリの即席エキスパートにする
- ジェネレーター: 再利用可能なテンプレートから構造化ドキュメントを生成する
- レビュアー: チェックリストに基づいてコードを重要度別に採点する
- インバージョン: エージェントが先にインタビューしてから行動する
- パイプライン: チェックポイント付きの厳格なマルチステップワークフローを強制する

パターン 1: ツールラッパー
ツールラッパーは、特定のライブラリに関するオンデマンドのコンテキストをエージェントに提供します。API の規約をシステムプロンプトにハードコードする代わりに、スキルとしてパッケージ化します。エージェントは、そのテクノロジーを実際に扱うときだけこのコンテキストを読み込みます。

これは最もシンプルな実装パターンです。𝕊𝕂𝕀𝕃𝕃.𝕞𝕕 ファイルはユーザーのプロンプト内の特定のライブラリキーワードをリッスンし、𝚛𝚎𝚏𝚎𝚛𝚎𝚗𝚌𝚎𝚜/ ディレクトリから内部ドキュメントを動的に読み込み、それらのルールを絶対的な真実として適用します。このメカニズムこそ、チームの内部コーディングガイドラインや特定のフレームワークのベストプラクティスを、開発者のワークフローに直接配布するために使用するものです。
以下は、エージェントに FastAPI コードの書き方を教えるツールラッパーの例です。コードのレビューや作成を開始するときだけ 𝚌𝚘𝚗𝚟𝚎𝚗𝚝𝚒𝚘𝚗𝚜.𝚖𝚍 ファイルを読み込むよう、指示が明示的に指定されている点に注目してください。
1# skills/api-expert/SKILL.md2---3name: api-expert4description: FastAPI 開発のベストプラクティスと規約。FastAPI アプリケーション、REST API、Pydantic モデルの構築、レビュー、デバッグ時に使用します。5metadata:6 pattern: tool-wrapper7 domain: fastapi8---910あなたは FastAPI 開発のエキスパートです。以下の規約をユーザーのコードや質問に適用してください。1112## 基本規約1314'references/conventions.md' を読み込み、FastAPI のベストプラクティス完全版を参照してください。1516## コードレビュー時171. 規約リファレンスを読み込む182. 各規約に対してユーザーのコードをチェックする193. 違反があれば、該当するルールを引用し、修正方法を提案する2021## コード作成時221. 規約リファレンスを読み込む232. すべての規約を正確に守る243. すべての関数シグネチャに型アノテーションを付ける254. 依存性注入には Annotated スタイルを使用する
パターン 2: ジェネレーター
ツールラッパーが知識を適用するのに対し、ジェネレーターは一貫した出力を強制します。エージェントが実行のたびに異なるドキュメント構造を生成してしまう問題に悩んでいるなら、ジェネレーターがその解決策を提供します。穴埋めプロセスをオーケストレーションすることで、安定した出力を実現します。

このパターンは 2 つのオプショナルディレクトリを活用します。𝚊𝚜𝚜𝚎𝚝𝚜/ には出力テンプレートを、𝚛𝚎𝚏𝚎𝚛𝚎𝚗𝚌𝚎𝚜/ にはスタイルガイドを格納します。指示はプロジェクトマネージャーの役割を果たします。エージェントに対して、テンプレートの読み込み、スタイルガイドの参照、不足している変数のユーザーへの質問、そしてドキュメントの生成を指示します。これは、予測可能な API ドキュメントの生成、コミットメッセージの標準化、プロジェクトアーキテクチャの雛形作成などに実用的です。
以下のテクニカルレポート生成の例では、スキルファイル自体には実際のレイアウトや文法ルールは含まれていません。単にそれらのアセットの取得を調整し、エージェントにステップバイステップで実行させるだけです。
1# skills/report-generator/SKILL.md2---3name: report-generator4description: 構造化されたテクニカルレポートを Markdown で生成します。ユーザーがレポート、要約、分析ドキュメントの作成、執筆、下書きを依頼したときに使用します。5metadata:6 pattern: generator7 output-format: markdown8---910あなたはテクニカルレポートジェネレーターです。以下の手順を正確に実行してください。1112ステップ 1: 'references/style-guide.md' を読み込み、トーンとフォーマットルールを確認する。1314ステップ 2: 'assets/report-template.md' を読み込み、出力に必要な構造を確認する。1516ステップ 3: テンプレートを埋めるために不足している情報をユーザーに質問する。17- トピックまたは主題18- 主要な発見やデータポイント19- 対象読者(技術者、経営層、一般)2021ステップ 4: スタイルガイドのルールに従ってテンプレートを埋める。テンプレート内のすべてのセクションが出力に含まれている必要がある。2223ステップ 5: 完成したレポートを 1 つの Markdown ドキュメントとして返す。
パターン 3: レビュアー
レビュアーパターンは、「何をチェックするか」と「どのようにチェックするか」を分離します。すべてのコードの臭いを詳細に記述した長いシステムプロンプトを書く代わりに、モジュール化されたルーブリックを 𝚛𝚎𝚏𝚎𝚛𝚎𝚗𝚌𝚎𝚜/𝚛𝚎𝚟𝚒𝚎𝚠-𝚌𝚑𝚎𝚌𝚔𝚕𝚒𝚜𝚝.𝚖𝚍 ファイルに保存します。

ユーザーがコードを送信すると、エージェントはこのチェックリストを読み込み、体系的に評価し、重要度ごとに結果をグループ化します。Python スタイルのチェックリストを OWASP セキュリティチェックリストに差し替えれば、まったく同じスキルインフラストラクチャを使って、まったく異なる専門的な監査を実行できます。これは、PR レビューの自動化や、人間がコードを確認する前に脆弱性を発見するのに非常に効果的です。
以下のコードレビュアースキルは、この分離を示しています。指示は静的なままですが、エージェントは外部のチェックリストから特定のレビュー基準を動的に読み込み、重要度に基づいた構造化された出力を強制します。
1# skills/code-reviewer/SKILL.md2---3name: code-reviewer4description: Python コードの品質、スタイル、一般的なバグをレビューします。ユーザーがコードレビューを依頼したり、コードに関するフィードバックを求めたり、コード監査を希望したときに使用します。5metadata:6 pattern: reviewer7 severity-levels: error,warning,info8---910あなたは Python コードレビュアーです。以下のレビュープロトコルを正確に実行してください。1112ステップ 1: 'references/review-checklist.md' を読み込み、完全なレビュー基準を確認する。1314ステップ 2: ユーザーのコードを注意深く読む。批判する前に、その目的を理解する。1516ステップ 3: チェックリストの各ルールをコードに適用する。違反が見つかった場合:17- 行番号(またはおおよその場所)を記録する18- 重要度を分類する: error(修正必須)、warning(修正推奨)、info(検討事項)19- 何が問題かだけでなく、なぜ問題なのかを説明する20- 修正コードを含む具体的な修正方法を提案する2122ステップ 4: 以下のセクションを含む構造化レビューを作成する:23- **要約**: コードの概要、全体的な品質評価24- **所見**: 重要度別にグループ化(error を最初に、次に warning、info)25- **スコア**: 1〜10 で評価し、簡潔な理由を添える26- **トップ 3 の推奨事項**: 最も影響力のある改善点
パターン 4: インバージョン
エージェントは本質的に推測してすぐに生成しようとします。インバージョンパターンはこの力学を逆転させます。ユーザーがプロンプトを駆動しエージェントが実行する代わりに、エージェントがインタビュアーとして振る舞います。

インバージョンは、明示的で交渉の余地のないゲート指示(例:「すべてのフェーズが完了するまで構築を開始してはいけません」)に依存して、エージェントにまずコンテキストを収集させます。構造化された質問を順番に投げかけ、各回答を待ってから次のフェーズに進みます。エージェントは、要件とデプロイ制約の全体像を把握するまで、最終出力の合成を拒否します。
実際の動作を見るには、このプロジェクトプランナースキルを参照してください。重要なのは、厳格なフェーズ分けと、すべてのユーザー回答が収集されるまでエージェントが最終計画の合成を行わないようにする明示的なゲートキーピングプロンプトです。
1# skills/project-planner/SKILL.md2---3name: project-planner4description: 構造化された質問を通じて要件を収集し、計画を立案します。ユーザーが「何か作りたい」「計画を手伝って」「システムを設計して」「新規プロジェクトを始めたい」と言ったときに使用します。5metadata:6 pattern: inversion7 interaction: multi-turn8---910あなたは構造化要件インタビューを実施しています。すべてのフェーズが完了するまで、構築や設計を開始してはいけません。1112## フェーズ 1 — 問題発見(一度に 1 つの質問をし、各回答を待つ)1314以下の質問を順番に行ってください。スキップしてはいけません。1516- Q1: 「このプロジェクトはユーザーにとってどのような問題を解決しますか?」17- Q2: 「主なユーザーは誰ですか? その技術レベルはどの程度ですか?」18- Q3: 「想定される規模はどのくらいですか?(1 日あたりのユーザー数、データ量、リクエストレート)」1920## フェーズ 2 — 技術的制約(フェーズ 1 が完全に回答された後にのみ)2122- Q4: 「どのデプロイ環境を使用しますか?」23- Q5: 「テクノロジースタックの要件や好みはありますか?」24- Q6: 「譲れない要件はありますか?(レイテンシ、稼働時間、コンプライアンス、予算)」2526## フェーズ 3 — 統合(すべての質問が回答された後にのみ)27281. 'assets/plan-template.md' を読み込み、出力フォーマットを確認する292. 収集した要件を使用して、テンプレートのすべてのセクションを埋める303. 完成した計画をユーザーに提示する314. 質問する: 「この計画はあなたの要件を正確に捉えていますか? 変更したい点はありますか?」325. ユーザーが確認するまでフィードバックに基づいて反復する
パターン 5: パイプライン
複雑なタスクでは、ステップのスキップや指示の無視は許されません。パイプラインパターンは、厳格なチェックポイントを伴う逐次ワークフローを強制します。
指示自体がワークフロー定義として機能します。明示的なダイヤモンドゲート条件(たとえば、docstring 生成から最終アセンブリに移る前にユーザーの承認を必要とするなど)を実装することで、パイプラインはエージェントが複雑なタスクを迂回して未検証の最終結果を提示するのを防ぎます。

このパターンはすべてのオプショナルディレクトリを活用し、異なるリファレンスファイルやテンプレートを必要な特定のステップでのみ取り込むことで、コンテキストウィンドウをクリーンに保ちます。
以下のドキュメントパイプラインの例では、明示的なゲート条件に注目してください。エージェントは、前のステップで生成された docstring をユーザーが確認するまで、アセンブリフェーズに進むことを明示的に禁止されています。
1# skills/doc-pipeline/SKILL.md2---3name: doc-pipeline4description: Python ソースコードからマルチステップパイプラインを通じて API ドキュメントを生成します。ユーザーがモジュールのドキュメント化、API ドキュメントの生成、コードからのドキュメント作成を依頼したときに使用します。5metadata:6 pattern: pipeline7 steps: "4"8---910あなたはドキュメント生成パイプラインを実行しています。各ステップを順番に実行してください。ステップをスキップしたり、ステップが失敗した場合に先に進んではいけません。1112## ステップ 1 — 解析と棚卸13ユーザーの Python コードを解析し、すべてのパブリッククラス、関数、定数を抽出します。棚卸し結果をチェックリストとして提示します。質問: 「これがドキュメント化したい完全なパブリック API ですか?」1415## ステップ 2 — Docstring の生成16docstring がない各関数に対して:17- 'references/docstring-style.md' を読み込み、必要なフォーマットを確認する18- スタイルガイドに正確に従って docstring を生成する19- 生成した各 docstring をユーザーの承認のために提示する20ユーザーが確認するまでステップ 3 に進んではいけません。2122## ステップ 3 — ドキュメントのアセンブリ23'assets/api-doc-template.md' を読み込み、出力構造を確認する。すべてのクラス、関数、docstring を 1 つの API リファレンスドキュメントにまとめる。2425## ステップ 4 — 品質チェック26'references/quality-checklist.md' に照らしてレビューする:27- すべてのパブリックシンボルがドキュメント化されているか28- すべてのパラメータに型と説明があるか29- 関数ごとに少なくとも 1 つの使用例があるか30結果を報告する。最終ドキュメントを提示する前に問題を修正する。
適切なエージェントスキルパターンの選び方
各パターンは異なる質問に答えます。以下の決定木を使用して、ユースケースに適したものを見つけてください。

そして最後に、パターンは合成可能です
これらのパターンは相互に排他的ではありません。合成可能です。
パイプラインスキルは、最後にレビュアーステップを含めて自身の作業を再チェックできます。ジェネレーターは、テンプレートを埋める前に必要な変数を収集するために、最初にインバージョンに依存できます。ADK の 𝚂𝚔𝚒𝚕𝚕𝚃𝚘𝚘𝚕𝚜𝚎𝚝 とプログレッシブディスクロージャのおかげで、エージェントは実行時に必要なパターンにのみコンテキストトークンを費やします。
複雑で壊れやすい指示を単一のシステムプロンプトに詰め込むのはやめましょう。ワークフローを分解し、適切な構造パターンを適用し、信頼性の高いエージェントを構築してください。
今日から始めましょう
Agent Skills 仕様はオープンソースであり、ADK でネイティブサポートされています。フォーマットのパッケージ方法はすでにご存じです。これでコンテンツの設計方法もわかりました。よりスマートなエージェントを Google Agent Development Kit で構築してください。





