😸

GitHub Copilot のAgent モードで Vibe じゃないコードを書く時に気を付けたこと

に公開

先日、GitHub Copilot の Agent モードを使って 2000 行弱のコードを C# から Python に書き換えるということをやりました。
その時に Python のコードはほとんど自分で書かずに Copilot に書いてもらったときに気を付けたことをメモしておきます。

賢いモデルを使えるだけ使おう

やっぱり賢い AI の方が快適なことが多いです…。
私は Claude Sonnet 4 (Preview) を先日は使っていました。
GPT-4.1 でも良いのですが、こう粘り強くやってくれる感は圧倒的に Claude Sonnet 4 の方が自分の体感的には良かったです。

お願いすることは小さく

Agent モードのデモとかをするときには、「TODOアプリを next.js を使って作って!」のような大きなタスクを振って、いきなり書いてもらうことが多いですが、これをやると思った通りに走ってくれている間はいいですが、途中で思ったのと違う方向に走って行ったりする可能性がとても高いです。
そのため、何かをやってもらう際には「XXXXをするためにYYYYのクラスを作る必要があります。」みたいなアウトプットが多くても 1 ~ 3 ファイル(理想的には 1 ファイルの 1 メソッド)くらいの小さなタスクに分割してお願いします。

そうすることで、出力されたコードが自分の思った通りのものかどうか明確なので認知負荷が低く、また、もし思った通りのものが出てこなかった場合でも、どこが違うのかを明確に指摘しやすくなります。

いきなり書かせない

Agent モードが作業に入ると、何ステップか作業をしてくれますが、このときに自分がして欲しいことと違うことを始めることがあります。
それを防ぐために、コードを書いてもらうのではなく「XXXXをしたいのですが、どのような方法が考えられますか?コードは書かないで、考えられる方法を教えてください。」といった形で、まずはコードを書かずに考え方を聞くようにします。
そうすることで、Agent が自分の意図を理解しているかどうかを確認することができ、もし意図と違う方法を考えてきた場合や、ちょっと違うなと思うような方法を提案された場合は、コードを書かせる前に修正を加えることができます。

Agent の作業前にまとめを書いてもらう

お願いすることを小さくして、作業内容を確認した後は最終的に Agent にこれからやることを纏めてもらうようにします。
これは気休め程度の効果しかないと思うのですが LLM は Lost in the Middle という単語があるようにコンテキストが長くなってくると中間を忘れがちということがあるので、これからやることを纏めてもらうことで、Agent が何をするのかを明確にしておきます。そうすると直近のプロンプトにやるべきことが纏まっているので、Agent がその内容を忘れにくくなります。(という理論ですが、やらない場合とやった場合の比較はしていません)

参考になるコードがある場合は明示的に教える

お願いしたいことに対して明確に参考になるコードがある場合は Agent が自分でコードを探してみつけてくれることに期待するのではなく、明示的に「このコードを参考にして」といった形で教えてあげると、Agent がそのコードを参考にしてくれる可能性が高くなります。
大体のケースでは、Agent が自分でコードを探してくれるので、あまり明示的に教える必要はないかもしれませんが、見つけられずに迷走することもあるので特に自分が書いたコードを参考にして欲しい場合などは、明示的に教えてあげました。

TDD しやすいものは TDD にする

ゴールが明確でテストを書きやすいものをお願いする場合は、先に単体テストを書いてもらってから、そのテストを通すようにコードを書いてもらうと良いです。稀にテストの方を直してくれるのはご愛敬ですが、そうならないようにプロンプトで伝えてあげると良いです。
単体テストを書いてもらうときも、これまでのように小さく分割して、1 つのテストケースをお願いするようにします。1 つ完成形のテストケースが出来たら、それを横展開するようなお願いをしていくとスムーズです。

たまには人間がググる

Agent モードは強力で、自分が詳しくない分野に関しては圧倒的に Agent の方が知識があることが多いですが、どうしても Agent が思った通りのプランを出してくれないことがあります。そんな時は Agent に頼るのではなく自分で検索をして出てきたサイトを #fetch https://example.com のように指定して、Agent にそのサイトを読んでもらうと良いです。AI にネットサーフィンしてもらってもいいと思いますけど、AI が動いてる横で人間も少しは調べてもいいかなって感じです。特に GitHub の closed になっている issue は、解決策が書いてあることが多いので、そういうものを見つけたら Agent に明示的に渡してみましょう。

まとめ

ということで少しだけですが、自分が Agent モードを使うときに気を付けたこと、やったことを忘れないようにメモしておきました。
自分は Python はあまり詳しくないので書けないのですが、そういったものを Agent モードで学びながら書いてもらえたのでとても良い体験でした。

Microsoft (有志)

Discussion