GitHub Copilotとの向き合い方

GitHub Copilotを使い始めてから半年以上経った。
正直全く期待せずに使い始めたので、すぐに使わなくなるんじゃないかな~などと思っていたが、意外と今も使い続けている。
とはいえ完全にポジティブな思いだけがあるわけではないし、ある程度向き合い方が決まってきたという感じなので、ここまで使用して考えたことなどを書き綴っていく。

まず思っていたよりだいぶ賢い。
自分はあまり機械学習系の出力に期待していなかった。というのも院生時代の研究ぐらいで知識が止まっていたからである。
よって期待外れな出力が多く、すぐ機能をオフにしてしまうんじゃないかという懸念があった。
しかし実際に使ってみると、言語化が苦手な私の代わりにコメントを考えてくれたり、そのコメントからちゃんと文脈を理解して動くコードが生成されることに感動を覚えた。
特に自分は自明バイアスにかかってしまいがちで、コメントが少なかったりして後から読み返して後悔することも少なくなかった。しかしGitHub Copilotに身を委ねることで推敲がそこまで苦にならなくなり、ついでにそれっぽいコードも生み出してくれるため、以前と比べて圧倒的にコメント量が増えた。今までコメントをあまり残してこなかったくせに、PRで説明されるよりコード上にコメントとして残っていてくれたほうが嬉しいタイプの人間なので、後から自分のコードを読み返す際にも役に立っている。

あとは「この言語であの処理書くときってどう書くんだっけ…」といったような、ありがちな悩みが一瞬で解消できるのも良い。
自分の役職が上がってきたことによって、業務時間中はコードを書く時間より、設計などを行っている時間のほうが圧倒的に長くなってしまった。それでも単一の言語だけで戦うなら問題ないかもしれないが、当然実務では複数の言語を用途ごとに使い分ける。元々あまり記憶力が良くないのも相まってパッとは出てこないし、検索するにしても微妙に手間がかかってしまうし、タブもどんどん増えていってしまう…。
このちょっとした問題が、ウィンドウを切り替えずにエディタ上で解決できるのは、地味ながら体験が良い。

しかし当然、良いことだけではない。
予想はしていたが、明らかに「いや違うでしょ」みたいなコードが提出されることもある。なんならこれは明らかな分まだマシな方で、一見それっぽく動くけど潜在的なバグを抱えている、あるいはパフォーマンスや可読性の問題を抱えている、といったコードも提出される。これが本当に厄介で、疲れているときに脳死GitHub Copilotに任せてしまうと、あとから冷静になって見たときに「自分はどうしてこんなコードを…」という気分になってしまう。実際、同僚とも「このコード動くんだ」「ちょっと分かりづらいけど動くんだよね。でも今冷静になって見たら普通に初見殺しコードだから書き換え直すね」みたいなやり取りが発生してしまった。

これに対する対策としては、提出されたコードを盲目的に信じないという、ごく当たり前の結論になる。
しかしこの盲目的に信じないというのは、実際には結構スキルが必要となる要素で、要はレビュアーの気持ちになれないといけないということ。
その言語に対する理解や、あるいはプログラミングの経験値が足りないと、そもそも何がおかしいのかを判別できない。経験が浅い時代のレビューを思い返すと「この人に指摘できることなんかあるのか?」「自分が気付くようなことはすでに対策済みなのでは?」というような思考があったような気がする。
よって初学者がGitHub Copilotでガンガン実装進めるぜ~みたいな用途にはあまり向いていないように思う。逆に経験者が時短目的で「良いコードが生成されたら御の字」ぐらいの気持ちで利用する分には良さそう。

うまいことハマったときは生産性が明らかに上がるし、謎出力とバトルして無駄に時間を食う、みたいなケースもあるので、一概に「導入するべき」という結論は出しづらいが、それでもまあ全く使えないということは(言語にもよりそうだけど)そうそうないので、「とりあえず使って遊んでみたらまあまあ便利で面白いですよ」と紹介できるぐらいの良さはあると思う。