あなたの GitHub Copilot をもっとカスタマイズしよう - VS Code Custom Instructions 編

こんにちは、MS開発部の渋谷です。
みなさんは、開発支援AIサービスであるGitHub Copilotを利用されていますか?
コーディングをする開発者の方々はもちろん、それ以外のインフラエンジニアや開発者ではない役割の方々すべての方にとてもメリットがあるGitHub Copilotですが、その挙動を自分である程度カスタマイズできることはご存知でしょうか。
今回は、VS Codeをベースに便利なGitHub Copilotをもっと便利にする機能であるCustom Instructionsについてご紹介します。
なお、今回ご紹介する機能はPreviewや実験的な機能を含みますのでご了承くださいませ。
GitHub Copilotの挙動をカスタマイズする方法
GitHub CopilotのカスタマイズをVS Codeで行う方法はいくつかありますが、今回は次の4つを取り上げます。
- copilot-instructions.mdの設定
- ~.instructions.mdの設定
- ~.prompt.mdの設定
- ~.chatmode.mdの設定
これらは、基本的にはCopilot Chatでの作業(ASKやAgent)の挙動をカスタマイズするものと認識して最初のうちは問題ないです。大きく分けて前半の3つはChatをするときの挙動の調整機能、最後のchatmodeのみ、オリジナルのChatモードを作成できる機能です。ここからはそれぞれについて紹介します。なお、今回ご紹介するカスタマイズ方法をすべて利用すると次のようなファイル構成になります。

copilot-instructions.md
copilot-instructions.md
ファイルは、Copilotとプロジェクトとの対話における「憲法」のようなものです。Copilotがコード生成や提案を行う際に、まず参照する高レベルのガイドラインをここに記述します。これにより、プロジェクト全体で一貫した技術選定やコーディングスタイルを強制することが可能になります 。具体的には、ワークスペースのルートディレクトリに.github
フォルダを作成し、その中にcopilot-instructions.md
という名前のファイルを作成します 。その後、VS Codeの設定でuseInstructionFiles
の設定値を有効にします。
具体的な設定例はこちら
## 命名規則– コンポーネント名、インターフェース、型エイリアスにはPascalCaseを使用する– 変数、関数、メソッドにはcamelCaseを使用する– プライベートなクラスメンバーには、接頭辞としてアンダースコア (_) を付ける– 定数にはすべて大文字のスネークケース (ALL_CAPS) を使用する## エラーハンドリング– 非同期処理にはtry/catchブロックを使用する– Reactコンポーネントには適切なエラー境界 (Error Boundary) を実装する– エラーは常にコンテキスト情報と共にログに記録する
copilot-instructions.md
に設定することで、上記で指示した命名規則やエラーハンドリングを加味したコードを提案するようになります。~.instructions.md
大規模で複雑なプロジェクトや、複数の言語・フレームワークが混在するモノレポでは、単一の指示ファイルだけでは不十分な場合があります。そのような状況で活躍するのが、特定のファイル群に対して的を絞った指示を与えることができる、複数の.instructions.md
ファイルです。これにより、より文脈に応じた、きめ細やかなカスタマイズが可能になります 。
これらの特化した指示ファイルは、通常、ワークスペースの.github/instructions/
ディレクトリ内に配置されます 。各ファイルの核心は、ファイルの先頭に記述されるYAMLフロントマターです。特にapplyTo
プロパティは、指示を適用する対象ファイルをglobパターンで指定するために使用され、極めて高い柔軟性を提供します 。
具体的な設定例はこちら
—applyTo: “**/*.ts,**/*.tsx”—# Project coding standards for TypeScript and React他で定義されているルールに加えて、以下のガイドラインに従ってください。## TypeScript Guidelines– すべての新規コードにTypeScriptを使用します。– 可能な限り、関数型プログラミングの原則に従います。– データ構造と型定義にはインターフェースを使用します。– イミュータブル(不変)なデータ(const、readonly)を優先します。– オプショナルチェーン(?.)およびNull合体(??)演算子を使用します。## React Guidelines– Hooksを使用した関数コンポーネントを使用します。– React Hooksのルール(条件分岐内で呼び出さないなど)に従います。– 子要素(children)を持つコンポーネントにはReact.FC型を使用します。– コンポーネントは小さく、責務を単一に保ちます。– コンポーネントのスタイリングにはCSS Modulesを使用します。
copilot-instructions.md
で設定するには細かすぎるが、特定の言語やファイルでは守ってほしいという指示を記述することが可能です。~.prompt.md
頻繁に行う定型的なタスクや、複雑な多段階の操作は、プロンプトファイルとして保存・再利用することで自動化できます。これは、プロンプトレベルでの自動化であり、チーム内での共有も可能です 。プロンプトファイルは、.github/prompts
ディレクトリ内に.prompt.md
という拡張子で作成します 。チャットで#prompt:ファイル名
と入力することで、そのファイルの内容をプロンプトとして実行できます 。
具体的な設定例はこちら
—mode: agent—現在開いているファイルに対して主要な処理に対してコメントを書いてください。コメントには必ず AI 君が見ましたと書いてください。
—mode: ‘ask’model: Claude Sonnet 4description: ‘Perform a REST API security review’—REST APIのセキュリティレビューを実施し、対処すべきセキュリティ問題のTODOリストを提供してください。– すべてのエンドポイントが認証と認可によって保護されていることを徹底する– すべてのユーザー入力を検証し、データをサニタイズする– レートリミットとスロットリングを実装する– セキュリティイベントのロギングとモニタリングを実装するTODOリストは、優先度と問題の種類でグループ化し、Markdown形式で返してください。


~.chatmode.md
最後は、ASKやAgentモードにとらわれない、新しいモードを作成するための機能です。例えば、Agentモードっぽくプロジェクト全体を俯瞰して作業をしてほしいが、余計な変更は加えてほしくないといった際にこのモードが役に立ちます。この.chatmode.md
では、そのモード内で利用できるツール(≒実行できるタスク)やモードのふるまいの基本を設定することが可能です。
具体的な設定例はこちら
—description: Generate an implementation plan for new features or refactoring existing code.tools: [‘codebase’, ‘fetch’, ‘findTestFiles’, ‘githubRepo’, ‘search’, ‘usages’]model: Claude Sonnet 4—# Planning mode instructionsあなたは現在、計画モードです。あなたのタスクは、新機能または既存コードのリファクタリングに関する実装計画を生成することです。コードの編集は行わず、計画のみを生成してください。計画は、実装計画を記述したMarkdownドキュメントで構成され、以下のセクションを含みます。– 概要 (Overview): 機能またはリファクタリングタスクの簡単な説明。– 要件 (Requirements): 機能またはリファクタリングタスクの要件リスト。– 実装手順 (Implementation Steps): 機能またはリファクタリングタスクを実装するための詳細な手順リスト。– テスト (Testing): 機能またはリファクタリングタスクを検証するために実装が必要なテストのリスト。



まとめ
GitHub Copilotは、デフォルトの状態でも優れたツールですが、その真価はカスタマイズによって解き放たれます。今回は、Copilotを個々の開発者やチームにとって最適なツールにするためのカスタマイズ方法を4つ紹介しました。これらのカスタマイズは、Copilotを単なる受動的なコード補完ツールから、プロジェクトの文脈を深く理解し、開発者の意図を先読みする能動的な協力者へと変貌させます。
以上、最後までご愛読いただき
ありがとうございました。
お問い合わせは、
以下のフォームへご連絡ください。