GitHub Copilotを使ってみて
先月まで某社のGitHub Copilot検証の支援案件をやってたおかげでGitHub Copilotを1ヶ月程度触る機会がありました。その時の話を少しだけ。
もちろん、案件の話をかける訳ないので、あくまで個人の感想レベルです。
あと、面倒なので以降は「Copilot」と略します。マイクロソフトから色んなCopilotが登場してますが、本記事中のCopilotは特記なければGitHub Copilot(含むGitHub Copilot Chat)のことです。
TL;DR
プログラマを置き換える?まだまだそのレベルではない
新規開発より保守向き?
最後に責任を取るのは人
Copilotって何?
まあ、その筋の人なら改めて説明する必要もないでしょう。GitHub社が提供するサービスで「AIペアプログラマー」を謳っています。ペアプロについて新ためて触れませんが、要はAIを使ってプログラマを切ってしまって人件費を下げようと言う話ではなく、あくまで人がプログラミングする際の効率を上げるために支援しますという話。
その辺、お間違えなきよう。
実際、使えるの?
「使える」が何を期待しているか次第ですが、個人的には十分に使えると感じます。ただ、繰り返しになりますがあくまで支援として使えるという話。
例えば、今ではIDEやプログラマ向けのエディタでは当たり前の各種補完機能。出始めた当時は一部では否定的な意見もあったし、できることも限られていました。でも、今は当たり前になっているかと。
Copilotもそれに似ていると感じます。実際、すごく進化した補完機能と感じます。
Copilotで何ができるの?
これもまあ、その手の記事がたくさんあるので割愛します。が、自分の感覚としては、既存のプログラム内から情報を拾っていろいろ提案してくれるちょっと賢い補完機能です。
ただ、直前の情報に惑わされることも多く、うまく補完させるにはテクニックが必要なあたりは、生成系AI一般でよく言われるプロンプトエンジニアリングに近いものがあります。
また、生成系AI一般によくある「平気で嘘をつく」という点も同じ。Copilotはプログラムに特化した学習データを持っているのは確かですが、当然、ここのプログラムに特有の情報は与えてあげなければどうにもなりません。
生成系AIの仕組みを知っていれば当たり前ですが、Copilotはプログラムを与えられた情報から考えているわけではありません。関係性が強そうなものを並べているだけなので、正しいかどうかは受け取った側が考える必要があります。
特に力を発揮するのは?
個人的には新規開発より保守向きかとは感じました。
もちろん、新規開発で使えないわけではありません。実際に「数当てゲームを作って」と言えば、ちゃんと動くものを作ってくれました。そう、数当てゲームというもののサンプルが世の中にはたくさんあるから。
自分はシステム屋として、企業内の業務で使うようなプログラムをつくる際に活用することを前提に考えています。その前提で、すでに存在するプログラムに対して、類似部分を参考に機能を追加するといった保守開発作業には特にハマると感じます。
逆に言えば、いままでにまったくない機能をつくりたい場合は保守開発といえども厳しい部分もあるかと思います。
もうCopilot任せにしてプログラマは不要?
少なくとも2024年4月現在では不可能です。
なぜなら、Copilotが扱かえる情報量には制約があるため。Copilotに聞くとなぜか「2048」トークンと「4096」トークンという二通りの回答が来ることがありますが、いずれにしろ制限があります。Copilotが一度に生成できるプログラムは(当然内容次第ですが)せいぜい数十行です。
もちろん、その数十行を繰り返せば理論的には千行でも万行でもプログラムを作ることは可能。でもまあ、現実的ではないですよね。全体の整合性を保つ必要がありますが、Copilotが現在扱える情報量では不可能です。それは人が担保する必要があります。
今のCopilotには個別最適化はできても、全体最適化はできません。
まとめ
偉そうなことを書いてきましたが、しがないシステム屋の末端にいるおっさんの戯言ですので、当然間違っている部分もあるかと思います。AIの専門家でもなんでもないですし。
どちらにしろ、Copilotが生成したプログラムについて、GitHub社はなんの保証も補償もしてくれません。そのプログラムで何か問題が発生した場合、責任を取るのは人です。
否定的なことも書きましたが、うまくハマれば次々と提案されるプログラムを採用するだけで済んでしまうこともあります。ただ、それだけにちゃんと確認しないと分かりにくい不具合を埋め込んでしまう可能性もあります。
結局は設計とテストが重要なことに変わりはありません。
蛇足
「Copilot」を「副操縦士」と訳す人や記事が多いですが、現在の日本の航空業界では「副機長」が一般的かと思います。これは過去の航空事故などの経験から。
拙い記事でございますが、サポートしてもよいよという方はよろしくお願いします。著者のやる気アップにつながります。