コンテキストがすべて:カスタム指示でより良いAI結果を
2025年3月26日 Rob Conery、@robconery.com、Burke Holland、@burkeholland
今月初め、私たちはVisual Studio Code のカスタム指示の一般提供を開始しました。カスタム指示は、チームのワークフロー、特定のスタイル設定、モデルが知らない可能性のあるライブラリなど、Copilot に具体的なコンテキストを与える方法です。
この記事では、カスタム指示とは何か、それらを今日から使用して GitHub Copilot での結果を劇的に改善する方法、さらには今日試すことができる「プロンプトファイル」と呼ばれる新しいプレビュー機能についても詳しく説明します。
より短いプロンプト、シンプルなMarkdownファイルでより良い結果を
GitHub Copilot を使用すると開発プロセスを大幅に加速できますが、効果的なプロンプトの作成には学習曲線があります。望む答えを得るには数回試行が必要になることがあり、通常、質問やプロンプトを言い換えることになります。それでも、Copilot はワークフローを高速化してくれます!
しかし、GitHub Copilot をあなたのニーズに合わせて「調整」できることをご存知でしたか?シンプルなMarkdownファイルを使用することで、プロジェクトをよりよく理解するのに役立つ具体的な指示をCopilotに与えることができます。この記事では、VS Code で新しくリリースされた機能であるカスタム指示の作成と使用のプロセスを説明します。
試してみてください:プロジェクト内に.github/copilot-instructions.md
というファイルを作成します。このファイルには、Copilot がプロジェクトをよりよく理解するのに役立つ指示が含まれます。Copilot によって自動的に認識されるため、特別な設定は必要ありません。
これらの指示をファイルに追加します
# 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 がプロジェクトのコンテキストを理解し、関連する回答を提供することに注目してください。
Copilot が、はるかに短いプロンプトを使用したにもかかわらず、期待通りの形式(2スペース、camelCaseなど)で、より詳細な回答を提供したことに注目してください。
これがカスタム指示を使用する力です!しかし、できることは他にもたくさんあります…
すべてをカスタマイズ!
GitHub Copilot は、コミットメッセージの生成、選択したコードのレビュー、さらにはテストの生成など、VS Code に多くの優れた機能を追加します!
これらはすべて有用ですが、あなたにはこれらの作業を行う独自の方法があるかもしれません。良いニュースは、ワークスペースのいくつかの設定を上書きすることで、それらをパーソナライズできることです。
試してみてください:コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))を開き、「ワークスペース設定」と入力します。基本設定: ワークスペース設定を開く (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 リポジトリのないテストディレクトリで作業している場合は、ソース管理ビューから直接作成できます。リポジトリを初期化ボタンを選択し、指示に従ってください。
ここからが面白いところです:ソース管理ビューを開き、コミットメッセージ入力フィールドのキラキラアイコンを選択します。これはCopilotにコミットメッセージを生成するよう指示します。非常に詳細で絵文字を多用したコミットメッセージが生成されることに注目してください!
settings.json
ファイルの指示をコメントアウトし、もう一度コミットメッセージを生成します。絵文字を使用しない、はるかに詳細度の低いコミットメッセージが表示されるはずです。
優れた詳細なコミットメッセージを書くことは、習得に時間がかかるスキルです。しかし、Copilot を使えば、多くの時間を節約し、より良いメッセージを作成できます。
カスタム指示を徹底的に活用する
Markdown 以外の異なる形式で、コーディング標準を別のファイルに持っているかもしれません。JavaScript用、Python用、Go用にそれぞれ持っているかもしれません。また、使用するデータ型、命名規則、接続文字列の処理など、データベースの作業方法に関する標準があるかもしれません。
これらすべてを一つのファイルに結合する必要はありません。個別に保持し、それでも Copilot を使ってそれらすべてに対応できます!
試してみましょう!.vscode/settings.json
ファイル(ワークスペース設定)を開き、以下の設定を追加します
{
"github.copilot.chat.codeGeneration.instructions": [
{
"file": "./docs/javascript-styles.md"
},
{
"file": "./docs/database-styles.md"
}
]
}
これはCopilotにdocs
ディレクトリ内の2つのファイル(javascript-styles.md
とdatabase-styles.md
)を検索するよう指示しています。必要なだけファイルを追加でき、Copilotは指定した順序でそれらを検索します。
現在のスプリントの仕様を含め、好きなファイルをここに追加できます。Gherkin 仕様をカスタム指示として追加する人も見たことがあります!
ぜひ試してみてください!
モデルのトーンを変更する
モデルは過剰に丁寧である傾向があります。何か間違いを指摘されると、何度も謝罪し、自分の判断を擁護することはほとんどありません。作業を進めようとしているときに、これは煩わしく感じるかもしれません。モデルの過剰に親切なトーンを、どのように応答してほしいかといういくつかの指示で上書きできます。
- 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).
チャットでこれらのプロンプトファイルを使用するには、添付ボタン(クリップアイコン)を使用するか、を使用します。メニューからプロンプトを選択し、使用したいプロンプトファイルを選択します。generate-interface.prompt.md
ファイルを使用すると、database_users.prompt.md
ファイルが自動的に読み込まれることに注目してください。
まとめ
VS Code はカスタマイズ可能なアシスタントであり、適切に設定すれば、チームのワークフローに不可欠な一部となることができます。カスタム指示により、コントロールは開発者の手にあります。
ハッピーコーディング!