コンテキストこそすべて:カスタム指示によるAI精度の向上

2025年3月26日 執筆:Rob Conery (@robconery.com), Burke Holland (@burkeholland)

今月初め、私たちはVisual Studio Codeにおけるカスタム指示(custom instructions)の一般提供を開始しました。カスタム指示とは、チームのワークフローや特定のスタイル設定、モデルが学習していないライブラリなど、Copilotに対して具体的なコンテキストを与えるための機能です。

本稿では、カスタム指示とは何か、GitHub Copilotでの結果を劇的に改善するために今日からどう活用できるか、そして本日より試用可能な「プロンプトファイル」という全く新しいプレビュー機能について解説します。

シンプルなMarkdownファイルで、プロンプトを短く、結果をより良く

GitHub Copilotの活用は開発プロセスを加速させますが、効果的なプロンプトを作成するには少し学習が必要です。思い通りの回答を得るために質問やプロンプトを書き直すといった試行錯誤が必要になることもあります。とはいえ、それであってもCopilotは確実にワークフローを高速化してくれます!

しかし、GitHub Copilotを自分のニーズに合わせて「調整」できることをご存知でしたか?シンプルなMarkdownファイルを使うことで、プロジェクトをより深く理解させるための具体的な指示をCopilotに与えることができます。本稿では、VS Codeの新しい機能であるカスタム指示の作成と利用手順を順を追って説明します。

まず、プロジェクトに .github/copilot-instructions.md というファイルを作成してみてください。このファイルには、Copilotがプロジェクトをより深く理解するための指示を記述します。このファイルはCopilotによって自動的に読み込まれるため、特別な設定は必要ありません。

Screenshot showing the Explorer view in VS Code, highlighting the  file. The file is still empty.

ファイルに指示を追加する

# Copilot Instructions

This project is a web application that allows users to create and manage tasks. The application is built using React and Node.js, and it uses MongoDB as the database.

## Coding Standards

- Use camelCase for variable and function names.
- Use PascalCase for component names.
- Use single quotes for strings.
- Use 2 spaces for indentation.
- Use arrow functions for callbacks.
- Use async/await for asynchronous code.
- Use const for constants and let for variables that will be reassigned.
- Use destructuring for objects and arrays.
- Use template literals for strings that contain variables.
- Use the latest JavaScript features (ES6+) where possible.

タイトルは必須ではありませんが、ファイルの目的を明確にするのに役立ちます。それ以降の内容は、Copilotがプロジェクトをより深く理解するための指示セットです。これらの指示は、プロジェクトのニーズに合わせてカスタマイズ可能です。

次に、チャットビューを開き、tail recursion(末尾再帰)のように非常に簡潔なコマンドでプロンプトを入力してみてください。「JavaScriptで末尾再帰を実装する方法を教えて」といった質問は不要です。単に tail recursion と入力して Enter キーを押すだけで、Copilotがプロジェクトのコンテキストを汲み取り、関連性の高い回答を提供してくれることがわかります。

Screenshot that shows the Copilot response for "tail recursion" in the Chat view.

このように、はるかに短いプロンプトを使用したにもかかわらず、Copilotは期待通りの形式(2スペース、キャメルケースなど)で、より詳細な回答を返してくれました。

これこそがカスタム指示の力です!しかし、できることはこれだけではありません……

あらゆるものをカスタマイズ!

GitHub Copilotは、コミットメッセージの生成、選択したコードのレビュー、テストの生成など、多くの優れた機能をVS Codeに追加します。

これらはすべて便利ですが、おそらく皆さんにはそれぞれ独自のやり方があるはずです。良いニュースとして、ワークスペースのいくつかの設定を上書きすることで、これらを自分好みにパーソナライズできます。

試してみましょう:コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))を開き、「workspace settings」と入力します。Preferences: Open Workspace Settings (JSON) というメニュー項目が表示されるはずです。これを選択し、ワークスペースに以下の設定を追加してください。

{
  "github.copilot.chat.commitMessageGeneration.instructions": [
    {
      "text": "Be extremely detailed with the file changes and the reason for the change. Use lots of emojis."
    }
  ]
}

settings.json ファイルを保存して閉じます。アクティビティバーのソース管理アイコンに、変更されたファイルがあることが示されるはずです。もしGitリポジトリのないテストディレクトリで作業している場合は、ソース管理ビューから直接作成できます。Initialize Repository(リポジトリの初期化)ボタンを選択して指示に従ってください。

ここからが楽しいところです:ソース管理ビューを開き、コミットメッセージ入力フィールドにあるキラキラしたアイコンを選択してください。これにより、Copilotがコミットメッセージを生成します。非常に詳細で、絵文字を多用したメッセージが生成されることに注目してください!

Screenshot that shows the Source Control view, showing a colorful commit message for the latest commit.

settings.json ファイル内の指示をコメントアウトして、再度コミットメッセージを生成してみてください。先ほどよりも詳細度が低く、絵文字も含まれないメッセージになるはずです。

優れた詳細なコミットメッセージを書くことは、習得に時間がかかるスキルです。しかし、Copilotを使えば時間を大幅に節約でき、より質の高いメッセージを作成できるようになります。

カスタム指示を全面的に活用する

コーディング規約をMarkdown以外の形式で個別のファイルに分けて管理している場合もあるでしょう。例えば、JavaScript用、Python用、Go用といった具合です。あるいは、データベースの操作方法(使用するデータ型、命名規則、接続文字列の扱いなど)に関する基準もあるかもしれません。

これらをすべて1つのファイルにまとめる必要はありません。個別に分けたままでも、Copilotの支援を受けることができます。

実際に試してみましょう。.vscode/settings.json(ワークスペース設定)を開き、以下の設定を追加してください。

{
  "github.copilot.chat.codeGeneration.instructions": [
    {
      "file": "./docs/javascript-styles.md"
    },
    {
      "file": "./docs/database-styles.md"
    }
  ]
}

これは、docs ディレクトリにある javascript-styles.mddatabase-styles.md の2つのファイルを読み込むようCopilotに指示しています。追加するファイル数に制限はなく、Copilotは指定した順序でそれらのファイルを検索します。

Screenshot that shows the Explorer view, highlighting the two files in the  folder and showing the custom instructions in the  file that reference these docs files.

現在取り組んでいるスプリントの仕様など、どのようなファイルでもここに追加できます。Gherkin仕様をカスタム指示として追加している例すら見かけます!

ぜひ試してみてください!

モデルのトーンを変更する

AIモデルは過度に丁寧になりがちです。頻繁に謝罪し、誤りを指摘されても自分自身の判断を貫くことがほとんどありません。作業を進めたいとき、これは煩わしく感じることがあります。モデルの過度なヘルパー気質を、回答方法に関するいくつかの指示で上書きすることができます。

- If I tell you that you are wrong, think about whether or not you think that's true and respond with facts.
- Avoid apologizing or making conciliatory statements.
- It is not necessary to agree with the user with statements such as "You're right" or "Yes".
- Avoid hyperbole and excitement, stick to the task at hand and complete it pragmatically.

モデルに対して指示を出す際は、否定形ではなく肯定形で伝えることが重要です。何を「しない」かではなく、何を「すべきか」を教える必要があるからです。「〜するな」の代わりに「〜を避ける」と表現しましょう。

実験して楽しみましょう!あるプログラマーは、テストスイートを生成する際に俳句で生成するようにして楽しんでいると報告してくれました。少し極端かもしれませんが、趣味のプロジェクトならそれもアリではないでしょうか?以下のような指示を追加することもできます。

- Generate tests in haiku format.
- Use 5-7-5 syllable structure.
- Use nature themes and imagery.

もう一つだけ...

GitHub Copilotは、コードファイルもカスタム指示として理解できます!例えばSQLファイルがある場合、それを設定に追加すれば、Copilotはデータアクセスコードを生成する際にそれを参照してくれます。

お気に入りの特定のデータアクセスツールがある場合、そのサンプルをプロジェクトに追加しておけば、Copilotがデータアクセスコード生成時にそれを活用します。

試してみましょう!チームメンバーの一人が、PostgreSQLデータベース用のSequelizeモデル(Node.js ORM)を生成するために使用した例を紹介します。

//Template for a Sequelize model
const { DataTypes, Model } = require('sequelize');
class User extends Model {
  //static or factory methods
  //instance methods
}
const init = function(sequelize){
  User.init({
    //schema goes here
  }, {
    hooks: {},
    tableName: "users"
    underscored: true,
    sequelize
  })
}

exports.createUser = function(sequelize){
  init(sequelize);
  return User;
}

このファイルを設定で参照すれば、GitHub CopilotはSQLファイルと一緒にこのテンプレートを使用して、プロジェクト内のモデルを生成してくれます。これはエディットモードまたはチャットモードの両方で使用可能です。単に generate the data access for the project とプロンプトを入力すれば、魔法のように生成されます!

プロンプトファイルの導入

プロンプトファイルを使用すると、自分やチームで再利用可能なプロンプトを作成できます。これにより、一貫性を保ちつつ、面倒になりがちなプロンプト入力の手間を削減できます。

例えば、データベーススキーマに基づいてインターフェースを作成する再利用可能なプロンプトを作りたいとしましょう。データベーススキーマを含むプロンプトファイルを作成すれば、Copilotが喜んでSQLスクリプトを生成してくれます。

プロンプトファイルは .github/prompts ディレクトリに配置し、*.prompt.md という形式の名前を持つMarkdownファイルである必要があります。

データベースの構造が記述された .github/prompts/database_users.prompt.md があるとします。例えば、以下のような形式です。

# User Authentication

Our application will have `users` with the following information:

- The standard user information, including: `name`, `email` (unique).
- A link for a "magic" login, which will be a `GUID` as well as the expiration date for the link.
- Social login account IDs for Microsoft, GitHub, and Google.
- The timestamp of the last login.
- The timestamp for when the user was created.

次に、インターフェースを生成するための指示を含む generate-interface.prompt.md という別のプロンプトファイルを作成します。プロンプトファイル同士は相互に参照できるため、このプロンプトファイルにデータベーススキーマをシンプルなMarkdownリンクとして渡すことができます。

Generate a TypeScript interface for the table specified by the user. Refer to the [user schema](database_users.prompt.md).

チャットでこれらのプロンプトファイルを使用するには、添付ボタン(クリップアイコン)を使うか、 を使用してください。メニューから Prompts を選択し、使用したいプロンプトファイルを選択します。generate-interface.prompt.md ファイルを使うと、自動的に database_users.prompt.md ファイルも読み込まれることに注目してください。

Animated gif showing how to use prompt files in chat.

結論

VS Codeは、適切に構成すればチームワークフローの不可欠な一部となり得る、カスタマイズ可能なアシスタントです。カスタム指示によって、開発者が自らの手でコントロールを握ることができるのです。

ハッピーコーディング!

© . This site is unofficial and not affiliated with Microsoft.