GitHub Copilotのベスト プラクティスを確認する
Visual Studio Code用のGitHub Copilotは、開発者がコードをより迅速かつ少ないエラーで記述するのに役立ちます。
ただし、GitHub Copilotはプログラマではなく、AI ペア プログラマです。 GitHub Copilotを最大限に活用するには、ベスト プラクティスに従う必要があります。
ジョブに適したGitHub Copilot ツールを選択する
GitHub Copilotのコード補完機能とGitHub Copilotのチャット機能は一部の機能を共有していますが、2 つのツールはさまざまな状況で最適に使用されます。
コード補完は、次の場合に最も多くの値を提供します。
- 記述中にコードスニペット、変数名、関数を完成させます。
- 繰り返しコードを生成します。
- 自然言語でインライン コメントからコードを生成します。
- テスト駆動開発用のテストを生成します。
GitHub Copilotのチャット機能は、特に次のような場面で使用すると価値を発揮します。
- 自然言語でのコードに関する質問に回答します。
- コードの大きなセクションを生成し、そのコードを反復処理してニーズを満たします。
- チャット参加者、スラッシュ コマンド、チャット変数を使用して特定のタスクを実行します。 チャット参加者 (
@vscodeや@terminalなど) は要求のコンテキストを設定し、スラッシュ コマンド (/explainや/fixなど) は意図を伝え、チャット変数 (#fileや#codebaseなど) は特定のコンテキストにCopilotをフォーカスさせます。 さまざまな GitHub Copilot Chat プラットフォームで、さまざまな参加者とコマンドを使用できます。 - 特定のペルソナとしてタスクを完了します。 たとえば、GitHub Copilot Chatに、コードの品質、読みやすさ、効率性を重視するシニア C++ 開発者であることを伝えることができます。 ペルソナを確立したら、コードを確認するようにGitHub Copilotに依頼できます。
GitHub Copilotのインラインサジェストを最大限に活用する
GitHub Copilotは、コードをより効率的に作成するのに役立つ提案を自動的に提示します。 GitHub Copilotは、特定のアクションや動作に従うときに、より優れた提案を提供します。 これらのアクションと動作の一部はあなたと同僚がコードを理解するのにも役立つため、あなたはこれらに既に従っている場合があります。
GitHub Copilotのコンテキストを指定する
GitHub Copilotは、自分が何をしているのか、何を助けたいのかを知るのに十分なコンテキストがある場合に最適です。 ヘルプを求めるときに関連するコンテキストを同僚に提供するのと同様に、コンテキストをGitHub Copilotに提供する必要があります。
ファイルを開く
コード補完を行う際、GitHub Copilot はエディタで開いているファイルを確認してコンテキストを把握し、適切な候補を表示します。 GitHub Copilotを使用しているときに関連ファイルをVisual Studio Codeで開くことで、コンテキストを定義し、GitHub Copilotがプロジェクトの全体像を把握するのに役立ちます。
最上位レベルのコメント
同僚にざっくりとした紹介をするように、コードファイルの最上位コメントは、GitHub Copilotがあなたの作成しているコードの全体的な文脈を理解するのに役立ちます。
適切なインクルードと参照
作業に必要な組み込みまたはモジュール参照を手動で設定することをお勧めします。 GitHub Copilot提案を行うことができますが、含める必要がある依存関係が最もよくわかっている可能性があります。 これにより、提案を作成するときに使用するフレームワーク、ライブラリ、およびそれらのバージョンについてGitHub Copilotに通知することもできます。
意味のある関数名
fetchData()という名前のメソッドは、同僚(または、数か月後のあなた)にはあまり意味を持たないのと同様に、GitHub Copilotがコードを理解するのに役立ちません。 意味のある関数名を使用すると、GitHub Copilotに必要な処理を行う候補を生成できます。
適切に範囲設定された具体的な関数のコメント
関数名は、あまりに長くならない範囲でのみ説明的にできます。 関数のコメントは、GitHub Copilotが知る必要がある可能性がある詳細を入力するのに役立ちます。
サンプル コードを使用したプライム GitHub Copilot
GitHub Copilot を正しく機能させるための一つの方法は、望ましいコードサンプルをコピーして、開いているエディタータブに貼り付けることです。このサンプルは、GitHub Copilot にエミュレートしてもらいたいコードを表す必要があります。 GitHub Copilotに例を指定することにより、エミュレートしたい言語やタスクに一致する候補を生成するのに役立ちます。 GitHub Copilotが目的に合ったコードの作成に役立ったら、サンプル コードを削除できます。 この方法は、GitHub Copilotを "トレーニング" する必要がある場合に特に役立ちます。 たとえば、GitHub Copilotが既定で、古いバージョンのライブラリを実装するコード スニペットを提案しているとします。 あなたは、最新バージョンのライブラリを使用するコードをプロジェクトに挿入できます。 これにより、GitHub Copilot最新バージョンのライブラリを使用するコード スニペットの提案を開始できます。 GitHub Copilot新しいライブラリ バージョンの使用を学習したら、サンプル コードを削除できます。
一貫性を保ち、品質を高く保つ
GitHub Copilot は、既存のパターンに従う提案を生成するために、ユーザーの入力したコード内容に依存ます。つまり、"ガベージイン・ガベージアウト (GIGO)" の言葉が当てはまるわけです。
常に高品質を保つには、規律が必要です。 特に、何かを動作させるために細かなことを気にせずにコーディングを行っている場合、 「ハッキング」モードで、GitHub Copilot の補完機能を無効にしたいケースがあるかもしれません。 GitHub Copilotのステータスメニュー(Visual Studio Codeのステータスバーからアクセス可能)から、補完機能を一時的に無効にできます。
GitHub Copilot Chatを最大限に活用する
GitHub Copilotのチャット機能を使用している場合は、エクスペリエンスを最適化するためにできることがいくつかあります。
一般的なことから開始し、特定の情報を取得する
GitHub Copilotのプロンプトを記述するときは、まず、GitHub Copilot目標またはシナリオの概要を説明します。 次に、特定の要件を一覧表示します。 次のプロンプトを検討します。
- 数値が素数かどうかを示す関数を記述します。
- 関数は整数を受け取り、整数が素数の場合は true を返す必要があります。
- 入力が正の整数でない場合、関数はエラーを発生させる必要があります。
例を示す
GitHub Copilotが理解するために、例を使用してみてください。 入力データの例、出力例、実装例を指定できます。
複雑なタスクを単純なタスクに分割する
GitHub Copilotで複雑なタスクや大規模なタスクを完了したい場合は、そのタスクを複数の単純で小さなタスクに分割してください。 たとえば、GitHub Copilotに単語検索パズルを生成するように依頼するのではなく、プロセスを小さなタスクに分割し、GitHub Copilotに 1 つずつ実行するように依頼します。
- 10 x 10 の文字グリッドを生成する関数を記述します。
- 有効な単語の一覧を指定して、文字グリッド内のすべての単語を検索する関数を記述します。
- 前の関数を使用して、少なくとも 10 個の単語を含む 10 x 10 個の文字グリッドを生成する関数を記述します。
- 前の関数を更新して、グリッドから文字のグリッドと 10 個のランダムな単語を出力します。
あいまいさを回避します
あいまいな用語は回避します。 たとえば、"this" が現在のファイル、最後のGitHub Copilotの応答、あるいは特定のコードブロックのいずれかを指す可能性がある場合、"これが何をするのか" といった曖昧な質問はしないでください。 あいまいな用語を使用するのではなく、具体的に指定します。createUser 関数は何を行いますか?
関連するコードを示す
IDE で GitHub Copilot チャットを使用している場合は、参照させたいファイルやコードを開くか、強調表示します。 チャット参加者、スラッシュ コマンド、チャット変数をプロンプトで使用して、コンテキストを定義します。 たとえば、GitHub Copilot Chatが参照するファイルを指定します。
チャット参加者、スラッシュ コマンド、チャット変数を使用する
チャット参加者は、コード ベースまたは特定のドメインやテクノロジに関する追加のコンテキストを収集するように設計されています。 適切な参加者を指定すると、GitHub Copilot Chat は、GitHub Copilot バックエンドに送信するためのより良い情報を見つけて提供できます。 たとえば、Visual Studio Codeの機能と API について質問する場合は、@vscode を使用します。
スラッシュ コマンドは、GitHub Copilot Chatが質問をするときに意図を理解するのに役立ちます。 コード ベース (/explain) について学習していますか、問題の修正に関するヘルプ (/fix)、またはテスト ケース (/tests) を作成していますか? GitHub Copilot Chat何をしようとしているかを把握できるようにすることで、タスクへの応答を調整し、役に立つコマンド、設定、コード スニペットを提供できます。
@terminalや@vscodeなどのチャット参加者は、ドメイン固有のコンテキストを提供するチャット変数を提供できます。
#記号を使用して、チャット プロンプトでチャット変数を参照できます。 チャット変数を使用して、プロンプトのコンテキストをより具体的にすることができます。
たとえば、 #file チャット変数を使用すると、チャット プロンプトでワークスペースから特定のファイルを参照できます。 これにより、使用しているファイルに関するコンテキストを提供することで、GitHub Copilot Chatからの回答がコードに対してより関連性を高めるのに役立ちます。 "Can you suggest improvements to #file:package.json?" や "How do I add an extension in #file:devcontainer.json?" などの質問をすることができます。
#file 変数を使用すると、GitHub Copilotからより対象を絞った正確な応答を得ることができます。
実験して反復する
目的の結果が得られない場合は、プロンプトを繰り返してやり直してください。 次の要求で前の応答を参照します。 前の応答を削除して最初からやり直すこともできます。
履歴に関連性を持たせる
GitHub Copilot Chatでは、チャット履歴を使用して要求に関するコンテキストを取得します。 GitHub Copilotが関連するチャット履歴を使用していることを確認するには:
- スレッドを使用して、新しいタスクの新しい会話を開始します。
- 関連性がなくなったリクエストや、目的の結果を得られなかったリクエストは削除します。
適切なコーディング プラクティスに従う
GitHub Copilotに提案を求めるときに必要な応答が得られない場合は、既存のコードがベスト プラクティスに従っており、読みやすいことを確認してください。 次に例を示します。
- 一貫したコード スタイルとパターンを使用します。
- 変数と関数にはわかりやすい名前を使用します。
- コードにコメントを追加します。
- コードをモジュール型スコープ コンポーネントに構造化します。
- 単体テストを含めます。
概要
GitHub Copilotは、コードをより迅速かつ少ないエラーで記述するのに役立つ強力なツールです。 ただし、GitHub Copilotを最大限に活用するには、ベスト プラクティスに従う必要があります。 ジョブに適したGitHub Copilot ツールを選択し、コンテキストを提供し、適切なコーディングプラクティスに従うことで、GitHub Copilotでエクスペリエンスを最適化できます。