はじめに
LET運営の村山と毛利です。 社内の交流を活発にし、お互いの知識を伝搬する機会を設けるために、Livesense Engineer Talk(通称:LET)というチームを運営しています。 今回は、GitHub Copilot for Businessを社内導入して2ヶ月程経ったので、エンジニアにCopilotを使った感想を聞いてみました。
みんなの感想
みんなの感想をChatGPTに要約してもらうと、こんな感じになりました。
良かった点:RSPEC等のある程度形が決まっている形式の補完サポート、関数名・変数名等の補完、日本語文章の先読みによるクリティカルでない部分の過程の早期まとめ、高度なSnippetの提案、自動ログ保存といった補完的なものが挙げられます。
惜しかった点:文法の間違い、データのアクセスに対してのstring/symbolの使い分け、閉じカッコの過不足、入力済みの要素の保持でのストレス、サジェストのミスや警告の不足、コメントや他の部分のコードの書き方と違うサジェスト等が挙げられます。また、Copilotを用いる際には、能力の引き出し方に慣れなければならないことも言及されています。
色々ツッコミどころはありますが、詳細はそれぞれの感想をご覧ください。
ayumu838さん
使用言語: Ruby
ここがよかった
RSpecのようなある程度形が決まっている形式だとかなり補完して書いてくれる。例えば検証の時にバリデーションのテストでvalidな場合のテストケースを書くと、invalidなテストケースを自動で書いてくれるみたいなイメージ。
施策の検討の時に最近はメモアプリではなく、VScodeで空ファイルを作ってから、VSCodeで書くようになった。日本語の文章を書いている時に、ある程度書きたいことを先読みしてくれる。結論などのクリティカルじゃない部分は半分以上先読みしてそのまま使えるのでまとめるのが早くなった。最終的に、空ファイルではなくVSCodeの拡張にあるGistPadで、自分のgistへ保存するようにして、そこで文章を書いている。保存時に自動でログとして保存されるので快適。
ここが惜しい
- たまに文法の間違いをする。例えばHogeModelのとあるカラムの合計値を出したい時、正解は
HogeModel.pluck(:fuga).sum
だが、HogeModel.sum.pluck(:fuga)
という動作しない補完がされる。 - データのアクセスに対してstring,symbolの使い分けがあまり得意じゃないっぽい。
hoge[:fuga]
をやってほしいけど、hoge['fuga']
みたいに補完されるケースがかなりある。
池谷さん
使用言語: Python, Go, R, Bash, etc.
ここがよかった
- Python で再帰的なクラスを定義した際に、例えば中間ノードのメソッドを真似てリーフノードのメソッドを実装してくれる、みたいな挙動をしてくれて助かった
ここが惜しい
- 閉じカッコの過不足がある
赤坂さん
使用言語: Go, Python, Ruby, etc.
ここがよかった
- 普段あまり書かないGoで開発する機会があった。Copilotを使ったら、メソッド名だけでなく、並列処理やユニットテストの定型的な記述をどんどん補完してくれてとても助かった。
ここが惜しい
- 入力済みの要素まで補完してくることがある(”}”や”)”や”end”など)。Copilotの補完を確定した後に消したりしないといけないので地味にストレスを感じる。
中野さん
使用言語: Terraform
ここがよかった
Terraformはドキュメントをしっかり読まないとリソースに必要な変数がわからないことが多いが、一般的に必要な変数は補完してくれる。高度なSnippetみたいな感じ。
リソースとリソースを関連付けるときの指定方法が、IDなのかARNなのかその他の変数なのかわからないようなケースでも、ドキュメントを読まずとも正しいものを提案してくれる。もしかしたら間違っているケースもあるかもしれないが、今のところ間違いのケースには遭遇していない。
特に、変数名を推測・補完してくれるのがありがたい。命名規則も既存リソースの雰囲気に合わせてくれるし、既存に合わせての補完なのでTypoも生まれにくい。スムーズに書けるようになった。
ここが惜しい
仕方ないことだけれど、書こうと思っているものと全く違うサジェストをしてくることはある。関連付けるリソースが異なるケースなど、やや間違いが見抜きにくいこともある。良くも悪くも高度なSnippetな感じ。
サジェストを生成している間、待たされることはある。ただこれに関しては、自分でタイプするよりは断然速いので、困るほどではない。
富士谷さん
使用言語: Kubernetes manifest (Kustomize), Scala, Python, SQL, Bash
ここがよかった
- 自分で名前をつけたリソース名や変数名などを補完してくれる
- あまり理解できていない言語で、基本的な構文などをサポートしてくれる
- テストケースが、きれいに補完される
- コメントやREADMEなどの日本語も補完してくれる
- 体感6割くらいは「あーそれそれー」みたいな気持ちになり、1割くらいの確率で「Copilot、頭良すぎでは」みたいな気持ちになる
ここが惜しい
- SQLなどで、読みやすさのために改行多めにしていると補完されづらいと思うことがある
- 書きたいことが決まっているときの補完は、気を取られてしまってやや負担に感じることがある。補完を無視するのに慣れが必要。
- コメントから書いていくなど、Copilot が発動しやすい動きが要求されているように感じる。能力を引き出すコツが必要。
渡辺さん
使用言語: Terraform, Go, PHP, Bash, etc.
ここがよかった
- 関数を書くと、説明を自動で記述してくれる
- 技術書の写経をするときに、目で読むスピードで記述をできるようになる
- 面倒なシェルスクリプトを自動で生成してくれる
- HTMLのEmmetを初めて触ったときと同じような(それよりも強い)爽快感があった
ここが惜しい
- 日本語のブログの文章などを生成してもらうのには自分的には使えなかった。ひたすらポジティブかつ無味無臭な文章が生成される。
- 生成が早すぎて写経にならないことがある(関数全部生成されるなど)
- 技術書のサンプルコードのミスを見つけてくれたこともあった...
鈴木さん
使用言語 : Terraform, Bash, PHP, Python
ここがよかった
- TerraformのJsonをHCLに書き直すときなどGPTに書いてもらい、関連リソースはCopilotが一撃で自動補完してくれるなど、単純な移植作業の速度が爆速化した
- ロジックは頭にあるが言語特有の書き方がわからない場合にコメントでロジックを書いておくと勝手に書いてくれるので調べる手間が無くなった
- Bashなど特に枯れた技術だと知らない書き方を教えてくれるのがかなり良い
- trapでfunctionを実行など、マニアックでどう調べたら出てくるのかわからないやつはこれで覚えた
ここが惜しい
- 早く脳と直接接続して何も言わないでも仕事して欲しい
今井さん
使用言語: Ruby, PHP
ここがよかった
- 関数名などをうまくつけると、他の部分のコードを読んだ上で、かなりそれっぽいコードを生成してくれる。軽く手直しをすれば動く程度のものを生成してくれる。
ここが惜しい
- 一見するとあっていそうだが、間違っているコードを生成することがあるので、生成されたコードをしっかり確認する必要がある
- 関数名や変数名などの補完については、以前入力した文字列を補完してくれるエディタの機能で用が足りているかも
- 他の部分のコードの書き方との兼ね合いで、サジェスチョンが正確に生成される場合と、見当違いなサジェスチョンが生成される場合とはっきり分かれている気がする。Copilotに対する可読性みたいなものがありそう。
- 特に日本人の間違った英語が使われている関数名や変数名はサジェスチョンに悪い影響がありそう
- Copilotに対する可読性と人間に対する可読性はそこまで違わないように感じる
まとめ
みなさんからの感想を通して、Copilotが得意とするところ、まだ足りないところの知見が溜まりました。記事の一部は、「Engineering Park」という定期的に社内エンジニアが集まって議論する場にて、執筆してもらいました。雑談の中で盛り上がった話を社内に閉じず、便利に使うための一助になればという思いで、今回ブログにしました。
今後もCopilotのアップデートを楽しみにしながら、継続的に活用していきたいと思います。