GitHub Copilot の Instructions / Skills / Custom Agents / Hooks の違いを整理してみた
製造ビジネステクノロジー部の小林です。
GitHub Copilot には、エージェントの動作をカスタマイズするための仕組みがいくつか用意されています。代表的なものとして、Instructions・Skills・Custom Agents・Hooks があります。
それぞれのドキュメントを読み進めていたのですが、「結局どれが何をしてくれるんだっけ?」と混乱してしまったので、各機能の役割・違い・使い分けを整理してみました。
全体像
4 機能はセッション内で次のような役割を担います。

Instructions
概要
セッション開始時に自動でロードされる常時オンのルールブックのようなものです。
定義ファイル
.github/copilot-instructions.md$HOME/.copilot/copilot-instructions.md(個人設定)
特徴
- セッションが始まると読み込まれます
- スキップできません
- リポジトリ全体に適用したいルールを書く場所です
こんなときに使う
- コーディング規約:「このプロジェクトでは TypeScript を使用する」「変数名はキャメルケースで統一する」など
- ライブラリの指定・制限:「HTTP クライアントには axios を使う」「moment.js は使わず dayjs を使う」など
- アーキテクチャ上の方針:「レイヤードアーキテクチャに従う」「ビジネスロジックは service 層に集約する」など
ポイント
ほぼすべてのタスクに共通するシンプルな指示を定義する場面に適しています。指示が複雑化・肥大化してきた場合は、Skills への移行を検討するとよいかもしれません。
Skills
概要
特定のタスクを実行するための「手順書+スクリプトをまとめたフォルダ」です。命令・スクリプト・その他のリソースをひとつのディレクトリにまとめて管理できます。
必要に応じて、スキルのディレクトリにスクリプトやサンプルコード、その他のリソースを追加することも可能です。
構成
.github/skills/
└── image-convert/
├── SKILL.md # 手順の定義(必須)
└── convert-svg-to-png.sh # スクリプト(必要に応じて)
SKILL.md は YAML frontmatter(メタ情報)と Markdown 本文(手順)で構成します。下記は SKILL.md の例です。
---
name: image-convert
description: SVGファイルをPNGに変換するスキル
allowed-tools: shell
---
# SVG to PNG 変換手順
SVG を PNG に変換するよう求められたら、スキルディレクトリの
`convert-svg-to-png.sh` を実行してください。
引数として変換対象の SVG ファイルパスを渡します。
配置場所
| スコープ | パス |
|---|---|
| プロジェクト(リポジトリ固有) | .github/skills/、.claude/skills/、.agents/skills/ |
| 個人(全プロジェクト共通) | ~/.copilot/skills/、~/.agents/skills/ |
トリガー方法
- 自動推論:プロンプトとスキルの説明から Copilot が判断して実行
- 明示指定:
/skill-nameのようにスラッシュコマンドで直接呼び出し
セキュリティのポイント
allowed-tools に shell / bash を指定すると、Copilot が確認なしにスクリプトを実行するようになります。信頼できるスクリプトのみに限定して設定しましょう。
こんなときに使うとよさそう
- コードレビューの標準化手順
- コードレビューの観点チェックリスト
- 単体テストの生成手順
- 結合テストのシナリオ生成手順
ポイント
Instructions との違いは「常時適用 ・ 必要時のみ適用」です。毎回使わない詳細な手順は Skills に切り出すと、Copilot のコンテキストウィンドウを節約できます。
詳しくは下記をご参照ください。
Custom Agents
概要
「専門家ペルソナ+ツール権限」を持つサブエージェントです。メインエージェントとは独立したコンテキストウィンドウで動くのが最大の特徴です。
定義ファイル
エージェントは .agent.md ファイルで定義します。
---
name: security-auditor
description: セキュリティ上の問題を検出する読み取り専用エージェント
tools:
- read
- grep
- glob
---
# セキュリティ監査エージェント
このエージェントはコードベースのセキュリティ問題を検出します。
ファイルの読み取りと検索のみを行い、変更は一切しません。
実行モデル
タスクが割り当てられるとサブエージェントが起動し、専用のコンテキストウィンドウで作業します。これによりメインエージェントのコンテキストを汚染しません。大きなタスクの一部を切り出して並列処理させることも可能です。
起動方法
- 自動推論:プロンプトからエージェントの説明に合致すると自動選択
- 明示指定:
Use the security-auditor agent on /srcのようにプロンプトで指定 - CLI オプション:
copilot --agent security-auditor --prompt "..."で直接指定
こんなときに使う
- CDK コードのベストプラクティスチェック
- 読み取り専用ツールに制限した監査エージェントを用意することで、意図しないリソース変更を防ぎながらレビューできる
- バックエンドのセキュリティレビュー
- セキュリティ観点に特化した知識を持つエージェントに任せることで、通常の開発フローを邪魔せずにチェックを挟める
- ドキュメント生成
- 書き込み先のディレクトリやファイルを限定したエージェントに任せることで、安全にドキュメントを自動生成できる
- 設計 → 実装 → テストの多段階ワークフロー
- 各フェーズで異なるエージェントに役割を持たせることで、それぞれの専門性を活かした一貫したフローを構築できる
ポイント
Skills との違いは「手順の注入 vs 独立した実行」です。Skills はメインエージェントに手順を渡しますが、Custom Agents は別のエージェントが独立して動きます。
Hooks
概要
エージェントの実行タイミングにスクリプト処理を割り込ませる仕組みです。
フックポイント
| タイミング | 用途 |
|---|---|
pre-tool |
ツール実行前(バリデーション、セキュリティスキャンなど) |
post-tool |
ツール実行後(ログ記録、通知など) |
notification |
セッションの通知イベント |
こんなときに使う
- セキュリティスキャン:ファイル変更前に脆弱性チェックを強制実行
- ガードレール:特定ディレクトリへの書き込みをブロック
- ログ収集:すべてのツール呼び出しを記録
- ワークフロー自動化:コード変更後に自動でフォーマッターを実行
ポイント
Instructions がルールを「教える」のに対し、Hooks はルールを「強制する」仕組みです。
Instructions も十分な強制力を持つ場面はあります(例えば「rm コマンドを使わないで」と書くだけで、どんなにお願いしても実行しなくなったりします)。ただし、あくまで LLM への指示である以上、プロンプトの書き方や文脈次第で突破される可能性はゼロではありません。
一方 Hooks はシェルスクリプトとしてプログラム的に制御するため、LLM の判断に依存しない確実なガードレールを設けられます。セキュリティポリシーやコンプライアンス要件のように「絶対に守らせたい」ルールには Hooks を活用しましょう。
組み合わせて使うのがよさそう
Instructions → 常にチームの規約を適用
↓
Skills → CIデバッグ、作業フローなど特定タスクの手順
↓
Custom Agents → セキュリティ監査は専門エージェントに委任
↓
Hooks → どの機能が動いても必ずセキュリティスキャンを挟む








