パート 1: Gemini CLI で Agent Skills をマスターするでは、Agent Skills がどのように Gemini CLI へと新機能を追加するのかを紹介しました。タスク固有の指示をエージェントに与えつつ、コンテキストをクリーンに保つ実践的な例として、experiment-analyst スキルを取り上げました。
今回は、スキル設計のコア原則を深掘りし、私が日常的に使っているスキルの実践例をいくつか紹介します。
Agent Skills とは#
パート1を見逃した方のために、簡単におさらいしておきましょう。Agent Skills は、コーディングエージェントに「ジャストインタイム(必要なときだけ)」の専門知識を提供するために設計されたオープンスタンダードです。専門知識が必要なタイミングでのみコンテキストへ追加される仕組みになっているため、いわゆるコンテキストの肥大化(context bloat)を防ぐことができます。この設計思想を専門用語では 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 生成テキストの AI っぽさ(スロップ)を排除する de-sloppify スキルを書いて(気を悪くしないでね)」
Gemini CLI は、スキルのボイラープレート(雛形)を出力する前に、いくつか細かい要件を確認してくることがあります。最近追加された ask_user ツール を使ってユーザーに対話的に質問してくれるのですが、実際にこれが動く様子は見ていてとても面白いです。
スキルを作るべきタイミング#
私の個人的なワークフローでは、スキルを作成する目的は主に2つあります。
- 自分独自のワークフローやプロセスを手順化するため(例:自分好みのコードレビューの手順、リポジトリの初期化方法、ブログ記事の品質評価など)
- 特定のツール、言語、技術に関する専門知識を付与するため(例:Genkit プロジェクトの構造と動かし方、ADK を使ったエージェント開発の流れなど)
ある意味で、スキルはスラッシュコマンド(私は MCP プロンプトとして保存することが多いです)とツールの中間に位置する概念だと言えます。スラッシュコマンドを作るときは「再現可能なプロセス(手順)」を定義したいのであり、ツールを作るときはモデルに「確定的(デターミニスティック)な実行手段」を持たせたいケースがほとんどです。スキルにはプロンプトとスクリプトの両方を含められるため、スクリプトにツールの役割を担わせることで、その両方をひとまとめに実現できます。
もちろん、スキルを拡張機能(Extension)としてパッケージ化する場合は、ツールを提供する MCP サーバーと一緒に配布されるケースも多いでしょう。スキルの定義内でその連携を活用し、MCP ツールが利用可能な場合にどう呼び出すかをモデルに教え込むことも可能です。
また、私がスキルを新規作成するタイミングも主に2パターンあります。
- モデルに思い通りの作業をさせるために、骨の折れる長いセッションをこなした直後(例:「今やった作業のノウハウを、次回以降も使えるようにスキルとしてまとめて」)
- 業務効率化に役立ちそうな新しいアイデアを思いついた瞬間(例:「AI の文章力を底上げするために de-sloppify スキルを作ろう」)
どちらのケースでも、スキルが一発で完璧に仕上がることはまずありません。実際に使いながら「これは役立つ」と確信できるまでブラッシュアップしていくか、あるいは一旦破棄して、課題への理解が深まるまで寝かせておくかのどちらかです。
次のセクションでは、私がこれまでに作成してきたスキルを具体的に見ていきましょう。
実践的な例#
私のリポジトリから4つのスキルを取り上げ、それらがどのように特定の課題を解決しているかを見ていきましょう。
1. latest-version#
このスキルは、LLM 全般がソフトウェア、ライブラリ、モデル、各種依存関係の 古いバージョン を使いたがる傾向に対する、純粋なフラストレーション から生まれました。ナレッジカットオフ(知識の期限)がある以上、仕方のないことだとは理解しています。それでも、エージェントが Gemini 3 ではなく gemini-1.5-pro を使おうとしたり、あまつさえ「未来のバージョンを幻覚(ハルシネーション)している」と 私の方を 責めてきたりすると、どうしてもイラッとしてしまいます。
このスキルは、各種レジストリ(npm、PyPI、Go Proxy)や公式ドキュメントに直接問い合わせることで、ファクトチェッカーとして機能します。以下は、その SKILL.md の抜粋です。
name: latest-version
description: >
The definitive real-time source of truth for software and model versions. Use this skill to bypass internal knowledge cutoffs...
## Core Mandate
**推測は絶対に禁止。** ユーザーがパッケージのインストールや依存関係の追加を求めた場合は、必ず `latest.js` スクリプトを使って最新バージョンを確認すること。モデル内部の重み(学習データ)は何ヶ月も、あるいは何年も前のもので古いため、決して頼ってはならない。このプロンプトはまだ少し粗削りな部分がありますが、私のコードベースに非推奨の古いモデルが入り込むのを防ぐ上で、かなりの成果を上げています。
2. pyhd#
昨年 godoctor MCP サーバーを作ったとき、エージェントを使った Go 開発における究極のツール(科学に裏打ちされたもの! ^^)にしたいと考えました。当時はまだスキルという仕組みがなかったため、必要なツールをすべて MCP サーバーに詰め込むのが自然なアプローチでした。しばらくの間、Python でも同じようなものを作ろうかと考えていましたが、バックログが山積みで優先度を下げざるを得ませんでした。
そんな折に Agent Skills と出会い、「MCP サーバーではなくスキルとして作ればいいのでは?」と思い立ちました。skill-creator のおかげで作成コストが非常に低く抑えられたため、pyhd(Python + PhD の造語で、“doctor” テーマを踏襲)を作ることにしたのです。
pyhd スキルには Python プロジェクト用の開発ワークフローが定義されており、適切で Pythonic なコードを維持するために、リンター兼フォーマッターである ruff を中心に据えています。
## Core Workflow
Python ファイルを編集する際は、**すべての** ファイル変更において **必ず** 次のサイクルに従うこと:
1. **Read & Understand**: ...
2. **Edit**: `smart_edit` や `replace` を使って変更を適用する。
3. **Sanitize (Ruff)**:
編集直後に、以下のコマンドを実行してフォーマットおよび lint エラーの自動修正を行う:
`uv run ruff check --fix <filename>`
`uv run ruff format <filename>`
4. **Verify**: テストを実行する...このスキルによって、Python ファイルの編集直後に必ず標準的な lint とフォーマットが実行されるようになり、初期段階でのミスを素早く検知できるようになりました。本格的な “pydoctor” を実装する時間が取れるまでは、これが私の Python 開発における定番スキルになっています。
3. find-examples#
特定のライブラリが実環境で実際にどう使われているかを知りたい場面はよくあります。find-examples スキルは、Python スクリプト(github_search.py)を使って GitHub 上を検索し、プロジェクトで使いたい依存関係の実際の使用コードを探し出します。モデルが架空の API をハルシネーションしてしまう問題に対処するために開発したスキルですが、ドキュメントや実例を少し参照させるだけで、精度は格段に向上します。
GitHub の公開検索のみを利用しているためパーソナルアクセストークン(PAT)は不要で、一般的な Google 検索よりも的確なコード例を拾ってこられる傾向があります。
### 1. Search for Repositories (Multi-Language)
`github_search.py` スクリプトを実行する。対象の言語であまりサンプルが見つからない場合は、SDK がサポートしている関連言語も追加して検索する。
### 4. Clone and Inspect
選択したリポジトリを `_examples` フォルダにクローンする。
クローン完了後、`list_files`、`smart_read`、`grep_search` などを使って関連する実装の詳細を調査する。また、マルチ言語対応(ポリグロット)の SDK 向けに、別言語でのコード例も探し出せる機能を追加しました。最近作ったばかりのスキルなのでまだ使い込んではいませんが、面白いユースケースの例として紹介しました。
4. de-sloppify#
このスキルは、AI 特有の典型的な文章パターン(いわゆる AI スロップ)をチェックするために使っています。語彙の選択、文の長さのバリエーション、構造の反復パターンなどに基づいて「スロップスコア(slop score)」を算出するスクリプトが含まれています。
NLTK を使って品詞タグ付けを行い、無修正のモデル出力によく見られる名詞の過密使用や受動態の多用を検出します。スクリプトはローカル環境で実行され、検出された具体的なマーカーをレポートとして出力してくれます。
まとめ#
スキルが一発で完璧に仕上がることは滅多にありません。スキルを磨く最も効果的な方法は、実際の開発で使い倒すことです。エージェントが特定のステップでつまずいていたり、見当違いのコンテキストを引っ張ってきたりしているのを見かけたら、再び skill-creator を使ってスキルを更新するよう依頼してみてください。
ぜひ普段のワークフローを振り返ってみてください。AI に毎回同じルールや前提を言い聞かせているタスクはありませんか? それこそが、あなたの次のカスタムスキルにうってつけの候補です。
自分だけのスキルを作る準備はできましたか? まずは 公式ドキュメント で基本をチェックし、アイデアのヒントが必要なら GitHub の danicat/skills リポジトリ も覗いてみてください。
Happy coding!
Dani =^.^=




