VS Codeでのプロンプトエンジニアリング
この記事では、Visual Studio CodeでAIからより適切で関連性の高い応答を得るためのプロンプト作成のヒントについて説明します。プロンプトエンジニアリングまたはプロンプトクラフティングは、AIについて話す際によく耳にするフレーズで、AI APIエンドポイントにパッケージ化されて送信される情報の方法と内容を指します。
VS CodeまたはAIを初めて使用する場合は、まずVS CodeのAI概要の記事を確認するか、すぐにはじめにチュートリアルに進むことをお勧めします。
インライン候補を最大限に活用する
インライン候補は、コード、コメント、テストなどの入力を自動的に補完する提案を提供することで、コーディングをより効率的に行うのに役立ちます。AIから最善の提案を得るために役立つ(「プロンプト」する)ことができることがあります。
コンテキストを提供する
AIは、何をしているか、何について助けが必要かを理解するための十分なコンテキストがある場合に最も効果的に機能します。特定のプログラミングタスクについて助けを求めるときに同僚にコンテキストを提供するのと同じように、AIにも同じことができます。
ファイルを開く
インライン候補の場合、VS Codeはエディタの現在のファイルと開いているファイルを調べてコンテキストを分析し、適切な候補を作成します。インライン候補を使用しながらVS Codeで関連ファイルを開いておくと、このコンテキストが設定され、AIはプロジェクトの全体像を把握できます。
トップレベルコメント
同僚に簡単な概要を説明するのと同じように、作業中のファイルにトップレベルコメントを追加すると、AIは作成中のコード片の全体的なコンテキストを理解するのに役立ちます。
適切なインクルードと参照
作業に必要なインクルードやモジュール参照を手動で設定するのが最善です。AIは提案を行うことができますが、含める必要がある依存関係については、おそらくあなたが最もよく知っています。これにより、AIは提案を作成する際に、使用したいフレームワーク、ライブラリ、およびそれらのバージョンを知ることもできます。
次のTypeScriptの例では、addメソッドの出力をログに記録したいと考えています。インクルードがない場合、AIはconsole.logの使用を提案します。
一方、Log4jsへの参照を追加すると、AIはそのフレームワークを使用して出力をログに記録することを提案します。

意味のある関数名
fetchData()という名前のメソッドは、数か月後に同僚(またはあなた自身)にとってあまり意味がありませんが、fetchData()もAIにとって役立ちません。意味のある関数名を使用すると、AIはあなたが望むことを実行する本体を提供できます。
具体的でスコープの広い関数コメント
関数名は、長すぎるということがない限り、説明的であることには限界があります。関数コメントは、AIが知る必要がある詳細を補うのに役立ちます。
AIにサンプルコードで指示する
AIを適切な方向に向かわせるための1つのトリックは、探しているものに近いサンプルコードをコピーして開いているエディタに貼り付けることです。小さな例を提供することで、AIは達成したい言語とタスクに一致する提案を生成できます。AIがあなたが望むコードと実際に使用するコードの生成を開始したら、ファイルからサンプルコードを削除できます。これは、AIが古いコードの提案をする傾向がある場合に、より新しいライブラリバージョンにAIをジャンプスタートするのに特に役立ちます。
一貫性を保ち、品質基準を高く保つ
AIは既存のパターンに従う提案を生成するためにあなたのコードに固執するため、「ゴミを入れればゴミが出てくる」という格言が当てはまります。常に高い品質基準を維持するには規律が必要です。特に、何かを機能させるために速く、緩くコーディングしている場合、コードを「ハッキング」している間は完了を無効にしたい場合があります。インライン候補を一時的に一時停止するには、ステータスバーのCopilotメニューを選択し、一時停止ボタンを選択して一時停止時間を5分ずつ増やします。インライン候補を再開するには、Copilotメニューの一時停止解除ボタンを選択します。

チャットを最大限に活用する
チャットを使用する場合、エクスペリエンスを最適化するためにいくつかのことができます。
関連コンテキストを追加する
#の後に参照したいコンテキスト項目を入力することで、プロンプトに明示的にコンテキストを追加できます。VS Codeは、ファイル、フォルダ、コードシンボル、ツール、ターミナル出力、ソース管理の変更など、さまざまな種類のコンテキスト項目をサポートしています。
チャット入力フィールドに#記号を入力すると、利用可能なコンテキスト項目のリストが表示されます。または、チャットビューのコンテキストの追加を選択してコンテキストピッカーを開きます。
たとえば、#<ファイル名>または#<フォルダ名>を使用すると、ワークスペース内の特定のファイルまたはフォルダをチャットプロンプトで参照できます。これにより、Copilot Chatからの回答は、作業中のファイルに関するコンテキストを提供することで、コードにより関連性が高くなります。「#package.jsonの改善案を提案してもらえますか?」や「#devcontainer.jsonに拡張機能を追加するにはどうすればよいですか?」といった質問をすることができます。
個々のファイルを個別に手動で追加する代わりに、#codebaseを使用して、VS Codeにコードベースから適切なファイルを自動的に見つけさせることができます。これは、質問に関連するファイルがわからない場合に役立ちます。

チャットでのコンテキストの使用について詳しく学びましょう。
具体的に、シンプルに
チャットに何かを実行するように依頼する場合、依頼は具体的にし、大きなタスクを個別の小さなタスクに分割してください。たとえば、TypeScriptとPugを使用し、MongoDBデータベースからデータを取得する製品ページを持つExpressアプリの作成をチャットに依頼しないでください。代わりに、まずTypeScriptとPugでExpressアプリを作成するように依頼します。次に、製品ページを追加するように依頼し、最後にデータベースから顧客データを取得するように依頼します。
チャットに特定のタスクを実行するように依頼する場合、使用したい入力、出力、API、またはフレームワークについて具体的に指定してください。プロンプトが具体的であるほど、結果は良くなります。たとえば、「データベースから製品データを読み取る」ではなく、「カテゴリごとにすべての製品を読み取り、JSON形式でデータを返し、Mongooseライブラリを使用する」と指定します。
ソリューションを反復処理する
チャットにヘルプを求める際、最初の応答に固執する必要はありません。反復処理して、チャットにソリューションを改善するように促すことができます。チャットは、生成されたコードのコンテキストと現在の会話の両方を持っています。フィボナッチ数を計算する関数を作成するためにインラインチャットを使用した例を次に示します。

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

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

結果を受け入れた後でも、後でAIにコードの反復処理を依頼することができます。
Copilotのプロンプトに関する追加リソース
GitHub Copilotを生産的に使用する方法についてさらに学びたい場合は、これらのビデオとブログ記事を参照してください。