前回の記事では、Agent Skills がどのように Gemini CLI に新機能を追加するのかを探りました。タスク固有の指示をエージェントに与えつつ、コンテキストをクリーンに保つ実践的な例として、experiment-analyst スキルを取り上げました。
今日は、スキル設計の核心的な原則を深く掘り下げ、私が日常的に使用しているスキルの実践的な例をいくつか見ていきましょう。
Agent Skills とは#
もし見逃してしまった方のために、パート1の簡単な要約をしましょう。Agent Skills は、コーディングエージェントに「ジャストインタイム」の専門知識を与えるために設計されたオープンスタンダードです。専門知識が必要なときにだけコンテキストに追加されるように設計されており、いわゆるコンテキストの肥大化を防ぐのに役立ちます。このための技術用語は Progressive Disclosure(段階的開示)です。コアとなる指示(SKILL.md)はできるだけ簡潔に保ち、詳細なリファレンスやスクリプトは別ファイルにして、必要なときにだけロードするようにします。
ディスク上では、スキルは SKILL.md ファイルと、オプションでバンドルされたリソースを含むフォルダです。
skill-name/
├── SKILL.md (必須: 名前、説明、コアとなる指示のみ)
└── バンドルされたリソース (オプション)
├── scripts/ (繰り返しタスク用の実行可能コード)
├── references/ (オンデマンドでロードされるドキュメント。例: API スキーマ)
└── assets/ (出力で使用されるテンプレートやバイナリファイル)skill-creator スキル#
スキルはいつでも手動で書くことができますが、Gemini CLI には skill-creator という組み込みのメタスキルが搭載されており、これを使うと非常に簡単になります。
このスキルを有効にするには、Gemini CLI にスキルの作成(またはリファクタリング)を依頼します。
「ソフトウェアパッケージの実際の最新バージョンを取得するための新しいスキルを作成して。バージョンの幻覚(ハルシネーション)をなくしたいの。」
「スキルの作成」に関連するリクエストは自動的に skill-creator をトリガーするはずですが、もしモデルの機嫌が悪い場合は、より明示的に指示することもできます。
「skill-creator を使って、AI が生成したテキストを de-sloppify(「AIっぽさ」を排除)するスキルを書いて。(悪く思わないでね)」
Gemini CLI は、スキルのボイラープレートを書く前に、いくつか詳細を尋ねてくるかもしれません。最近、ask_user ツールを使ってユーザーに質問することを学んだばかりですが、実際に動いているのを見るのはとてもクールです。
スキルをいつ作成するか#
私の個人的なワークフローでは、スキルには主に2つの用途があります。
- 自分の仕事に特化したプロセスを文書化するため(例:好みのコードレビューの方法、リポジトリの初期化方法、ブログ記事の評価方法など)
- 特定のツール、言語、技術に関する専門知識を追加するため(例:Genkit プロジェクトの仕組み、ADK を使ったエージェント開発の方法など)
ある意味で、スキルはスラッシュコマンド(私はよく MCP プロンプトとして保存しています)とツールの間の中間的な概念と考えることができます。スラッシュコマンドを構築するときは「繰り返しのプロセス」を作成したいのであり、ツールを作成するときはモデルに「決定論的な方法」を与えたいのです。スキルはプロンプトとスクリプトの両方を持つことができるため、スクリプトがツールの役割を果たすことで、その両方を実現できます。
もちろん、スキルを拡張機能の一部としてパッケージ化する場合、ツールを公開する MCP サーバーと一緒に提供される可能性が高いでしょう。スキルの定義内でその統合を活用し、利用可能であれば MCP ツールの使い方をモデルに教えることもできます。
また、スキルを作成する主なタイミングも2つあります。
- モデルに何かをさせるために、苦労して長いセッションを行った後(例:「今やったことの知識を、後で使えるようにスキルにまとめて」)
- 仕事の効率化に役立つと信じている新しいアイデアを思いついた直後(例:「執筆能力を向上させるために de-sloppify スキルを書こう」)
どちらの場合も、スキルは最初から完璧であることはありませんが、使い始めたらすぐに、価値があると確信できるまで洗練させるか、あるいはそのアイデアを捨てて、問題についてもっと学ぶまで保留にします。
次のセクションでは、私がこれまでに構築したスキルのいくつかを見てみましょう。
実践的な例#
私のリポジトリから4つのスキルを取り上げ、それらがどのように特定の課題を解決しているかを見てみましょう。
1. latest-version#
このスキルは、LLM が一般的にソフトウェア、ライブラリ、モデル、その他の依存関係の 古い バージョンを使用しがちであるという 純粋な不満 から生まれました。知識のカットオフ(学習データの期限)による自然な結果であることは分かっていますが、エージェントが Gemini 3 の代わりに gemini-1.5-pro を使おうとしたり、私が将来のバージョンを「幻覚」していると 私を 非難したりすると、やはりイライラしてしまいます。
このスキルは、レジストリ(npm、PyPI、Go Proxy)やドキュメントページに問い合わせることで、ファクトチェッカーとして機能します。以下は、その SKILL.md のスニペットです。
name: latest-version
description: >
ソフトウェアやモデルのバージョンのための、決定的なリアルタイムの真実の源(Source of Truth)。内部知識のカットオフを回避するためにこのスキルを使用してください...
## コアマンダト(主要な命令)
**推測するな。** ユーザーがパッケージのインストールや依存関係の追加を依頼したときは、必ず `latest.js` スクリプトを使用して最新バージョンを確認しなければなりません。内部の重み(学習データ)は数ヶ月、数年前の古くなっている可能性があるため、それらに頼らないでください。このプロンプトはまだ少し雑な感じがしますが、私のコードベースに非推奨のモデルが登場するのを防ぐという点では、中〜高い成功を収めています。
2. pyhd#
昨年 godoctor MCP サーバーを作成したとき、エージェントによる Go 開発のための 究極の ツール(科学に裏打ちされた! ^^)にしたいと考えました。当時はスキルがなかったので、必要なツールをすべて MCP サーバーに詰め込むのが自然に感じられました。しばらくの間、Python でも同様のものを作成しようと考えていましたが、バックログが多すぎて優先順位が下がっていました。
その後、スキルに出会い、「代わりにスキルにすればいいじゃない?」と考えました。skill-creator を使えば書く手間が非常に少なくなったので、pyhd(Python + PhD の組み合わせで、「doctor」のテーマを維持)を作成することにしました。
pyhd スキルには Python プロジェクトの開発ワークフローが含まれており、適切な「pythonic」なコードを確保するために、ruff リンターとフォーマッターを中心に据えています。
## コアワークフロー
Python ファイルを編集するときは、**すべての** ファイル修正において、必ずこのサイクルに従わなければなりません:
1. **読み取りと理解**: ...
2. **編集**: `smart_edit` または `replace` を使用して変更を適用する。
3. **サニタイズ (Ruff)**:
編集直後に、以下のコマンドを実行してフォーマットし、リンターの問題を修正する:
`uv run ruff check --fix <filename>`
`uv run ruff format <filename>`
4. **検証**: テストを実行する...このスキルは、すべての Python 編集の直後に標準的なリンターとフォーマッターを実行することを奨励し、初期の問題を捉えるのに役立っています。適切な「pydoctor」を実装する時間が見つかるまで、これが私の Python 開発における頼れるスキルです。
3. find-examples#
特定のライブラリが実際にどのように使われているかを知る必要があるときがあります。find-examples スキルは Python スクリプト(github_search.py)を使用して、プロジェクトで使用したい依存関係を使用しているコードを GitHub から検索します。モデルが API を幻覚させてしまう問題に対処するためにこのスキルを開発しましたが、ドキュメントや例を見るだけで、明らかに改善できるはずです。
GitHub 検索のみを使用するため、パーソナルアクセストークンは不要であり、Google 検索よりも優れたパフォーマンスを発揮する傾向があります。
### 1. リポジトリの検索(マルチランゲージ)
`github_search.py` スクリプトを実行する。ターゲット言語で多くの例が見つからない場合は、SDK がサポートしている関連言語を追加する。
### 4. クローンと検査
選択したリポジトリを `_examples` フォルダにクローンする。
クローンしたら、`list_files`、`smart_read`、または `grep_search` を使用して、関連する実装の詳細を見つける。また、多言語対応の SDK に対して、異なる言語で例を探そうとする機能も追加しました。これは最近作成したスキルの1つなので、まだあまりテストしていませんが、追加するのに興味深い例だと思いました。
4. de-sloppify#
このスキルは、AI 特有のライティングパターンをチェックするために使用しています。単語の選択、文の長さのバリエーション、構造の繰り返しに基づいて「スロップスコア(slop score)」を計算するスクリプトが含まれています。
NLTK を使用して品詞をタグ付けすることで、未編集のモデル出力によく見られる高い名詞密度や受動態を特定するのに役立ちます。スクリプトはローカルで実行され、見つかった特定のマーカーに関するレポートを提供します。
まとめ#
スキルが最初から完璧であることは稀です。スキルを磨くための効果的な方法は、実際の使用を通じて行うことです。エージェントがステップに苦労していたり、間違ったコンテキストを取得したりしていることに気づいたら、再び skill-creator を使ってスキルを更新するように依頼してください。
あなたの日常のワークフローを見直してみてください。AI に何度もルールを思い出させなければならないタスクは何ですか?それが、あなたの次のカスタムスキルの完璧な候補です。
最初のスキルを構築する準備はできましたか?公式ドキュメントをチェックして基本を学び、インスピレーションが必要な場合は GitHub の danicat/skills リポジトリを確認してください。
Happy coding!
Dani =^.^=




