目的
個人の学習メモです。以下3点を目的にします。
- Github Copilotを利用するにあたって現状で認識しておくべきであることを整理しておく。
- Github Copilotを感覚ではなくコントロールして使用できるようになる。
- 知らないTipsをインプットする。
参考
こちらのサイトからのアウトプットです。Githubで公開されていて、Github Copilotを中心にまとめられています。
知識
Github Copilotに利用されているモデル
codexというモデルが利用されている。
GPT-3ベースで自然言語の理解が可能。
codexモデルに渡せるトークン数は限られていることをしっておくべき。
Github Copilotの補完のしくみ
詳しいロジックは公開されていないようですが、エディタで開いているファイルを読んで現在開発しているファイルに関連の深いものを参考にしている。
Tips
GitHub Copilot の参照優先度
GitHub Copilot は直近開いたいくつかの同じ言語のファイルを参照し、類似性を計算してプロンプトに含めるファイルを決定します。
コメントからコードを生成
コメントで条件を指定することでCopilotはコードを生成する。ある程度複雑に条件を定義することも可能。
逆にコードからコメントを生成することも可能
コメントで関数の意味を説明することでコメントを自動生成することができる。
PHPDocなどコメントが書かれていない理解しにくいコードの理解を助けることができる。
リファクタリング
リファクタリングされた calculate_sum()を以下に書いてください
上記のように関数を指定するとリファクタリングの案を提示してくれる。ただし、意味が変わる可能性がある点には要注意。
リファクタリングに関してはテストが書かれているとより効率的。
Copilotを活用するうえで意識するべきこと
コードの中にコメントを意識的に残すこと
ビジネス要件にかかわることや実装するうえでの前提となる知識を優先的に書く。Copilotが読んで以降の開発効率の向上につながる。ただし、過剰なコメントアウトは逆に精度を低める可能性がある。
AIにも理解しやすい命名規則の採用
シンプルに読みにくいコードはGithub Copilotの精度にも影響します。チームであらかじめ共通の命名規則を決めておくことが重要です。例えば「ローワーケースを使用するのか、キャメルケースを採用するのか」など
網羅的なテストコードの開発(ChatGPTの活用が前提)
活用が認められる場合に限りますが、ChatGPTを活用して網羅的なテストケースを作成します。
作成したテストケースをコメントアウトとして張り付けてテストコードをCopilotに記述させる。
完璧なテストであるとは保証できないが、プログラムの品質を保証することは確実なのでできれば採用したい。
関連ファイルを隣接タブに開いておく
Copilotが認識できるのはエディタで開いているファイルの隣接するタブのみ。関連ファイルをタブに開いたままにしておくことでより正確な提案を行うことが可能になる。このとき、同一拡張子のファイルである必要がある。
また、そもそもCopilotが認識できる文字数には限りがあるため、タブに開くファイルはおおすぎてもダメ。
コードを生成するためのTipやプロンプトをチームで共有する
コードを生成するためのコメントアウトなどはいらなくなるのでリポジトリには共有せれることがありません。各エンジニアが学習するために共有しておくことでチーム開発がより効率的になり、かつ個人の育成が可能になります。
車輪の再発明
ライブラリへの依存を低減する。という意味で車輪の再発明を推奨する。利用するライブラリがシンプルなものだったり、スコープが限定的なら内部に実装するほうがいい場合がある。