見出し画像

Github Copilot Agentでパワーが4倍に、1週間を振り返る

Ubie株式会社のyagiです。普段はソフトウェアエンジニアとしてプロダクトの開発をしています。2/7(金)にGithub Copilot Agentが解禁され、社内においてはGithub Copilot Businessを利用しているメンバーで利用が可能になりました。Github Copilot AgentはCursor ComposerClineと概ね似たことができ、エージェントに指示をすると目的を達成するまで自律的にコードの編集等をエディタ上で行ってくれます。

Github Copilot Agent、Cursor、Clineでそれぞれ細かい機能差はありますが、もはやほとんど気にするようなことではなくなってきたなと感じました。そこで、Github Copilot Agentを駆使すると、開発がどのようになるのか一週間実験してみました。


進め方

特になし。何でもかんでもGithub Copilot Agentでやってみるぞ、という意気込みだけ。

結果

あるrepositoryで自分が書いてマージしたPull Request数を、2月1日~2月7日までの一週間と、2月8日~2月14日までの一週間で比較してみました。

  • 2月1日~2月7日 (概ね人間のみの力、通常のChat等の力は借りている)

    • 10 Pull Request

      • 機能追加(小) 3

      • 機能改善 3

      • リファクタリング 1

      • 不具合修正 3

  • 2月8日~2月14日 (with Copilot Agent)

    • 44 Pull Request

      • 機能追加(中) 4

      • 機能追加(小) 3

      • 機能改善 15

      • リファクタリング 14

      • 不具合修正 8

数としては4倍程度差が出ました。内容についても、細かいタスクの完了だけでなく、機能追加等の大きめのタスクも増えています。また、これはマージしたPull Requestの数で、このほかにもマージには至らなかった実験的なコードがいくつかあります。

わかったこと

実験をする中でわかったことについてまとめます。

アイデアの実現ハードルが下がる (「やるだけ距離」が短く)

「やるだけ距離」とは、

方針は明らかで、かつそれが正しい見込みが強いので[やるだけ]なのであるが、やるだけ距離が大きいと、それを完了するまでに多大な時間と労力を払うことになり、やるだけなのに達成が難しいという状態になる。

https://scrapbox.io/mozamimy-public/%E3%82%84%E3%82%8B%E3%81%A0%E3%81%91%E8%B7%9D%E9%9B%A2

これが断然短くなります。アイデアがあり、実現のために必要なことも分解できていて、あとはデータベースのマイグレーションをしたり、APIを書いたり、画面を追加したりすれば終わるんだけどね、といった場合、それぞれの作業の重さ次第で必要な時間が変わってきます。しかしエージェントを使うと、データ構造を考えたりマイグレーションのためのコードを書いてくれたり、APIの追加、実装、テストなどもスイスイ書いてくれます。画面も既存の参考画面があればそれを参照して書いてくれます。人間はできたコードをレビューし動作確認や微修正をすれば大抵のことは済みます。実験期間においても、普段なら1週間ほどかかりそうなアイデアを、夕方のちょっと空いた時間に取り組んで完了できました。

定型的な作業をほぼ自動化できる

やったほうが良いけどまぁちょっと面倒くさいね、といったことをすぐに終わらせられます。この関数は分割しておいたほうがいいかもな、とか、テストパターン足したほうがいいけどな、とか、マジックナンバーを定数で定義しとかないと、とか、doc用のコメント整えないとな、とか。あるいはフロントエンドでCSSライブラリを置き換えるといった、やや大きめのことも取り組めます。実際にChakra UIAnt Designに置き換えるという取り組みを行っていますが、コードを触るついでに、最初にエージェントにAnt Designに置き換えて、と指示するだけで大体事足ります。やっておいたほうがいいけど今は面倒くさいなってことを後回しにする理由は無くなりました

いつでもどこでも何度でも

エージェントは実質24/365です。思い立ったが吉日、とにかく指示を投げられます。もちろんエージェントが書いたコードを呼んだり、動かしたりする必要がありますが、ゼロからコードを書くときに比べるとかなり認知負荷が下がります。これによって試せるアイデアの数が増えたり、その心理的ハードルが下がります。やればできると分かってるけど、ちょっと今日は気が重いな、って時もまずはエージェントに指示しておくことができます。

ROI判定にかける時間より早く終わることが多い

この画面のここをこうしたいな〜、重要度が〜、緊急度が〜、ROIは〜〜、と言っている間に終わるようになります。チームワークにおいては、この辺りの変更に関する考え方について更新していく必要があるなと思います。とりあえずPBIに積んでリファインして、といったものが、見つけた時はすでに終わっている、ということになる場合もあります。人間はより重要で複雑なことに集中できるようになりそうです。

新しいボトルネック

コードを書くハードルが大きく下がったことで、逆にボトルネックに感じる部分も見えてきました。

lintの速度

コードを書く速度が劇的に速くなったので、代わりにlintやlint fix等の待ち時間が増えました。この辺りの高速化は重要になると思います。

CI・デプロイの速度

PR数が増えたので、CI待ちももちろん増えました。デプロイも何度も行いたくなるので、待ち時間が気になってきます。

人間のレビューの速度

人間のレビューの速度はエージェントが無い時代においても問題になりがちですが、エージェントがあると更に問題になってきます。おそらくテストの充実やCodeRabbitなどの支援によって、人間の負荷を下げることが重要になるのではないかと思います。

テストの品質と実行速度

テストも概ねエージェントで書けます。しかし無駄なテストを量産しても実行が遅くなるだけであまり意味がないです。どれだけ重要なテストを高速に回せるかが重要になってくるように思います。

動作確認の速度

コードが出来ても動作確認はしないと完成とは言えません。特にUIを含むものはコードとテストだけでは完結しません。人間の眼が必要です。高速に変更を試せる環境を作ることは重要になると思います。特定の状態のデータを生み出すジェネレータや、特定の状態まで人間と同等の操作をする仕組みなどがあると嬉しいかもしれません。

人間は1スレッド

エージェントに指示を出していると、自分という存在は1並列でしかないと気づきます。24時間は直列で、どう頑張っても1人の人間は逐次指示をすることしかできません。これはチームが重要ということを示しているように思います。エージェントによって単体の力は拡張されましたが、それだけでは効果は限定的だと感じました。チームでエージェントを取り込んで活用することで効果が何倍も変わってくるように思います。

落とし穴

力には代償がある。フォースに目覚めた未熟なジェダイは暗黒面の危機に直面するのだった。(GitHub Copilot:エージェントの覚醒がスターウォーズっぽかったので…)

エージェントジャンキー

ある朝目覚めて、朝食を摂っているとき、まだエージェントに指示を出していないことに気づいてソワソワしてしまいました。これはジャンキーのシグナルです。あえて限界量を見に行っていたので、むしろジャンキー症状が出て面白かったくらいですが、しかし気をつけるべき症状であることには違いないです。エージェントに指示を出していないからといって何か損をしているわけではないです。やるべきことを見極めることが重要です。

必要ないものを作る

なんでもできるので、なんでもしたくなってしまいます。本当に必要なのかといった問いが引き続き重要でしょう。幸い実験では全く無駄なものを作るといったことはありませんでした。しかし、ある程度議論をすっ飛ばして実現できることが増えてくると、何をするか、何をしないかの手綱はより重要になると思います。出力は10倍になったけど9割無駄なものでした、だともったいないですよね。

脱線する

「必要ないものを作る」に近いのですが、これは、必要だけど今そこまでリソースを割かなくてもよいのではないか?というようなことです。例えばChakra UIのAnt Design化は、実現性が検証できたら、あとは通常の開発で遭遇した際に対応していけば良かったのですが、用もない画面をどんどんAnt Design化したりする時間がありました。使った時間はそんなに長くないのですが、明確に今やらなくてもよいことでした。こういったことに気づき、防止することは重要と思います。実現の時間が圧縮されたとしても、時間は有限だからです。

人間がやったほうがいい

エージェントにコードを書いてもらったあと、ちょっとした修正をエージェントに指示していることがあります。1行コピペするとか、importを直すとか、どうでもいいレベルのことです。Github Copilot Agentは今のところ定額なので、利用量については気にする必要はありませんが、指示を書き込むのと同じ労力で終わることなのに、指示を出して完了を待っています。目的と手段が逆転しています!気をつけましょう。

with Agent時代に向けて

実験の結果、1人がエージェントを最大限使うと概ね4倍程度の出力が出せると分かりました。しかしこれは四六時中エージェントに指示をしてひたすら出力を追い求めた場合である点に注意が必要です。ただ、うまく使いこなせば、おそらく2倍程度の出力は負担なく実現できるのではないかと思います。with Agent時代に向けて、これからどんなことが重要になりそうと感じたかをまとめて終わります。

チームの営みが重要

一人でできることの速度と範囲は飛躍的に向上しましたが、だからといってなんでも一人でできるわけではありません。特に専門性においては、ハードルが下がったとはいえ限界があります。実際に実験期間中にインフラに関する障害が起こったとき、アプリケーションが中心のエンジニアである自分は役に立ちませんでした。AIによって能力が拡張されたとしても、超えられない壁があると感じました。それぞれの専門性を伸ばしつつ染み出し、連携しあってインパクトを出す、その際に隙間を埋めてくれるのがエージェントだと思いました

チームの取り組み方のアップデートが必要

開発の前提が変わっていると思いました。この認識を揃える必要があります。たとえばテストを書くこと自体はもう寝ててもできます。デザイン調整はいつでもできます、軽微なバグはすぐ直せます。個別要望もうまく処理できます。ちょっとしたプロトタイプは誰でもいつでも作れます。ROIの考え方が変わっています。だからといって野放図に動くと良い結果は生まれないでしょう。まずは何のコストが下がるか、どの議論やミーティングは不要になるか、といった棚卸しと認識合わせをして、チーム with Agentを定義していくのがよさそうです。このあたりは統一的なものではなくてチーム毎に変わってくると思います。継続的にアップデートすることで無理なく出力を倍にできるはずです。

Ubieでは、with Agent時代に向けて共に働くメンバーを募集しています。

テクノロジーで人々を適切な医療に案内する」というミッションの実現に興味がある方はもちろん、エージェントを駆使できる環境ってどんな感じだろうなと興味が湧いた方も是非お声がけください。

いいなと思ったら応援しよう!