はじめに
GitHub Copilot Chat には SKILL というカスタマイズ機能があります。
Markdownファイル1つを .github/skills/ に置くだけで、自分だけの専門AIエージェントを作れます。
この記事では、SKILLの中でも特に「ユーザーとの対話(インタラクティブな入力)」に注目します。
静的な指示を書くだけでなく、ユーザーに質問して情報を集めるSKILLを作ると、精度と使い勝手が大きく向上します。実際に動くデモSKILLも一緒に紹介するので、手を動かしながら読んでみてください。
この記事でわかること
- ✅ SKILLの基本構造(フロントマター+本文)
- ✅
argument-hintでユーザーに引数を促す方法 - ✅ 自然言語の指示だけで会話中の質問UIを出す方法
- ✅ 選択肢・自由入力・省略可など質問の書き分け方
- ✅ 実際に動くデモSKILL(コミットメッセージ生成)
対象読者
- GitHub Copilot ChatをVS Codeで使っている方
- SKILLを試したことはあるが、入力をうまく扱えていない方
- 自分のワークフローに合わせたCopilotを作りたい方
SKILLとは?
SKILL は、VS Code + GitHub Copilot Chatで使えるカスタムスキル定義の仕組みです。
.github/skills/<スキル名>/SKILL.md というMarkdownファイルを1つ置くだけで、Copilot Chatのチャット画面から #スキル名 で呼び出せます。
プロジェクトルート/
└── .github/
└── skills/
└── commit-message/ ← スキル名(フォルダ名)
└── SKILL.md ← これだけでOK
SKILLの2パート構成
SKILLファイルはシンプルに2つのパートで成り立っています。
---
name: commit-message
description: 'Copilotが自動選択するときの判断基準になる説明文'
argument-hint: 'ユーザーへの入力ヒント(呼び出し時に表示される)'
---
# ここから本文
AIへの指示(手順・出力フォーマット・制約など)をMarkdownで書く
| パート | 内容 |
|---|---|
| フロントマター(YAML) | SKILLのメタデータ。name・description・argument-hint
|
| 本文(Markdown) | AIへの指示。手順・出力形式・制約・例など |
ユーザー入力の2つのアプローチ
SKILLでユーザーから情報を受け取る方法は大きく2つあります。
アプローチ1: argument-hint で呼び出し時に引数を受け取る
フロントマターに argument-hint を書くと、ユーザーがSKILLを呼び出す際にチャット欄にヒントが表示されます。
---
name: commit-message
description: 'コミットメッセージを生成する'
argument-hint: '変更内容を簡単に説明してください(例: "ログイン機能を追加")'
---
ユーザーは #commit-message ログイン機能を追加 のように、スキル名の後ろに自然言語で引数を入力します。
使いどころ: 主要なコンテキストが1つのテキストで渡せる場合。シンプルで素早い。
アプローチ2: 本文に「確認してほしいこと」を書くだけ
SKILLの本文に「以下をユーザーに1つずつ確認する:」+番号リストを書くだけで、Copilot Agentが会話の流れの中で質問UIを自動的に出してくれます。ツール名を明示する必要はありません。
## Step 1: ユーザー入力
このスキルが呼び出されたら、以下をユーザーに1つずつ確認する:
1. **変更タイプ** — `feat`(新機能)/ `fix`(バグ修正)/ `docs`(ドキュメント)/ `refactor`/ `test` / `chore`(デフォルト: `feat`)
2. **スコープ**(省略可)— 変更が影響するモジュール名(例: auth, api, ui)
これだけです。番号リストの各項目の書き方がそのまま質問UIの内容になります。
使いどころ: 複数の情報が必要で、選択肢でブレを防ぎたい場合。回答精度が上がる。
2つのアプローチの比較
argument-hint |
本文への自然言語指示 | |
|---|---|---|
| 入力タイミング | 呼び出し時(チャット欄) | 会話中(ダイアログ) |
| 入力の数 | 基本1つ | 複数OK |
| 選択肢UI | なし | あり(指示の書き方次第) |
| 手軽さ | ⭐⭐⭐(シンプル) | ⭐⭐⭐(普通のMarkdownで書ける) |
| 精度 | ⭐⭐(自由入力のブレあり) | ⭐⭐⭐(選択肢で統一できる) |
| 組み合わせ | ✅ 両方同時に使える | ✅ 両方同時に使える |
💡 ポイント: argument-hint と本文の質問指示は組み合わせるのがベストプラクティスです。
「ざっくりした内容を引数で受け取り、詳細を会話中に質問する」という二段構えにすると、使いやすさと精度が両立します。
デモSKILL: インタラクティブなコミットメッセージ生成
実際に動くSKILLを見てみましょう。
Conventional Commits に従ったコミットメッセージを、対話形式で生成するSKILLです。
ファイル構成
.github/
└── skills/
└── commit-message/
└── SKILL.md
SKILL.md の全文
---
name: commit-message
description: 'Conventional Commitsに従ったコミットメッセージを対話形式で生成する。USE FOR: コミットメッセージを書く、コミット文を作る、git commitのメッセージ。DO NOT USE FOR: PRの説明文、リリースノート。'
argument-hint: '変更内容を簡単に説明してください(例: "ログイン機能を追加"、"決済バグを修正")'
---
# コミットメッセージ生成スキル
## Step 1: ユーザー入力
このスキルが呼び出されたら、以下をユーザーに **1つずつ** 確認する:
1. **変更タイプ** — `feat`(新機能)/ `fix`(バグ修正)/ `docs`(ドキュメント)/ `refactor`/ `test` / `chore`(デフォルト: `feat`)
2. **スコープ**(省略可)— 変更が影響するモジュール名(例: auth, api, ui)
3. **破壊的変更の有無** — `あり` または `なし`
## Step 2: 出力
収集した情報をもとに以下のフォーマットで出力する:
\`\`\`
<type>(<scope>): <description>
[body: 変更の背景・詳細。argument-hint の内容をもとに補完]
[footer: BREAKING CHANGE または Refs: #issue番号]
\`\`\`
## 制約
- description は50文字以内・命令形・現在形(「追加した」→「追加」)
- 日本語・英語どちらでも対応(argument-hint と同じ言語に揃える)
- 破壊的変更がある場合は footer に必ず `BREAKING CHANGE: <説明>` を含める
動作イメージ
チャット欄で #commit-message ログイン機能を追加 と入力すると、Copilotが順番に質問を出してきます。
質問1: 変更タイプを選ぶ
Copilotが選択肢付きのダイアログを表示し、ユーザーが feat を選択。

質問2: スコープを入力
Copilotが「スコープを入力してください(省略可)」と質問し、ユーザーが auth と入力。
質問3: 破壊的変更の確認
Copilotが「はい/いいえ」の選択肢を表示し、ユーザーが「いいえ」を選択。
出力結果:
feat(auth): JWTを使ったログイン機能を追加
ユーザー認証にJWT(JSON Web Token)を採用。
アクセストークンの有効期限は24時間。
Refs: #123
これをそのまま git commit -m に使えます。
SKILL作成のTips
Tip 1: description に USE FOR / DO NOT USE FOR を書く
description フィールドは、ユーザーが直接呼び出すときだけでなく、Copilot Agentが自動でSKILLを選ぶときにも参照されます。
「何に使うか・何には使わないか」を明示することで、意図しない場面で呼ばれるのを防げます。
# ❌ 曖昧な説明(意図しない場面でも呼ばれてしまう)
description: 'コードを助けるスキル'
# ✅ USE FOR / DO NOT USE FOR パターン
description: 'コミットメッセージ生成。USE FOR: コミット文を書く、git commit。DO NOT USE FOR: PRの説明文、リリースノート。'
Tip 2: 質問は3つ以下に絞る
確認項目は 3つ以下 が理想です。
多すぎると「結局手で書いた方が早い」と感じてしまいます。
本当に必要な情報だけを聞き、残りは引数や文脈から推測させましょう。
Tip 3: 選択肢の書き方でUIが変わる
質問の書き方を工夫すると、Copilotが出すUIの種類が変わります。
## ユーザー入力
このスキルが呼び出されたら、以下を確認する:
1. **変更タイプ** — `feat` / `fix` / `docs` / `refactor`(デフォルト: `feat`)
↑ スラッシュ区切り → 選択肢UIになりやすい
2. **説明文** — 例: "JWTを使ったログイン機能を追加"
↑ 例を示すだけ → 自由入力UIになる
3. **スコープ**(省略可)— 変更モジュール名
↑「省略可」を書くと任意入力になる
Tip 4: 出力フォーマットを必ず明示する
AIへの指示は「何を・どの形式で出力するか」が明確なほど結果が安定します。
コードブロックで具体的なフォーマット例を示すと効果的です。
## 出力
以下のフォーマットで出力する:
\`\`\`
<type>(<scope>): <description>
\`\`\`
出力後、選択した変更タイプの理由を1文で説明する。
Tip 5: argument-hint と本文の質問を組み合わせる
「argument-hint でざっくりした内容を受け取り → 本文で詳細を確認」という二段構えが最も使いやすいです。推測できる情報は質問をスキップさせる一文も有効です。
---
argument-hint: '変更内容を簡単に説明(例: "ログイン機能を追加")'
---
## Step 1: ユーザー入力
このスキルが呼び出されたら、以下を確認する。
argument-hint の内容から推測できる場合はスキップしてよい:
1. **変更タイプ** — `feat` / `fix` / `docs` / `refactor`
2. **スコープ**(省略可)— 変更が影響するモジュール名
Tip 6: Step番号で構造を明確にする
本文を ## Step 1: ユーザー入力、## Step 2: 処理、## Step 3: 出力 のようにStep番号で区切ると、
Copilotが処理の順序を正確に把握し、質問と出力が混在するバグが減ります。
## Step 1: ユーザー入力
以下を1つずつ確認する:
1. ...
## Step 2: 出力
受け取った情報をもとに以下を出力する:
...
⚠️ 注意: SKILLはVS Code最新安定版とGitHub Copilot Chat拡張が必要です。
質問UIが出ない場合は拡張機能のバージョンを確認してください。
まとめ
| ポイント | 内容 |
|---|---|
| SKILLとは | Markdownファイル1つで作れるCopilotのカスタムエージェント |
| ユーザー入力① |
argument-hint:呼び出し時に1つの自由テキストを受け取る |
| ユーザー入力② | 本文に「1つずつ確認する:」+番号リストを書くだけで会話中の質問UIが出る |
| ベスト構成 | 両方を組み合わせる(引数で概要 → 本文で詳細) |
| Tips | USE FOR明示、質問3つ以下、選択肢の書き方、Step番号で構造化 |

