VS Codeのエージェントモードを拡張するには、を試してください!

Copilot Chat のためのプロンプト エンジニアリング

この記事では、Visual Studio Code の Copilot Chat から、より良く、より関連性の高い応答を得るためのプロンプトを作成するヒントについて説明します。「プロンプト エンジニアリング」または「プロンプト クラフティング」は、AI について議論する際によく耳にするフレーズであり、どのような情報がどのようにパッケージ化され、AI API エンドポイントに送信されるかを指します。

VS Code や GitHub Copilot を初めて使用する場合は、まず GitHub Copilot の概要 の記事を確認するか、はじめに のチュートリアルに直接進むことをお勧めします。

インライン候補とチャットの Copilot エクスペリエンスを最適化するためのさまざまなオプションがあります

Copilot のインライン候補を最大限に活用する

GitHub Copilot 拡張機能は、より効率的にコーディングできるように、候補を自動的に提示します。Copilot が可能な限り最高の候補を提示するのを助ける (「プロンプトする」) ためにできることがあります。そして良いことに、これらはあなたや同僚がコードを理解するのにも役立つため、おそらく既に実践していることでしょう。

Copilot にコンテキストを提供する

Copilot は、あなたが何をしているのか、何を手伝ってほしいのかを知るための十分なコンテキストがある場合に最も効果的に機能します。特定のプログラミング タスクについて同僚に助けを求めるときにコンテキストを提供するのと同じように、Copilot に対しても同じことができます。

開いているファイル

コード補完のために、Copilot はエディター内の現在開いているファイルを見てコンテキストを分析し、適切な候補を作成します。Copilot の使用中に VS Code で関連ファイルを開いておくと、このコンテキストが設定され、Copilot がプロジェクトの全体像を把握するのに役立ちます。

トップレベルのコメント

同僚に簡潔で高レベルな紹介をするのと同じように、作業中のファイルのトップレベルのコメントは、Copilot が作成している部分の全体的なコンテキストを理解するのに役立ちます。

適切なインクルードと参照

作業に必要なインクルードやモジュール参照は、手動で設定するのが最善です。Copilot は候補を提示できますが、含める必要がある依存関係については、あなたがおそらく最もよく知っています。これは、Copilot が候補を作成する際に使用してほしいフレームワーク、ライブラリ、およびそのバージョンを知らせるのにも役立ちます。

次の TypeScript の例では、add メソッドの出力をログに記録したいと考えています。インクルードがない場合、Copilot は console.log の使用を提案します

Copilot inline suggestion proposes Console.log when no imports in the file.

一方、Log4js への参照を追加すると、Copilot はそのフレームワークを使用して出力をログに記録することを提案します

Copilot inline suggestion proposes logging using the imported logging framework.

意味のある関数名

fetchData() というメソッドが同僚 (または数か月後のあなた) にとってあまり意味をなさないのと同様に、fetchData() は Copilot にも役立ちません。意味のある関数名を使用すると、Copilot が望むことを実行する本体を提供するのに役立ちます。

具体的で適切にスコープされた関数コメント

関数名は、長すぎずに説明的であることには限界があります。関数コメントは、Copilot が知る必要があるかもしれない詳細を補うのに役立ちます。

サンプルコードで Copilot を準備する

Copilot を正しい方向に導くための 1 つのコツは、探しているものに近いサンプルコードを開いているエディターにコピー & ペーストすることです。小さな例を提供することで、Copilot が達成したい言語やタスクに一致する候補を生成するのに役立ちます。Copilot が希望するコードや実際に使用するコードを提供し始めたら、ファイルからサンプルコードを削除できます。これは、Copilot が古いコードの候補をデフォルトで提供する場合に、より新しいライブラリ バージョンにジャンプスタートさせるのに特に役立ちます。

一貫性を保ち、品質基準を高く維持する

Copilot は既存のパターンに従って候補を生成するためにあなたのコードに依存するため、「ゴミを入れればゴミが出る」ということわざが当てはまります。

常に高い品質基準を維持するには、規律が必要です。特に、何かを動かすために素早く大雑把にコーディングしているときは、「ハッキング」モード中は Copilot の補完を無効にしたいかもしれません。Copilot のステータス メニューから一時的に補完を無効にできます。Copilot のステータス バー項目を選択して、Copilot のステータス メニューのドロップダウンを表示します。

Hover over the Copilot Status bar item displays "Show Copilot status menu"

ドロップダウンから、補完を完全に無効にするか、アクティブなファイル タイプ (たとえば Markdown ファイル) に対してのみ無効にすることができます。

Copilot Status menu dropdown with Disable Completions selected

Copilot Chat を最大限に活用する

GitHub Copilot Chat 拡張機能をインストールすることで、チャット インターフェイスを介して Copilot から支援を受けることもできます。

チャットを使用して GitHub Copilot と対話する際には、エクスペリエンスを最適化するためにできることがいくつかあります。

チャット参加者とスラッシュ コマンドを使用する

チャット参加者は、コードベースまたは特定のドメインやテクノロジに関する追加のコンテキストを収集するように設計されています。適切な参加者を使用することで、AI はより良い情報を見つけて LLM に送信できます。たとえば、開いているプロジェクトについて質問したい場合は @workspace を使用し、VS Code の機能や API について詳しく知りたい場合は @vscode を使用します。

Asking the @vscode participant how to change the VS Code colors

スラッシュ コマンドは、質問をするときに Copilot Chat があなたの**意図**を理解するのに役立ちます。コードベースについて学習していますか (/explain)、問題の修正を手伝ってほしいですか (/fix)、それともテスト ケースを作成していますか (/tests)? Copilot Chat に何をしているかを知らせることで、タスクに合わせて応答を調整し、役立つコマンド、設定、コード スニペットを提供できます。

Inline Chat slash command list

自然言語のクエリでプロジェクトの範囲や現在のタスクを書き出すこともできますが、チャット参加者とスラッシュ コマンドを使用する方が簡潔で明確です。

Copilot Chat のチャット参加者スラッシュ コマンドについて詳しく学びましょう。

コンテキストにチャット変数を使用する

@workspace@vscode などのチャット参加者は、ドメイン固有のコンテキストを提供するチャット変数を寄与させることができます。チャット プロンプトで # 記号を使用してチャット変数を参照できます。チャット変数を使用することで、チャット プロンプトに含めるコンテキストをより具体的にすることができます。

たとえば、#<ファイル名>#<フォルダー名> を使用して、ワークスペース内の特定のファイルやフォルダーをチャット プロンプトで参照できます。これにより、作業中のファイルに関するコンテキストが提供されるため、Copilot Chat からの回答がコードにより関連性の高いものになります。「#package.json の改善案を提案してもらえますか?」や「#devcontainer.json に拡張機能を追加するにはどうすればよいですか?」のような質問ができます。

チャット ビューの **[コンテキストを添付]** ボタンを使用して、チャット メッセージにコンテキストを追加することもできます。その後、現在の選択範囲、ワークスペースからの 1 つ以上のファイル、ソースコードからの 1 つ以上のシンボルなど、クイック ピックから特定のコンテキストの種類を選択できます。

Screenshot of VS Code Copilot Chat view, showing the Attach context button and context Quick Pick.

Copilot Chat でのコンテキスト変数の使用について詳しく学びましょう。

具体的に、そしてシンプルに

Copilot に何かを依頼するときは、依頼内容を具体的にし、大きなタスクを別々の小さなタスクに分割してください。たとえば、Copilot に TypeScript と Pug を使用し、MongoDB データベースからデータを取得する製品ページを持つ Express アプリを作成するように依頼しないでください。代わりに、まず Copilot に TypeScript と Pug を使用した Express アプリを作成するように依頼します。次に、製品ページを追加するように依頼し、最後にデータベースから顧客データを取得するように依頼します。

Copilot に特定のタスクを依頼するときは、使用したい入力、出力、API、またはフレームワークについて具体的に指定してください。プロンプトが具体的であるほど、結果は良くなります。たとえば、「データベースから製品データを読み取る」ではなく、「カテゴリ別にすべての製品を読み取り、データを JSON 形式で返し、Mongoose ライブラリを使用する」とします。

ソリューションを反復する

Copilot Chat に助けを求めるとき、最初の応答に固執する必要はありません。反復して Copilot にソリューションの改善を促すことができます。Copilot は、生成されたコードのコンテキストと現在の会話の両方を持っています。

以下は、インライン チャットを使用してフィボナッチ数を計算する関数を作成する例です

First response from Copilot for a function to calculate Fibonacci numbers

再帰を使用しないソリューションを好むかもしれません

Ask Copilot to not use recursion and new result

Copilot にコーディング規約に従うように依頼したり、変数名を改善するように依頼したりすることもできます

Ask Copilot to use better variable names and new result

結果を既に受け入れた後でも、後で Copilot にコードを反復するようにいつでも依頼できます。

Copilot のプロンプトに関するその他のリソース

GitHub Copilot を生産的に使用する方法について詳しく知りたい場合は、以下のビデオやブログ記事を参照してください