shwld.io

GitHub Copilotを効率よく使うために


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 Copilotを効率良く使う

プロンプトエンジニアリングを意識する必要はありませんが、IDEが文脈を送るので、IDE上での振る舞いによってプロンプトの質を上げるテクニックは存在します。

文脈、意思、詳細・具体。これらの情報を、的確に生成AIにわたせるかが重要

具体的なテクニックとして、以下を挙げることができる

ショートカットを紹介

GitHub Copilot Chat

@shwldが思うGitHub Copilot

GitHub Copilotはとても強力なツールですが、万能ではありません。

あくまで副操縦士であるので、最終的な判断は自分で行うことを意識したいです。

私がCopilotを使う上で思っていることをメモります。

Copilotに任せやすい仕事

似たコードの生成

自分が書いたクラスやメソッドに似たコードを書く場合、Copilotの精度はとても高いです

その際、お手本となるコードが記述されたファイルをIDEで開いた状態で、サジェストさせると良いです。

まずは自分の手でコードを作り上げ、真似させることを意識しています。

複数ファイルに同じ修正を行う

例えば、複数のクラスに同じインタフェースを生やすことがあるかも知れません。

一括置換したいけど微妙にクラスごとに前提が違っていたり。

Copilotはこういうのを対処するのが得意です。

まずは自分の手で一つ対応してみて、そのファイルを開いた状態で、順番に該当箇所でサジェストさせると精度高くコードを書いてくれます。

こういった対応の負荷が下がると、コードの秩序を保つような変更も入れやすくなり、一貫性のあるコードはCopilotの提案の精度を上げてくれるという好循環が生まれます。

テストコード・テストデータの生成

似たコードの生成に通じる話ですが、テストコードは少しづつ違った同じようなコードが書かれる傾向が高いものだと思います。

Copilotに、テストケースを増やしてもらったり、一貫性を保ってもらいましょう。

Copilotに任せづらい仕事

ゼロからコードを書かせる

コメントや関数名からコードを生成してもらえますが、参考になるコードがない状態で書かせるのはあまり自分は好きじゃないです。

動くコードが生成される可能性はまあまああると思いますが、結局全てのコードを読んで考えることになるので、それだったら自分で書きたいと思ってしまいます。

たたき台や参考コードが欲しいなら、ChatGPTに聞いたのを参考に書くのが現状自分は良いかなと思っています。

例外: 車輪を再発明させる

一般的によくある処理を実装したいとします。そのためにパッケージを導入したいが、オーバースペックなものしかない場合、管理コストが増えてしまい、コスパが悪い場合があります。

こういった場合、Copilotに頼んでリポジトリ内に関数などを書いて、車輪の再発明をしてもらうのは無駄な依存を増やさないのでありかなと思いました。

NestJSのGraphQLサーバにApplication Insightsのトレースを仕込む
shwld
2024/02/19
GitHub Copilotを効率よく使うために
shwld
2024/01/29
2024年。今年の抱負
shwld
2024/01/18
DevOps活動の半年間の振り返り:2つのプロジェクトの経験と教訓
shwld
2023/12/07