GitHub Copilot のベスト プラクティスについて調べる

完了

Visual Studio Code 用 GitHub Copilot 拡張機能は、開発者がコードをより迅速に、より少ないエラーで記述するのに役立ちます。

ただし、GitHub Copilot は AI ペア プログラマーであり、プログラマーではありません。 GitHub Copilot ツールを最大限に活用するには、ベスト プラクティスに従う必要があります。

ジョブに適した Copilot ツールを選択する

GitHub Copilot のコード補完機能と GitHub Copilot のチャット機能はいくつかの機能を共有していますが、2 つのツールはさまざまな状況で最適に使用されます。

コード補完は、次の場合に最も多くの値を提供します。

  • コード スニペット、変数名、および関数を記述するときに完全に記述します。
  • 繰り返しコードを生成します。
  • 自然言語でインライン コメントからコードを生成します。
  • テスト駆動開発用のテストを生成します。

または、GitHub Copilot のチャット機能は、以下に慣れているときに最も価値を提供します。

  • 自然言語でのコードに関する質問に回答します。
  • コードの大きなセクションを生成し、そのコードを反復処理してニーズを満たします。
  • キーワードとスキルを使用して特定のタスクを実行します。 GitHub Copilot Chat では、プロンプト内で組み込みのキーワード (および重要なコンテキストを提供するように設計されたスキル) を使用して、一般的なタスクをすばやく実行します。 異なるタイプのキーワードとスキルは、異なるCopilotチャットプラットフォームで利用できます。
  • 特定のペルソナとしてタスクを完了します。 たとえば、Copilot Chat は、コードの品質、読みやすさ、効率性について非常に関心を持つシニア C++ 開発者であることを伝えることができます。 ペルソナを確立したら、GitHub Copilot にコードの確認を依頼できます。

Copilot インライン提案を最大限に活用する

GitHub Copilot 拡張機能では、コードをより効率的に作成できるように、提案が自動的に表示されます。 GitHub Copilot では、特定のアクションと動作に従うときに、より良い提案が提供されます。 これらのアクションと動作の一部はあなたと同僚がコードを理解するのにも役立つため、あなたはこれらに既に従っている場合があります。

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

GitHub Copilot は、あなたが何をしているのか、あなたが Copilot にどのような支援を求めているのかを把握するのに十分なコンテキストが用意されている場合に、最適に動作します。 同僚に助けを求めるときに関連するコンテキストを提供するように、GitHub Copilot にコンテキストを提供する必要があります。

ファイルを開く

コード補完のために、GitHub Copilot はエディターで開いているファイルを確認して、コンテキストを確立し、適切な提案を作成します。 GitHub Copilot の使用中に Visual Studio Code で関連ファイルを開くと、コンテキストの定義に役立ち、Copilot がプロジェクトの全体像を確認できるようになります。

最上位レベルのコメント

高度な概要を同僚に簡単に説明するのと同様に、コード ファイル内の最上位レベルのコメントは、作成しているコードの全体的なコンテキストを GitHub Copilot が理解するのに役立ちます。

適切な組み込みと参照

作業に必要な組み込みまたはモジュール参照を手動で設定することをお勧めします。 GitHub Copilot は提案してくれますが、どの依存関係を組み込む必要があるかについては、あなたが最もよくわかっているはずです。 このことは、提案を作成するときに使用したいフレームワーク、ライブラリ、およびそのバージョンについて、GitHub Copilot に知らせるうえでも役に立ちます。

意味のある関数名

fetchData() という名前のメソッドが同僚 (または数か月後のあなた自身) にはあまり意味を持たないのと同様に、fetchData() は GitHub Copilot がコードを理解する助けにはなりません。 意味のある関数名を使用することで、Copilot は、あなたに必要な提案を生成することができきます。

適切に範囲設定された具体的な関数のコメント

関数名は、過度に長くしない限り、説明的なものにしかなり得ません。 関数のコメントは、Copilot が知る必要がある可能性のある詳細を書き入れるのに役立ちます。

サンプル コードを含む最も重要な Copilot

Copilot に同じ理解を共有させる秘訣は、望ましいコード サンプルをコピーして開いているエディタ タブに貼り付けることです。このサンプルは、GitHub Copilot にエミュレートさせたいコードを表している必要があります。 例を提示すると、GitHub Copilot にエミュレートさせたい言語やタスクと一致する提案を生成するのに役立ちます。 Copilot が目標に合ったコードの作成に役立ったら、サンプル コードを削除できます。 この方法は、Copilot を "トレーニング" する必要がある場合に特に役立ちます。 たとえば、GitHub Copilot が既定で、古いバージョンのライブラリを実装するコード スニペットを提案するとします。 あなたは、最新バージョンのライブラリを使用するコードをプロジェクトに挿入できます。 これは、最新バージョンのライブラリを使用するコード スニペットの提案を Copilot が開始するのに役立ちます。 GitHub Copilot が新しいライブラリ バージョンの使用を学習したら、サンプル コードを削除できます。

一貫性を保ち、品質を高く保つ

GitHub Copilot はコードを理解して、既存のパターンに従う提案を生成するため、"ゴミを入れると、ゴミが出てくる" という格言が当てはまります。

常に品質を高く保つことで、規範が維持されます。 特に、何かを動作させるために細かなことを気にせずにコーディングを行っている場合、 "ハッキング" モードで GitHub Copilot 補完を無効にするとよいでしょう。 GitHub Copilot の状態メニュー (Visual Studio Code のステータス バーからアクセス可能) から、入力候補を一時的に無効にすることができます。

GitHub Copilot チャットを最大限に活用する

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

一般的なことから開始し、特定の情報を取得する

GitHub Copilot のプロンプトを記述するときは、まず、Copilot に目標またはシナリオの概略的な説明を入力します。 次に、特定の要件を一覧表示します。 次のプロンプトを検討します。

  1. 数値が素数かどうかを示す関数を記述します。
  2. 関数は整数を受け取り、整数が素数の場合は true を返す必要があります。
  3. 入力が正の整数でない場合、関数はエラーをスローする必要があります。

例を示す

必要なものを GitHub Copilot が理解するのに役立つ例を使用します。 入力データの例、出力例、実装例を指定できます。

複雑なタスクを単純なタスクに分割する

GitHub Copilot で複雑なタスクまたは大きいタスクを実行する場合は、タスクを複数の単純な小さいタスクに分割します。 たとえば、単語検索パズルを生成するように Copilot に求めるのではなく、プロセスを小さいタスクに分割し、1 つずつ実行するように GitHub Copilot に求めます。

  1. 10 x 10 の文字グリッドを生成する関数を記述します。
  2. 有効な単語の一覧を指定して、文字グリッド内のすべての単語を検索する関数を記述します。
  3. 前の関数を使用して、少なくとも 10 個の単語を含む 10 x 10 個の文字グリッドを生成する関数を記述します。
  4. 前の関数を更新して、グリッドから文字のグリッドと 10 個のランダムな単語を出力します。

あいまいさを回避します

あいまいな用語は回避します。 たとえば、"これ" が現在のファイル、最後の GitHub Copilot の応答、または特定のコード ブロックである可能性があるときは、"これが何を行いますか" と質問しないでください。 あいまいな用語を使用するのではなく、具体的に指定します。createUser 関数は何を行いますか?

関連するコードを示す

IDE で GitHub Copilot チャットを使用している場合は、ファイルを開くか、GitHub Copilot が参照するコードを強調表示します。 チャット参加者、スラッシュ コマンド、チャット変数をプロンプトで使用して、コンテキストを定義します。 たとえば、GitHub Copilot チャットがどのファイルを参照するかを指定します。

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

チャット参加者は、コード ベースまたは特定のドメインやテクノロジに関する追加のコンテキストを収集するように設計されています。 適切な参加者を指定すると、GitHub Copilot チャットが、Copilot バックエンドに送信するためのより良い情報を見つけて提供できます。 たとえば、オープン プロジェクトについて質問するときに @workspace を使用したり、Visual Studio Code の機能や API について質問するときに @vscode を使用したりできます。

スラッシュ コマンドは、あなたが質問するときの意図を GitHub Copilot チャットが理解するのに役立ちます。 コード ベースについて学習していますか (/explain)、問題の修正に関するヘルプが必要ですか (/fix)、またはテスト ケースを作成していますか (/tests)? 何をしようとしているのかを Copilot Chat に知らせることで、Copilot Chat がタスクに対する返信を調整し、役に立つコマンド、設定、コード スニペットを提供できるようになります。

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

たとえば、#file チャット変数を使用すると、チャット プロンプトでワークスペースから特定のファイルを参照できます。 これにより、使用しているファイルに関するコンテキストを提供することで、GitHub Copilot チャットからの応答とコードとの関連性をより高めやすくなります。 Can you suggest improvements to #file:package.json?How do I add an extension in #file:devcontainer.json? のような質問をすることができます。 #file 変数を使用すると、より的を絞った正確な応答を Copilot から得ることができます。

実験と反復処理

目的の結果が得られない場合は、プロンプトを繰り返してやり直してください。 次の要求で前の応答を参照します。 前の応答を削除して最初からやり直すこともできます。

履歴に関連性を持たせる

GitHub Copilot チャットでは、チャット履歴を使用して、要求に関するコンテキストを取得します。 GitHub Copilot が関連するチャット履歴を使用していることを確認するには:

  • スレッドを使用して、新しいタスクの新しい会話を開始します。
  • 関連性がなくなったリクエストや、目的の結果を得られなかったリクエストは削除します。

適切なコーディング プラクティスに従う

GitHub Copilot に提案を求めるときに必要な応答が得られない場合は、既存のコードがベスト プラクティスに従っており、読みやすいことを確認してください。 次に例を示します。

  • 一貫したコード スタイルとパターンを使用します。
  • 変数と関数にはわかりやすい名前を使用します。
  • コードにコメントを追加します。
  • コードをモジュール型スコープ コンポーネントに構造化します。
  • 単体テストを含めます。

概要

GitHub Copilot は、コードをより迅速かつ少ないエラーで記述するのに役立つ強力なツールです。 ただし、GitHub Copilot を最大限に活用するには、ベスト プラクティスに従う必要があります。 ジョブに適した Copilot ツールを選択し、コンテキストを提供し、適切なコーディングプラクティスに従うことで、GitHub Copilot を使用してエクスペリエンスを最適化できます。