最近Cline、CursorといったAIエージェント系の開発支援が盛り上がっているように感じますが、
以下のブログの通りGitHub Copilotにもエージェントモードがプレビューで公開されているので触ってみた所感メモ📝
GitHub Copilotのエージェントモードとは?
GitHub Copilotのエージェントモードとは、以下のドキュメントで記載されているGitHub Editで利用できる新しいモードです。
In agent mode, Copilot Edits operates in a more autonomous and dynamic manner to achieve the desired outcome. https://code.visualstudio.com/docs/copilot/copilot-edits#_use-agent-mode-preview
正確な説明になっているかは分かりませんが、与えられた要求に対してコードの編集だけではなくてテストや静的解析の実行等のタスクも実行しつつ遂行してくれるモードになっているかなと触っていて思いました。
まだプレビューなので利用するには Visual Studio Code Insiders が必要になります。( 設定を既存のVSCodeと共有するには Settings Sync が便利でした )
GitHub Copilot Agent含めた導入方法は以下を参考にしましたが特にハマりどころなく導入することができました。
GitHub Copilotを触って感じたこと
カスタムプロンプトの重要性
.github/copilot-instructions.mdを使ってカスタムプロンプトを定義できて、GitHub Copilotはこのプロンプトを参照して応答やファイル編集を実行してくれます。
実際にプロジェクトで利用する際には、プロジェクトごとの規約やアーキテクチャがあると思うので、その辺りをインプットすると大分精度が上がったような気がしました。
まず最初にGitHub Copilot自身にプロジェクトの利用言語・フレームワークやディレクト構成といった情報を元に.github/copilot-instructions.mdを生成してもらい、作業中行ったフィードバックを反映してもらうといい感じに内容が拡充されていって精度が上がっていって良さそうでした。
また、.github/prompts配下にカスタムプロンプトを配置して、任意のタイミングで添付して読み込ませたり、有効・無効を切り替えたりできる機能もあるみたいで、単純にタスクの種別によって切り替えるだけじゃなくて、開発中に発生したフィードバックをgithub/copilot-instructions.mdに追記させつつ開発していくのが良さそうに感じたので、チーム開発において競合を発生しにくくしたりとか、そういう面でも良さそうに思いました。
セキュリティの考慮
GitHub Copilot Editのエージェントモードでは、package.jsonに定義しているスクリプト等はコマンド実行時に事前に確認をとってくれるが、ローカルで色々コマンドを動かすのは間違って危険なスクリプトが実行されるリスクもあるので、やはりdevcontainerとかcode spaces的な切り離された開発環境の必要性が増しそうだなと思いました。
モデルによる精度の違い
最初はデフォルトのGPT-4oを利用してやっていたがプロジェクト固有の知識に依存しないシンプルなことは結構やってくれるものの、ちょっと複雑なことをやってもらおうとすると、すんなりいくケースが少なかった。
が、Claude 3.7 Sonnetに変えると大分コードの精度も上がって、編集反映までのレスポンスまでの時間が早くなれば普通に自分で書くよりも生産性が高そうな感じがしました😇
この辺りは日進月歩で進化してるので、プロジェクト固有の知識に依存しないコードの精度はどんどん上がっていくんだろうなと感じました。
AIエージェントの活用による開発の変化
AIエージェントを活用した開発、開発速度は間違いなく上がると思うけど、最終的な成果物がPull Requestでレビューというステップを踏む制約があると、人間が1日にできるレビューは限られているので、10x的な劇的な生産性向上は難しそうな気がしました。(やはりボトルネックは人間なのか。)
精度向上のためにAIが持っていない固有の知識を提供することが生成されるコードの精度にも直結する印象を受けたので、開発者がPdmの要件を元にAIフレンドリーな仕様書を書いてコードと同じリポジトリで管理していくとか、いかに仕様とか開発ルールとか、サービス固有の知識を開発で利用するAIに活用させやすい形で保持するかが、AIエージェントを利用した開発で大事になりそうな気がしました。
おわりに
AIエージェントを活用した開発、あんまりキャッチアップできてなくてSNSとかの投稿を見て、キャリアとか将来に不安を感じたりもありましたが、AIがコードを生成するためのインプット情報を与えること、生成したコードを評価すること、これを人間がやる必要があるうちはコードを自分で書く量は減るだろうけど、開発者が不要になるといったことは、まだ先なのかなとも感じた。
ただ、この辺りの進歩は凄まじいので、今後もキャッチアップしていきたいな思いました。