GitHub Copilotのベスト プラクティスを確認する
Visual Studio CodeのGitHub Copilot拡張機能は、開発者がコードをより迅速かつ少ないエラーで記述するのに役立ちます。
ただし、GitHub Copilotは AI ペア プログラマであり、プログラマではありません。 GitHub Copilot ツールを最大限に活用するには、ベスト プラクティスに従う必要があります。
ジョブに適したGitHub Copilot ツールを選択する
GitHub Copilotのコード補完機能とGitHub Copilotのチャット機能はいくつかの機能を共有していますが、2 つのツールはさまざまな状況で最適に使用されます。
コード補完は、次の場合に最も多くの値を提供します。
- 記述中にコードスニペット、変数名、関数を完成させます。
- 繰り返しコードを生成します。
- 自然言語でインライン コメントからコードを生成します。
- テスト駆動開発用のテストを生成します。
また、GitHub Copilotのチャット機能は、次の場合に最も価値を提供します。
- 自然言語でのコードに関する質問に回答します。
- コードの大きなセクションを生成し、そのコードを反復処理してニーズを満たします。
- キーワードとスキルを使用して特定のタスクを実行します。 GitHub Copilotチャットでは、プロンプト内で組み込みのキーワード (および重要なコンテキストを提供するように設計されたスキル) を使用して、一般的なタスクをすばやく実行します。 さまざまな種類のキーワードとスキルが、さまざまなGitHub Copilotチャット プラットフォームで利用できます。
- 特定のペルソナとしてタスクを完了します。 たとえば、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() というメソッドが同僚や数か月後の自分にとってあまり意味を持たないのと同様に、fetchData() は GitHub Copilot がコードを理解するのに役立ちません。 意味のある関数名を使用すると、GitHub Copilotに必要な処理を行う候補を生成できます。
適切に範囲設定された具体的な関数のコメント
関数名は、あまりに長くならない範囲でのみ説明的にできます。 関数のコメントは、GitHub Copilotが知る必要がある可能性がある詳細を入力するのに役立ちます。
サンプル コードを使用したプライム GitHub Copilot
GitHub Copilotを適切なページに導く1つの方法は、使用したいコードサンプルをコピーして開いているエディタのタブに貼り付けることです。このサンプルはGitHub Copilotがエミュレートするコードを表している必要があります。 例を指定すると、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目標またはシナリオの概要を説明します。 次に、特定の要件を一覧表示します。 次のプロンプトを検討します。
- 数値が素数かどうかを示す関数を記述します。
- 関数は整数を受け取り、整数が素数の場合は 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 に参照させたいファイルを開くか、コードを強調表示します。 チャット参加者、スラッシュ コマンド、チャット変数をプロンプトで使用して、コンテキストを定義します。 たとえば、GitHub Copilot Chat が参照するファイルを指定します。
チャット参加者、スラッシュ コマンド、チャット変数を使用する
チャット参加者は、コード ベースまたは特定のドメインやテクノロジに関する追加のコンテキストを収集するように設計されています。 適切な参加者を指定すると、GitHub Copilot Chat は、GitHub Copilot バックエンドに送信するためのより良い情報を見つけて提供できます。 たとえば、開いているプロジェクトについて質問する場合は @workspace を使用し、Visual Studio Codeの機能と API について質問する場合は @vscode を使用します。
スラッシュ コマンドを使用すると、GitHub Copilot Chatが質問をする際の意図を理解しやすくなります。 コード ベース (/explain) について学習していますか、問題の修正に関するヘルプ (/fix)、またはテスト ケース (/tests) を作成していますか? GitHub Copilotチャットに何をしようとしているかを知らせることで、タスクへの返信を調整し、役に立つコマンド、設定、コード スニペットを提供できます。
@workspaceや@vscodeなどのチャット参加者は、ドメイン固有のコンテキストを提供するチャット変数を提供できます。
#記号を使用して、チャット プロンプトでチャット変数を参照できます。 チャット変数を使用して、プロンプトのコンテキストをより具体的にすることができます。
たとえば、 #file チャット変数を使用すると、チャット プロンプトでワークスペースから特定のファイルを参照できます。 これにより、使用しているファイルに関するコンテキストを提供することで、GitHub Copilot チャットからの回答がコードに対してより関連性が高くなります。 "Can you suggest improvements to #file:package.json?" や "How do I add an extension in #file:devcontainer.json?" などの質問をすることができます。
#file 変数を使用すると、GitHub Copilotからより対象を絞った正確な応答を得ることができます。
実験して反復する
目的の結果が得られない場合は、プロンプトを繰り返してやり直してください。 次の要求で前の応答を参照します。 前の応答を削除して最初からやり直すこともできます。
履歴に関連性を持たせる
GitHub Copilotチャットでは、チャット履歴を使用して要求に関するコンテキストを取得します。 GitHub Copilotが関連するチャット履歴を使用していることを確認するには:
- スレッドを使用して、新しいタスクの新しい会話を開始します。
- 関連性がなくなったリクエストや、目的の結果を得られなかったリクエストは削除します。
適切なコーディング プラクティスに従う
GitHub Copilotに提案を求めるときに必要な応答が得られない場合は、既存のコードがベスト プラクティスに従っており、読みやすいことを確認してください。 次に例を示します。
- 一貫したコード スタイルとパターンを使用します。
- 変数と関数にはわかりやすい名前を使用します。
- コードにコメントを追加します。
- コードをモジュール型スコープ コンポーネントに構造化します。
- 単体テストを含めます。
概要
GitHub Copilotは、コードをより迅速かつ少ないエラーで記述するのに役立つ強力なツールです。 ただし、GitHub Copilotを最大限に活用するには、ベスト プラクティスに従う必要があります。 ジョブに適したGitHub Copilot ツールを選択し、コンテキストを提供し、適切なコーディングプラクティスに従うことで、GitHub Copilotを使用してエクスペリエンスを最適化できます。