表明しておかないと、自分が最新技術を毛嫌いしてるだけの人と思われるかもと思ったので、いったん自分の考えを吐き出しておく。
自分は、情報を評価・抽出する系の作業 (文章を要約するとか、コードをレビューするとか) を AI にやらせるのはあまり抵抗感がなくて、趣味開発でも Copilot や CodeRabbit によるコードレビューのお世話になっている。
一方で、情報を押し広げる系の作業を AI にやらせると成果物の正確性や保守性に対する信頼性が全然足りない。「適当に書き殴らせてうまくいかなかったら全部捨てればいい」「コードの良し悪しは気にしない。とにかくそれっぽく動いていればいい」程度のものだったら別にいいのかもしれないが、何箇月も何年もかけて一つの製品を育てていこうという場合にはそのノリでは厳しい。
じゃあ AI が出した成果物を人間が頑張ってレビューすればいいかというとそれもなかなか辛い。数十行の要件や仕様を与えたら数百行の実装コードやテストが返ってくるというのは入出力の分量バランスが悪すぎる。プログラムの振る舞いに関する本質的な情報量は「数十行の要件や仕様」からほとんど増えてないのに、それが意図通りに成果物に反映されているかどうかを確認するためにその何倍ものコードを読むのは苦痛だ。しかも、設計の根底に関わるような誤りがあった場合はごっそり作り直しをさせることになったりするかもしれない。AI は文句の一つも言わずにコードを書き直してくれるかもしれないが、結局また新たな数百行を人間がレビューするはめになる。
AI の成果物に対する信頼性のなさは、本質的には AI の人格のなさに起因すると思う。人間同士であれば、同僚・チームメイトとしての付き合いの中で互いの気心や力量は解っていく。「誰々さんはリファクタリングが得意だから、あの人がリファクタリングしたコードはいちいちレビューしなくてもまず大丈夫だろう」みたいな手抜きとか「ここは先週教えたあのデザインパターンで一発だから。あとは説明しなくてもわかるでしょ」みたいな雑な指示はお互いのことが解っているから成立する。それは共に作業してきたあらゆる経験の積み重ねであって、とても数十万トークン程度のコンテクストウィンドウに収まる情報量ではない。モデルをバージョンアップしたら受け答えの仕方ががらっと変ってしまうような AI に人間の真似はできない。
人間はまだまだ AI のことをポンコツな機械だと思って接する必要がある。そのためには、AI が犯した誤りに対する駄目出しや軌道修正は早い方がいい。フィードバックサイクルは細かくたくさん回した方がいい。それがアジャイルってもんだろう。実装を一通り全部終わらせた後でまとめてレビューするよりも、実装している途中でその場でフィードバックした方がいい。カレーが出来上がってしまった後で「欲しかったのは肉じゃがなんだけど」と言ってもどうにもならないが、材料を切っただけの段階であればまだやりようがある。
じゃあ、フィードバックサイクルを細かく素早く回すコーディングスタイルはどこにあるのかというと、GitHub Copilot によるコード補完がそれだ。フィードバックのやりとりは数秒単位だし、一回当たりの量も数行程度なのでレビューに疲れることがない。Copilot にはもう少し積極的に提案を出して欲しいと思うこともあるが、フィードバックの速さと手軽さはコーディングエージェントよりも遥かに勝っていると感じる。AI が人間並みの記憶力を持つようになるまでは、私が AI にほいほいコーディングを丸投げすることはしないだろうと思っている。