クロスマートのエンジニア、山田です。
プログラミング界隈では今更説明するまでもないGitHub Copilot。
弊社でも絶賛利用中です。
詳細や導入記事は探せばいくらでもあるので割愛して、今回は「どのくらい補佐してくれるのか?」を簡単に確認してみました。
いざ検証
今回は(おそらく)Webエンジニアの悩みの種、CSVの各種操作を行う処理を題材に試してみます。
ここまで入力した状態からスタートしてCopilot君を動かして見ます。
__init__ の候補が出てきましたね。確定します。
CSVの読み込みをするメソッドの候補…
…からの一気に書き込みをするメソッドまで作られました。
ここまでTabとEnterキーを連打していただけです。
ここでCopilotは出力を停止しました。指示内容が「読み書きが出来る」なので、指示通りの内容が出力された形になります。
検証レベル2
ここまでに生成された内容は与えられた指示通りにファイルを読み書きする程度のものでした。
つまり「指示を細かく出せばより詳しいコードを書いてくれるのでは?」とも考えられます。
よってもう少し指示を与えて検証を進めます。
与えようとした指示の先読みして提示してきたことに驚きつつも、最終的にこのように指示を出して見ました。
これでどのようなメソッドが作られるか検証します。
読み書きに関してはすでに出力済みなので割愛。
まずは1つめ。
CSVの書式検証です。自動的に標準ライブラリをimportして読み込めなかったらエラーとしているようです。
2つめ
CSVの書式の何が間違っていたのかを出力するメソッドです。
一見すると最初の内容と類似していますが、先程はboolを返却。こちらはNone or エラー内容を返すという違いがあります。
残りのコードの出力は以下のようになりました。
…というような結果です。
ここまでTabとEnterキーだけで出力が出来ることにも驚きましたが、特に驚いたのは「データフレーム」というキーワードを読み取ってpandasを使い始めたことです。
pandasそのものはPython界隈では広く使われているライブラリですが、先程からimportされているcsvとは違い標準ライブラリではありません。本当にびっくりしました。
ただし、細かく指示を与えれば全てやってくれるという感じでも無いようです。
たとえばCSVの書式の判定メソッドに対して厳密な定義を与えて見たところ、
最初のコードをそのまま書き出して、指示した内容がほとんど出来てない場合もあれば、
やや頓珍漢なコードを書き出したり…。
細かく指示をしたからと言って、こちらが意図したコードを書き出してくれるわけでもない感じというのが分かりました。
まとめ
他にも色々使ってみましたが、
・コメント(指示)をしっかり書く必要がある。
・「あるある」な実装は正確。
・ソースコードは沢山書いたほうが、意図したソースコードが来る可能性高くなる。
・とは言えレビューは責任を持ってやる必要あり(100%正確ではない)
…というように"副操縦士"という立ち位置が非常にしっくり来る印象です。
開発者が主体にならないととんでもないコードが書かれてしまいますが、ちゃんと見ていれば「ソースコードを書く」という作業をしなくて済むのは非常にありがたいな。と思いました。