GitHub Copilot使っていますか?
GitHub Copilotはコーディング時に現在書いているコードを汲み取って、次に書こうとしているコードを精度良く提案してくれるツールです。
VSCodeなどのエディタにプラグインとしてインストールすることで、インテリセンスを使うような使い心地でそのままAIによるより柔軟で状況にあったコードを提案してくれます。
GitHub Copilotは普通に使うだけでも強力な相棒ですが、更に効率よく使うために知っておきたいことを書いてみます。
インストールや設定はこちらを参照してください。
https://docs.github.com/ja/copilot/quickstart
ChatGPTなど、他の生成AIと何が違うのか
大きな違いは、文脈を生成AIへ送るプロセスをIDEにすべて任せる事ができる点(とGitHubの方が言っていました)
プロンプトエンジニアリングを利用者が意識することなく、自然に利用できる点が強みです。
また、読み込んだソースコードはCopilotの学習に使われないので(設定すれば)安心して業務利用することができます。
GitHub Copilotの仕組み
そもそもCopilotは何をプロンプトとしているのか?
ファイル(開いているものや、プロジェクト内の別ファイル)内のコメントやコード
精度が高く生成してもらうために必要な要素は以下。基本的にはIDEがプロンプトを作ってくれるが、理解しておくと何かと役に立つかも知れない。
文脈
要求を理解するため必要なあらゆる情報
意思
要求自体
コメントを書いてほしいのか
テストを書いてほしいのか
詳細・具体的
内容が具体的で細かいほど精度は高くなる傾向がある
Copilot ChatはGPT-4を採用しているが、Copilotは3.5turboを採用している
提案速度が大事なので、3.5Turboを採用している。
Copilot Chatは精度を重視してGPT4を採用している。
Copolotからの提案はどのくらい精度が良いのか
GitHubによると提案の35%くらいが採用されているらしい
生成AI全般では良い値
GitHub Copilotを効率良く使う
プロンプトエンジニアリングを意識する必要はありませんが、IDEが文脈を送るので、IDE上での振る舞いによってプロンプトの質を上げるテクニックは存在します。
文脈、意思、詳細・具体。これらの情報を、的確に生成AIにわたせるかが重要
具体的なテクニックとして、以下を挙げることができる
変数名をわかりやすく
メソッドの型情報など、ちゃんと書く
規則的なコードであること
ショートカットを紹介
提案を受け入れる:
TAB
提案を拒否する:
Esc
複数の提案を表示する:
Ctrl
+Enter
単語レベルで受け入れる:
Ctrl
+→
次の提案を見る:
Alt
+]
前の提案を見る:
Alt
+[
インライン提案をトリガーする:
Alt
+/
Labs 機能リストを表示する:
Ctrl
+Shift
+Alt
+e
サイドバーを切り替える:
Ctrl
+Shift
+a
GitHub Copilot Chat
VSCodeでChatを日本語にする方法
github.copilot.chat.localeOverride
で設定
「プログラミングに関連する質問のみをサポートできますが」と回答され、求める回答が得られない事が多い
日本語は苦手?
/fix
などコマンドを指定することで、意思が明確になるので、なるべくコマンドを指定すると良い
@shwldが思うGitHub Copilot
GitHub Copilotはとても強力なツールですが、万能ではありません。
あくまで副操縦士であるので、最終的な判断は自分で行うことを意識したいです。
私がCopilotを使う上で思っていることをメモります。
Copilotに任せやすい仕事
似たコードの生成
自分が書いたクラスやメソッドに似たコードを書く場合、Copilotの精度はとても高いです
その際、お手本となるコードが記述されたファイルをIDEで開いた状態で、サジェストさせると良いです。
まずは自分の手でコードを作り上げ、真似させることを意識しています。
複数ファイルに同じ修正を行う
例えば、複数のクラスに同じインタフェースを生やすことがあるかも知れません。
一括置換したいけど微妙にクラスごとに前提が違っていたり。
Copilotはこういうのを対処するのが得意です。
まずは自分の手で一つ対応してみて、そのファイルを開いた状態で、順番に該当箇所でサジェストさせると精度高くコードを書いてくれます。
こういった対応の負荷が下がると、コードの秩序を保つような変更も入れやすくなり、一貫性のあるコードはCopilotの提案の精度を上げてくれるという好循環が生まれます。
テストコード・テストデータの生成
似たコードの生成に通じる話ですが、テストコードは少しづつ違った同じようなコードが書かれる傾向が高いものだと思います。
Copilotに、テストケースを増やしてもらったり、一貫性を保ってもらいましょう。
Copilotに任せづらい仕事
ゼロからコードを書かせる
コメントや関数名からコードを生成してもらえますが、参考になるコードがない状態で書かせるのはあまり自分は好きじゃないです。
動くコードが生成される可能性はまあまああると思いますが、結局全てのコードを読んで考えることになるので、それだったら自分で書きたいと思ってしまいます。
たたき台や参考コードが欲しいなら、ChatGPTに聞いたのを参考に書くのが現状自分は良いかなと思っています。
例外: 車輪を再発明させる
一般的によくある処理を実装したいとします。そのためにパッケージを導入したいが、オーバースペックなものしかない場合、管理コストが増えてしまい、コスパが悪い場合があります。
こういった場合、Copilotに頼んでリポジトリ内に関数などを書いて、車輪の再発明をしてもらうのは無駄な依存を増やさないのでありかなと思いました。