# GitHub Copilot Chat のプロンプト エンジニアリング

Copilotの結果を改善するには、次の戦略に従います。

プロンプトは、 GitHub Copilotに対して行う要求です。 たとえば、Copilot Chat に尋ねる質問や、Copilot に完成させるよう求めるコード スニペットです。 プロンプトに加えて、 Copilot は、現在のファイル内のコードやチャット履歴などの追加のコンテキストを使用して応答を生成します。

この記事のヒントに従って、 Copilotからのより良い応答を生成するプロンプトを記述します。

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

Copilotのプロンプトを記述する場合は、最初に目標またはシナリオCopilot詳しい説明を入力します。 次に、特定の要件を一覧表示します。

次に例を示します。

```copilot copy prompt
Write a JavaScript function that tells me if a number is prime

The function should take an integer and return true if the integer is prime

The function should error if the input is not a positive integer
```

## 例を示す

例を使って、Copilot があなたの求めていることを理解できるようにしましょう。 入力データの例、出力例、実装例を指定できます。

次に例を示します。

```copilot copy prompt
Write a Go function that finds all dates in a string and returns them in an array. Dates can be formatted like:

* 05/02/24
* 05/02/2024
* 5/2/24
* 5/2/2024
* 05-02-24
* 05-02-2024
* 5-2-24
* 5-2-2024

Example:

findDates("I have a dentist appointment on 11/14/2023 and book club on 12-1-23")

Returns: ["11/14/2023", "12-1-23"]
```

単体テストも例として機能します。 関数を記述する前に、 Copilot を使用して関数の単体テストを記述できます。 次に、 Copilot に、これらの単体テストで記述された関数を記述するように依頼できます。

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

Copilot に複雑または大規模なタスクを完了させたい場合は、そのタスクを複数の単純で小さなタスクに分割してください。

たとえば、 Copilot に単語検索パズルを生成するように依頼するのではなく、プロセスを小さなタスクに分割し、 Copilot に 1 つずつ実行するように依頼します。

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

## あいまいさを回避します

あいまいな用語は回避します。 たとえば、"this" が現在のファイル、最後の Copilot 応答、または特定のコード ブロックである可能性がある場合は、"何が行われるか" を尋ねないでください。 代わりに、次のように具体的に指定します。

* `createUser` 関数ではどのような処理が実行されますか?
* 最後の応答のコードはどんな処理を行いますか?

あいまいさは、ライブラリにも適用できます。

* 一般的でないライブラリを使用している場合は、ライブラリの機能について説明します。
* 特定のライブラリを使用する場合は、ファイルの先頭に インポート ステートメントを設定するか、使用するライブラリを指定します。

## 関連するコードを示す

IDE で Copilot を使用してコードを作成するときに提案を取得する場合は、関連するファイルを開き、無関係なファイルを閉じます。
Copilot は、開いているファイルを使用して要求を理解します。

IDE で Copilot Chat を使用している場合は、ファイルを開くか、 Copilot 参照するコードを強調表示します。 キーワードを使用して、 Copilot Chatにコンテキストを手動で指定することもできます。 たとえば、VS Code で `@workspace` チャット参加者を追加したり、JetBrains IDE で `@project`を追加したりすることができます。 「[GitHub Copilot Chat のチート シート](/ja/copilot/reference/chat-cheat-sheet) を参照してください。

## 実験して反復する

目的の結果が得られない場合は、プロンプトを繰り返してやり直してください。

コードを作成するときに Copilot を使用して提案を取得する場合は、提案を完全に削除して最初からやり直すことができます。 提案を受け入れて修正を依頼することもできます。

Copilot Chatを使用している場合は、次の要求で前の応答を参照できます。 または、前の応答を削除して最初からやり直すこともできます。

## 履歴に関連性を持たせる

Copilot Chat では、チャット履歴を使用して要求に関するコンテキストを取得します。
Copilot に関連する履歴のみを提供するには:

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

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

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

* 一貫性のあるコード スタイルとパターンを使用する
* 変数と関数にわかりやすい名前を使用する
* コードにコメントを追加する
* コードをモジュール化およびスコープされたコンポーネントとして構築する
* 単体テストを含めむ

> \[!Tip]
> Copilotを使用して、コードがベスト プラクティスに従うのに役立ちます。 たとえば、コメントを追加したり、大きな関数をより小さな関数に分割したりするように Copilot に依頼します。

## 参考資料

* [
  ](https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/?ref_product=copilot\&ref_type=engagement\&ref_style=text)

* [IDE で GitHub Copilot を使う: ヒント、コツ、ベスト プラクティス](https://github.blog/2024-03-25-how-to-use-github-copilot-in-your-ide-tips-tricks-and-best-practices/?ref_product=copilot\&ref_type=engagement\&ref_style=text)GitHub ブログで

* [
  ](https://github.blog/2023-07-17-prompt-engineering-guide-generative-ai-llms/) ブログでGitHub

* [アクセシビリティ対応のための個人用 AI アシスタントとして GitHub Copilot Chat を活用するためのプロンプト](https://github.blog/2023-10-09-prompting-github-copilot-chat-to-become-your-personal-ai-assistant-for-accessibility/?ref_product=copilot\&ref_type=engagement\&ref_style=text)（GitHubブログ）