2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Copilot SKILLでユーザー入力を活用する方法 〜インタラクティブなAIエージェントの作り方〜

2
Last updated at Posted at 2026-04-25

はじめに

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のメタデータ。namedescriptionargument-hint
本文(Markdown) AIへの指示。手順・出力形式・制約・例など

ユーザー入力の2つのアプローチ

SKILLでユーザーから情報を受け取る方法は大きく2つあります。

アプローチ1: argument-hint で呼び出し時に引数を受け取る

フロントマターに argument-hint を書くと、ユーザーがSKILLを呼び出す際にチャット欄にヒントが表示されます。

SKILL.md
---
name: commit-message
description: 'コミットメッセージを生成する'
argument-hint: '変更内容を簡単に説明してください(例: "ログイン機能を追加")'
---

ユーザーは #commit-message ログイン機能を追加 のように、スキル名の後ろに自然言語で引数を入力します。

使いどころ: 主要なコンテキストが1つのテキストで渡せる場合。シンプルで素早い。


アプローチ2: 本文に「確認してほしいこと」を書くだけ

SKILLの本文に「以下をユーザーに1つずつ確認する:」+番号リストを書くだけで、Copilot Agentが会話の流れの中で質問UIを自動的に出してくれます。ツール名を明示する必要はありません。

SKILL.md
## 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 の全文

.github/skills/commit-message/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 を選択。
スクリーンショット 2026-04-25 155046.png

質問2: スコープを入力

Copilotが「スコープを入力してください(省略可)」と質問し、ユーザーが auth と入力。

スクリーンショット 2026-04-25 155053.png

質問3: 破壊的変更の確認

Copilotが「はい/いいえ」の選択肢を表示し、ユーザーが「いいえ」を選択。

スクリーンショット 2026-04-25 155124.png

出力結果:

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番号で構造化

特別なツール名を覚えなくても、普通のMarkdownで手順を書くだけでインタラクティブなSKILLが作れます。
まずはデモSKILLをコピーして、自分のワークフローに合わせてカスタマイズしてみてください!

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?