Github Copilotにおけるプロンプトエンジニアリング

ChatGPTなどの生成AIに関する本を執筆して、インプレス社か出版しました。(GitHub Copilotについても書いています

詳細は、以下のページをご覧ください。

L

Github Copilot Chatも出てきて、プログラミングに関してはもうGithub Copilotを使うしかないなと思います。

Copilot Chatは、チャット形式のUIで、コードを選択してそのコードに関して説明をしたり、修正をしてもらうなどの色んな処理ができるツールです。

課金は月10ドルなので、個人開発をする人で開発を速くしたいとうい人はぜひ、使った方がいいでしょう。


今回は、Github Copilotを使う上で気を付けるべきプロンプトエンジニアリングについて書きたいと思います。


高レベルの目標を設定する

GitHub Copilotには、何を生成したいのかの説明を提供することで、より具体的な結果を得られます。

たとえば、ある特定の機能を持つアプリケーションを開発したい場合、その機能の全体像を最初に説明します。これにより、GitHub Copilotはその目標に基づいて具体的なコードを生成することができます。

Github Copilotはファイルに書いてある内容を入力として、コードを生成して提案します。
そのため、コードにコメント文としてどういうものを作成したいのかを、明確に書くことでその内容に沿ってコードを作ってくれやすくなります。

記事の中の例では、以下のように、どのライブラリを使ってどういう処理を作るのかについて具体的にコメントを書いています。

/* Create a basic markdown editor in Next.js with the following features: - Use react hooks - Create state for markdown with default text "type markdown here" - A text area where users can write markdown - Show a live preview of the markdown text as I type - Support for basic markdown syntax like headers, bold, italics - Use React markdown npm package - The markdown text and resulting HTML should be saved in the component's state and updated in real time */

コメントをシンプルで具体的にする

GitHub Copilotは、具体的な指示を与えることでより理解しやすくなります。

例えば、「引数として名前と年齢を受け取り、それらをデータベースに保存する関数を作成してください」というような形で、具体的に何を達成したいのかを明確にします。

また、一度に複数のコードを生成するよりも、各ステップごとにコードを生成させる方が効果的です。
これにより、生成されたコードが期待通りであるかを確認しながら進めることができます。

例えば、まず「名前と年齢を受け取る関数の基本的な構造を作成してください」と指示し、その後で「次に、これらの情報をデータベースに保存する部分を追加してください」と指示すると、生成されたコードが期待通りであるかを確認しながら進めることができます。

このように、具体的な指示を出すことで、GitHub Copilotはより理解しやすくなり、期待通りの結果を得やすくなります。

記事上の例では、わかりやすく一つ一つの指示を出していることがわかります。

GitHub Copilotに例を提供する:

例を提供することは、人間だけでなくGitHub Copilotにとっても有用です。たとえば、「ユーザーの名前と年齢を受け取り、それをデータベースに保存する関数を作成してください」と指示した場合、具体的なユーザーの名前と年齢の例を提供すると、GitHub Copilotはその例に基づいてより具体的なコードを生成することができます。

これにより、生成されたコードが期待通りであるかを確認しやすくなります。

例えば、記事上の例では、以下のようなコメントを利用しています。

// Map through an array of arrays of objects
// Example: Extract names from the data array
// Desired outcome: ['John', 'Jane', 'Bob']
const data = [
    [{ name: 'John', age: 25 }, { name: 'Jane', age: 30 }],
    [{ name: 'Bob', age: 40 }]
];
const mappedData = data.flatMap(sublist => sublist.map(person => person.name));
console.log(mappedData);
// Results: ['John', 'Jane', 'Bob']

Desired outcome: ['John', 'Jane', 'Bob']と書くことで、どういう処理を作成すればよいのかについてGithub Copilotが利用できるようになります。

この記事が気に入ったらサポートをしてみませんか?