理系学生日記

おまえはいつまで学生気分なのか

わたしの知らないGitHub CopilotのInstructions/Promptsの世界

Claude Codeなどさまざまなコーディングエージェントが隆盛を誇る中で、GitHub Copilotも着実に進化を続けています。特にエンタープライズ開発における信頼感を考えると、GitHubやMicrosoftがバックに控える GitHub Copilotの安心感は捨てがたい。

特に最近のCopilotでは、「Instructions」と「Prompts」という2つの新しい概念が導入されていて、これがチーム開発での活用を大きく広げられるように感じました。でも、正直なところ、僕自身も最近まで、特にPromptsについてはよく理解していませんでした。ていうかv1.100でそれっぽい記述見たけどちゃんと読んでなかったんだわ。

InstructionsとPromptsの違いを理解する

VS CodeのCopilotには「Instructions」と「Prompts」という2つの機能があります。名前が似ているので混同しがちですが、実は全く異なる役割を持っています。

簡単に言うと、Instructionsは「Copilotにどう振る舞ってほしいか」を定義し、Promptsは「具体的にどんな作業をしてほしいか」を定義します。料理に例えるなら、Instructionsは「健康的で和風の味付けを心がける」といった基本方針で、Promptsは「このレシピで肉じゃが作ってや」のような具体的な手順書です。

「どのように振る舞うか」を示すInstructions

Custom Instructionsは、Copilotの基本的な振る舞いを定義する機能です。例えば、「TypeScriptを使う際は必ず型を明示的に定義する」といった方針を設定しておくと、Copilotはそれを踏まえてコード生成や提案を行います。

これは、新メンバーのオンボーディング資料としても活用できる考え方ですね。

「具体的な作業内容」を示すPrompts

一方、Promptsは具体的なタスクの実行手順を定義します。例えば、「Reactコンポーネントを生成してくれ」といった具体的な要求を、チーム内で統一された形で再利用できるようにしたものです。

毎回同じような指示を打ち込む必要がなくなるので、「あれ、前回どうやったっけ?」と悩む時間が減ります。あーわかるわ、チームでこういうの統一したいし改善したいもんな。

実際の設定方法

これら2つの機能は、VS Code内で異なる場所に配置し、それぞれ異なる方法で設定します。

Instructionsの設定

.github/copilot-instructions.md

最も基本的なInstructionsの配置場所は、プロジェクトルートの.github/copilot-instructions.mdです。このファイルは、全てのChatリクエスト時に自動的に読み込まれ、プロジェクト全体のベースとなる指針を定義します。

.instructions.md

より柔軟な設定として、.instructions.mdというpostfixを持つファイルをプロジェクト内の任意の場所に配置することも可能です。これにより、特定のディレクトリやファイルタイプに応じた専用の指針を定義できます。

適用対象は、ファイルのFront Matter内のapplyToフィールドで指定します:

---
applyTo: "**/*.ts,**/*.tsx"
---
# Project coding standards for TypeScript and React
hoge 
fuga

配置場所は.github/instructions配下が標準ですが、chat.instructionsFilesLocations設定で変更可能です。ただし、現時点ではExperimental機能となっています。

Promptsの設定

Promptsは現在Experimental機能ですが、チームでの生産性向上という観点から、今後GAに向かうと考えられます。 と言ってもイメージが湧きづらいと思うので、以下は公式ドキュメントからの例です。

---
mode: 'agent'
tools: ['githubRepo', 'codebase']
description: 'Generate a new React form component'
---
Your goal is to generate a new React form component based on the templates in #githubRepo contoso/react-templates.

Ask for the form name and fields if not provided.

Requirements for the form:
* Use form design system components: [design-system/Form.md](../docs/design-system/Form.md)
* Use `react-hook-form` for form state management:
* Always define TypeScript types for your form data
(略)

Front MatterのmodeフィールドでいつこのPromptを使用するかを定義し、agentが指定された場合はtoolsフィールドで利用可能なツール(MCP含む)も指定できます。

格納場所は.github/promptsが標準ですが、chat.promptFilesLocations設定で変更可能です。こちらも現時点ではExperimental機能です。

使い方

ChatウィンドウでSLASH /を入力すると、作成したPrompt Filesが候補として表示されます。対象ファイルを選択してEnterを押すと、自動的にFollow Instructions from <filename>というメッセージが入力され、実行されます。

Prompt File

ファイル間での参照機能

InstructionsやPromptsから他のファイルを参照したい場合があります。例えば、「セキュリティレビューのPrompt」から「セキュリティに関するInstructions」を参照したい、といったケースです。

このような場合、Markdownのリンク記法を使って間接参照が可能です。先ほどの例でも見た通り、[design-system/Form.md](../docs/design-system/Form.md)のように記述することで、他のファイルの内容を参照できます。

チーム開発での活用効果

InstructionsとPromptsを組み合わせることで、開発チーム全体でAIの使い方を統一し、生産性を向上させることができそうです。

具体的には、基本的なコーディング方針をInstructionsで共通化しつつ、具体的な作業手順をPromptsで標準化できます。例えば「セキュリティレビューのPrompt」を作成する際に、Markdownリンクで「セキュリティに関するInstructions」を参照させるみたいな感じ。

実際に試してみると、チャットウィンドウで/を入力するだけで過去に作成したPromptが候補に表示され、「前にも似たような作業をしたな」という時にすぐに呼び出せるため、非常に便利です。また、新しいメンバーがジョインした際も、既存のInstructionsとPromptsを共有するだけで、チームの作業方針や手順を効率的に伝えることができそうです。

まとめ

GitHub CopilotのInstructionsとPromptsは、まだExperimental機能が多いものの、チーム開発でのAI活用を考える上で非常に有用な機能なように感じました。今後の正式リリースに向けて、これらの仕組みを理解し活用することで、「個人でAIを使う」から「チーム全体でAIを使いこなす」環境を構築できる気がします。整備する側大変だけど。