GitHub CopilotのapplyTo:ファイル別インストラクションを正しく適用する¶
対象 / ポイント
対象: 複数言語・複数フレームワークのリポジトリでCopilotを使う開発者
ポイント: - .github/instructionsは既定の探索場所である - applyToで対象パスをglob指定する - References・Diagnostics・/instructionsで適用を確認する
Reactの規約をPythonへ適用したくないなら、ルールを1つの巨大なファイルへ置かない。*.instructions.mdへ分け、applyToで対象パスを指定する。これがGitHub Copilotのパス別インストラクションだ。1
この記事の問いは、どのルールを常時適用し、どのルールをファイル別に分けるかである。
最小構成は2ファイルで動く¶
リポジトリ全体の規則は.github/copilot-instructions.mdへ置く。言語やディレクトリに依存する規則は.github/instructions/*.instructions.mdへ分ける。
.github/
├── copilot-instructions.md
└── instructions/
├── frontend.instructions.md
└── python.instructions.md
.github/instructionsはVS CodeとGitHub Copilot CLIの既定探索場所だ。ここだけを使うなら、古い記事にあるchat.instructionsFilesLocationsの追加設定は不要である。2
applyToを書く¶
フロントエンド用ファイルは次のように作る。
---
description: ReactとTypeScriptの実装規則
applyTo: "**/*.ts,**/*.tsx"
---
## Frontend rules
- TypeScriptのstrict設定を維持する
- React Hooksを条件分岐内で呼ばない
- 変更した振る舞いに対応するテストを更新する
applyToはリポジトリルートから見たglobで、複数パターンはカンマで区切る。.tsxは現在のディレクトリだけ、**/.tsxはサブディレクトリも含む。
VS CodeではapplyToを省略したファイルも手動添付できるが、自動適用はされない。GitHub Copilot CLIやクラウド側でも使う共有ルールには、対象を明示したapplyToを付ける方が予測しやすい。
常時ルールと競合させない¶
複数のインストラクションが該当すると、Copilotはそれらを同じリクエストへ追加する。一般的な優先順位で競合を解決できるとは限らないため、責任を分ける。3
| ファイル | 置く内容 | 置かない内容 |
|---|---|---|
copilot-instructions.md | ビルド、テスト、全体アーキテクチャ | Reactだけの命名規則 |
frontend.instructions.md | TSX、CSS、アクセシビリティ | Pythonの例外処理 |
python.instructions.md | 型ヒント、pytest、フォーマット | フロントエンドの状態管理 |
AGENTS.md | 複数エージェントで共有するリポジトリ運用 | CopilotだけのUI設定 |
「全体ルールから詳細ファイルへのリンクを置けば必ず自動適用される」とは限らない。パス別の自動適用はapplyToで明示する。
追加の探索場所が必要な場合だけ設定する¶
標準外のディレクトリやユーザープロファイルを探索させる場合は、VS Codeの設定を使う。
{
"chat.instructionsFilesLocations": {
".github/instructions": true,
"docs/copilot-rules": true
}
}
この設定は「applyToを有効化するスイッチ」ではない。探索場所を追加・無効化する設定だ。自動適用自体はchat.includeApplyingInstructionsで制御され、現在の既定値は有効である。2
Copilotの実行面ごとの差を押さえる¶
インストラクション対応は、VS Code、Copilot CLI、クラウドエージェント、コードレビューで完全には同じではない。
- VS Codeはパス一致に加え、descriptionとタスクの意味的な関連も判断できる
- Copilot CLIは
/instructionsで検出済みファイルを確認できる excludeAgent: "code-review"でコードレビューから除外できるexcludeAgent: "cloud-agent"でクラウドエージェントから除外できる
古い値のcoding-agentではなく、現在のGitHub Docsにあるcloud-agentを使う。インライン補完にはカスタムインストラクションが適用されない点にも注意する。1
効かないときの確認順¶
- ファイル名が
NAME.instructions.mdになっているか - 既定または設定済みの探索場所に入っているか
applyToが実際のパスと一致するか- VS CodeのReferencesまたはCustomization Diagnosticsへ表示されるか
- Copilot CLIなら新しいセッションで
/instructionsを確認したか
設定を保存した直後でも、既存のCopilot CLIセッションは変更を再読込しない場合がある。新しいセッションで再確認する。
運用判断¶
ルールは細かく分けるほど良いわけではない。1ファイルを「1つの技術スタックまたは1つの品質責任」に対応させると、globの重複と指示競合を追いやすい。
数値化できない「精度が上がる」「トークンが何%減る」という効果は断定しない。
まとめ¶
適用されたファイル、生成結果、テスト結果を記録し、ルールごとに有効性を判断する。