最近は意図的にGitHub Copilotを無効にすることがある
別にみんなそうするべきとは全く思わないのだけど、僕は最近GitHub Copilotを意図的に無効にすることがあるので、そのへんについて雑に書いておく。
あらかじめ言っておくが、僕はGitHub Copilotを有効にすることもある。この記事もGitHub Copilotおよびそのユーザーを批判する意図は全くない。
GitHub Copilot が便利な場面
僕がGitHub Copilotを使い始めて少なくとも一年以上は経ってる。自分が書こうと思っているコードに近いものが簡単に生成されていくことに最初は感動したし、便利な場面がはたくさんある。
具体的に便利な場面を思い返してみる。
僕は仕事ではNext.jsでフロントエンドを書いたり、NestJSでバックエンドを書いたりしているのだが、その用途では便利だった。僕は自分が関わっているプロジェクトのReactやNode.jsの書き方はある程度わかっていた。だから「こういうコードを書きたい!」というのはある程度決まっていて、(文字通り)手を動かすのが遅かったり、集中力が維持できないというのがコーディングのボトルネックになっていた。
そういう場面においては、GitHub Copilotはよく機能すると思う。少しコードを書き始めたら、ほとんど狙ったコードがサジェストされて、tabを押すだけで良いというのは楽だった。
なぜGitHub Copilotを無効にするのか
じゃあなんで無効にするのかというと、理由は2つあって、1つ目は邪魔だからで、2つ目はコードベースを把握する機会を逃すからだ。
1. 邪魔だから
1つ目の理由である邪魔だからというのは、自分が書こうと思っているコードがあるときに、それとは全く違うものが画面上に突然現れると、思考がそっちに引っ張られて集中力が削られる感覚がある。つまり精度が悪いサジェスチョンは却って邪魔だ、ということだ。
これはReactやNode.jsで典型的なアプリケーションコードを書くときにはあまり問題はならないと思う。なぜなら精度が良いから。一方で、最近僕が貢献しているWebKitやメンテナンスしているPrettierを開発するときには、邪魔になることが多いように思う。これは完全に予想だけど、これらのアプリケーションのコードベースは一般的なWebアプリケーションのコードとは全然違うので、サジェスチョンの精度が悪いのではないかと思っている。
2. 学習機会を逃すから
2つ目の理由であるコードベースを把握する機会を逃すというのは、勝手にコードを書かれてしまうと自分の学習機会が減り、結果的にそのプロジェクトのコードベースをずっと把握できないままになってしまう、ということだ。これは本当に個人の経験であり、同意できない人もいると思う。
特にWebKitやPrettierなどのOSSプロジェクトにおいて「コードの書き方がわかんねーー」と思いながら他の人の過去のパッチを漁ったり、プロジェクト内の色々な構造を自分で追いかけなら理解していく方が、そのプロジェクトのコードベースをより早く深く理解できると感じた。
場当たり的に修正するのであればGitHub Copilotに頼り切ったほうが早いとは思うのだが、ちゃんと自信を持って理解してパッチを書くなら、いっそ無効にしてしまったほうが自分にとっては良いと思った。
おわりに
こういう理由があるので、僕は会社でウェブアプリケーションを作るときはGitHub Copilotを有効にし、OSSをやるときはGitHub Copilotを無効にしている。
みなさんはどのようにGitHub Copolotと向き合っているのだろうか。
Discussion