GitHub Copilot for Business を導入したので、みんなに感想を聞いてみた
Leaner 開発チームの黒曜(@kokuyouwind)です。
最近は AI や LLMs 関連の話題が付きませんが、弊社でも GitHub Copilot for Business を導入しました!
今回は開発メンバーに GitHub Copilot を使った所感や、特にどんなコードを書くときに便利かを聞いてみました。
黒曜
主に使っている開発ツールを教えて下さい
利用エディタ: IntelliJ IDEA
使ってみた感想
Ruby と TypeScript で試しましたが、とにかく賢い ですね。
特に同じような記述が続く RSpec や定形コンポーネントを書くときには、最初の 1 行だけ打ったら後は Tab と Enter を打つだけでコードが完成してしまったりします。メソッド名・テスト名・コメントなどで「なにをやりたいか」が Copilot に正しく伝わるほど正確な予測をしてくれる印象です。
補完を生成してるかどうか分かりづらいのはちょっと難点ですね。何か候補を出してくれるかなーと数秒待って、何も出てこないとちょっと悲しい気持ちになります。まぁステータスバーを見てローディング表示になっているかで区別はできるんですが、候補を待つのが癖になってしまっています。
また Copilot のコードを信用しすぎるとたまにとんでもないミスが紛れ込んでいることがあるので、テストをしっかり書いて動くコードになっていることを保証するのがいっそう重要になってきそうです。
特にこういうときに便利!
RSpec で context
を使って複数のパターンをテストするときは高い精度で予測してくれます。
例えば context '未ログインのとき'
を定義しておくと、次に context
と打つだけで context 'ログイン済みのとき'
を中身含めて推測してくれます。
やはりイチからコードを書くときよりも、既存のコードを横展開するときのほうが高い精度で予測してくれる印象です。そういう意味では、極力その言語らしいコードや慣例に従ったコードを書くことでより便利に使えそうです。
lulu
利用エディタ: RubyMine
使ってみた感想
- 良かったところ
- コードコメントをステップごとに書くと汎用的なコードは結構いい感じに変数やメソッドを拾って生成してくれる
- テストコードの記述が総合的に大分楽になった
- 気になった所
- 既存のコードを学習してサジェストしてくるので、リファクタリング中などは修正したい古いロジックがサジェストされるため使いづらい
- RubyMine の拡張だとタブキーでサジェストを採用するが、癖でインデントや変換候補選択のつもりでタブキーを押してしまい、サジェストを採用してしまうことがある
- 執筆時点で RubyMine の GitHub Copilot 拡張にキーバインド設定が無い…
- その他感想
- これからはコメント文自体のレビューもしていかないとなぁと思ってます
特にこういうときに便利!
- RSpec のテストデータ生成時に let で適切に名前付けするといい感じに factory 定義使って生成してくれる
- another_company_XXX とか outdated_XXX みたいなやつ
- あくまで既存のコードからの類推なので、 factory_bot の定義にない trait を使ってそれっぽいコードを生成する場合もある
- 走らせるまで気付かず後から修正に時間がかかってしまうことも
- 連番つけて複数データ作る場合に関連の補完がとても賢い
phigasui
利用エディタ: GNU Emacs
使ってみた感想
- Emacs でも使える!嬉しい!
- zerolfx/copilot.el: An unofficial Copilot plugin for Emacs.
- 非公式だけど、公式の Neovim 向けのプラグインのバイナリを使ってるみたいなので同じことできる
- VSCode や IntelliJ と違ってこれまでのコード補完と Copilot の提案同時に表示できるようになっている
- めんどくさい記述をよしなに書いてくれるのがありがたい
- RSpec の context とかメソッド呼び出しの引数とか
特にこういうときに便利!
- RSpec でおもむろに describe 記述するとよしなに context を作りはじめてくれる
- メソッドに渡す予定の変数が存在している場合、メソッド名の書き出しでよしなに引数まで補完してくれる
- メソッド定義しつつ、宣言的にロジックを書いていくと、補完してくれやすい
glico
利用エディタ: Visual Studio Code
使ってみた感想
-
久しぶりに触る言語や機能 でコーディングするときに便利
- Rails migration とかたまにしか書かないのでよく書き方忘れる
- コード内にコメントをしっかり書くといい精度で補完してくれる
- とはいえ、使い慣れている言語 だったらそのままコード書いてしまった方が早いケースも
- 一般的によくあるコードパターンじゃないくても、プロダクト内で頻出のパターンは徐々に学習してくれるらしい
- まだあまり時間するところまで使い込んでいないので、使い込んで育てていきたい
特にこういうときに便利!
- テストコードなど定型的かつ繰り返しの記述を少しずつ変えて書くようなケースで使いやすい
- 例:郵便番号バリデーションのテスト(Ruby on Rails)
RSpec.describe PostalCodeValidator, type: :validator do let(:model) do Struct.new(:postal_code) do include ActiveModel::Validations validates :postal_code, postal_code: true end end describe '#validate_each' do subject { model.new(postal_code) } context '適切な値の場合' do context '空白でエラーにならない' do # ... end context '7桁の数字でエラーにならない' do # ... end context 'ハイフンあり8桁の数字でエラーにならない' do # ... end end context '不正な値の場合' do # ... end end end
- 例:郵便番号バリデーションのテスト(Ruby on Rails)
- 似たようなレイアウトのページなどある程度パターン化できるコード
merotan
利用エディタ: Visual Studio Code
使ってみた感想
- JSON 色付け係から、tab + enter を押す係になりました。
- 変数名とかをよしなに理解して、これがしたいんでしょ?というのを結構いい精度でだしてくれるので嬉しい。
- たまにそれじゃないんだよな〜ということもあるけど、それ以上に便利すぎるのでよい。
特にこういうときに便利!
- テストを書く時。
-
context 'これテストしたい'
の「これテストしたい」の部分を正しく入れればだいたいよしなに書いてくれる。 - その後エンターを押せば、足りていないテストこれやでとかをガンガン出してくれるからだいぶ楽になる。
- よくコピペしてたものがそんなことしなくても良くなったのはとてもよかった。
-
shimada
利用エディタ: Visual Studio Code
使ってみた感想
- 良かった点
-
copilot
の名の通り、しっかりと書き手のサポートをしてくれる- 現時点では「なくても困らないが、あるとかなり便利」という感想
-
- いまひとつな点
- コメントを書いているとその続きも提案してくれるが、書こうとしている内容とはずれているなと感じることが多い
- 変に先回りしようとしている感じ
- その他
- Q&A機能が便利そうなので、コードリーディングで使用してみたい
特にこういうときに便利!
- 主にテストコードを書くとき
- コメント代わりに日本語メソッドでテストコードを書いた時に、一発でほぼ要求通りのテストコードを提案してきたときは感動した
- それまで書いていたテストコードのパターンからうまく学習してくれたような挙動だった
まとめ
感想をざっと眺めると、テストコードを書くときに便利という声が多いようです。また慣れない言語を書くときにサポートしてくれるのが良い、という声もありますね。
一方で間違ったコードや意図に沿わないコードを出すこともあるため、あまり信頼しすぎず生成コードを確認したりテストをちゃんと実行するのは重要そうです。
今後は GitHub Copilot X として対話 Q&A 機能や PR 自動レビュー機能も発表されているため、これらも利用可能になり次第活用していきたいですね。
Discussion