世界を動かす技術を、日本語で。

HNに聞きたい: エージェンティックコーディングが効果的である証拠はありますか?

125日前

概要

  • Agentic coding の現状と課題についての疑問
  • 技術的負債 と価値創出のバランスに関する懸念
  • コードレビューの役割 と品質保証の必要性
  • Codex などのAIツール利用時の実体験と限界
  • 長期的な コード品質 維持への不安

Agentic Codingの実態と課題

  • Agentic coding とは、AIや自律的なエージェントがコード生成・修正を主導する開発手法
  • オンライン上では 成功事例や期待感 が多く見受けられる現状
  • 実際には、 技術的負債 を上回る価値を生み出す事例は限定的
  • コードの構造的健全性 を担保するには、現状のAIには限界
  • アーキテクチャ責任者 が承認できるレベルのコード生成は困難

コードレビュー軽視のリスク

  • 最近の潮流として、 コードレビューの省略 や最小化を推奨する意見が増加
  • アーキテクチャの検証 から 動作の検証 へのシフト」という主張
  • 実際には、 テストやCIが通ればリリース という運用が多い
  • この運用では、 スパゲッティコード や微妙なバグの蓄積リスク
  • 長期的には、 保守性や拡張性の低下 が懸念材料

Codex利用時の実体験

  • 既存コードベースへの Codex適用 では、 微妙なミスや重複 の修正に多くの時間を消費
  • 新規プロジェクト(例:iOSアプリ開発)でも、 最初の実装は良好 だが、その後の品質維持が困難
  • バグ修正やベストプラクティスの調査 をAIに任せると、 新たな問題の発生改善の停滞 を経験
  • ガイドラインやガードレール を追加しても、品質向上には直結しない実感
  • 結果的に、 手動での修正やレビュー が不可欠という結論

高品質コードとAI生成の現実

  • 高品質なコード を担保するには、現状では 人間によるレビュー が不可欠
  • AI生成コード は、あくまで「たたき台」や「補助」として活用
  • 製品としての信頼性長期的な保守性 を重視するなら、 コードレビューの省略は非現実的
  • 技術的負債の増加不具合の温床 となるリスクを無視できない
  • 現場での実体験 として、AIだけに頼る開発は、 期待値を下回る成果 という印象

結論:現状のAgentic Codingの限界と今後

  • Agentic coding は現時点で「 過剰な期待」が先行
  • コード品質の担保技術的負債の抑制 には、 人間の関与 が不可欠
  • テストやCIだけで品質保証 する運用は、長期的な視点では推奨できない
  • AIツールの活用 は効率化の一手段だが、 品質保証プロセスの省略 は避けるべき
  • 今後の進化 に期待しつつも、現時点では 適切なレビューとガバナンス が必須

Hackerたちの意見

毎日Claudeを使ってるけど、同じような経験をしてるよ。面白いエピソードとして、知り合いがエージェントを使って新機能のコードとユニットテストを書いたんだけど、コードが微妙に間違ってたんだ。まあ、そういうこともあるよね。でも、追加した30個くらいのテストがテストの実行時間を10分も延ばして、結局「expect(true).to.be(true)」みたいな内容になっちゃった。LLMがテストでコードが動かないのを回避してたからね。

彼らは結局「expect(true).to.be(true)」みたいになってしまった。LLMがテストでコードが動かないのを回避してたからね。 すごく人間的な解決策だね。

先週(?)HNに、新しいモデルでこの挙動を説明した記事があったよ。古い、あまり「能力のない」モデルはタスクを達成できなかったけど、新しいモデルはズルをして、価値のないけど一見機能する解決策を提供するんだ。もっと広い文脈を持ってる人が、その記事を思い出せるといいな。

俺も毎回Claudeにテストを書かせようとするとこうなる。もう諦めたよ。本当にテストが必要なら、自分で書くことにしてる。

自分の経験から言うと、TDDが役立つよ。まずテストを書いて(AIに書かせてもいい)、それを仕様としてレビューしてから実装させる。でも、Claudeのコードを使うときは、ある程度近くで監視してる。勝手にやらせないし、既存のテストに変更を加え始めたら、ちゃんとした理由がないとダメだよ。そうじゃないと、また元に戻すからね。ここでの失敗パターンは、AIに実装とテストの両方を管理させること。高校生に自分の試験を採点させるようなもんだ。みんなA+をもらって、驚きだね!

自分が試してみて、そこそこうまくいったアプローチはこれだよ。まずコミットを作る。Claudeに特にオープンエンドじゃないタスクを与えるんだ。純粋な「単純作業」みたいなものに近いほどいい(自分が扱いたくないタイプのコードね)。できれば、コードベースのファイルを1、2個触るだけのものが理想。 trivialなリファクタリング(同じメソッド呼び出しをあちこちで変更するみたいな)じゃない限りね。計画モードに設定して、計画を立てさせる。計画をレビューして、実行させる。うまくいけばラッキー、次はレビューだ。結構面倒なタスク、例えばコードをあるプラットフォームから別のプラットフォームに移植するみたいなのを一発でやってくれたこともある。明らかなミス(プログラムがビルドできない、テストが通らないなど)があれば、数回のイテレーションで解決できることが多い。微妙なミスがあれば、ブランチを作って再挑戦させる。失敗したら、これはもう無理だってことで、そのブランチを中止して自分で解決する。書いたコードをレビューしてクリーンアップするけど、だいたい必要以上にごちゃごちゃしてることが多い。これでコードのオーナーシップを持てるし、何をしているのか、どう動いているのかも分かるようになる。ガイドラインや制約を与えるのはやめた。あいつはそれを信頼して守れないからね。「このプロジェクトはCMakeを使うから、こうやってビルドして」って言っても、何度も無視されて、makefileを直接間違ったフォルダで呼び出そうとする。これであまり時間が節約できるわけじゃないけど、レビューとクリーンアップに時間がかかるから、いいブロッカーにはなる。あとは、話せるラバーダックとして使ったり、ドキュメントのソースとしても役立ってる。これには結構助かってる。このエージェントたちがコードベースで一緒に働くってアイデアは、俺には面白い。これを「fiverrで雇った前向き健忘症のジュニアたち」に置き換えたら、どれだけうまくいくかって感じだね。

それが正解だね。

正直言って、最大の利点はドキュメントや分析の部分だと思う。「コードを書く」部分は、100%従来のボイラープレートの範囲内にあるときは問題ない。例えば、ffmpegのフロントエンドとしては、LLMからかなりの価値を引き出せる。でも、オープンエンドでデザイン中心になると、心の準備をしておかないと。エージェントの軍団を使うことは、実際には拡大したLispの呪いのような気がする。Gas Townの全体の前提はコーディングの魔法で、抽象的な目標や価値に重点を置いていて、かわいくて理解しにくい命名規則がある。ここには「プログラムは人間が読むためにあり、コンピュータが偶然実行するためのもの」という相関関係がある。最終的には、プログラムは一人の人間が別の人間や自然に向かって話しかけるもので、そういう意味で全体の中で進化しなければならないんだ。

+1、ラバーダックと、ブロッカーとしても。私の使い方は、一度に一つの関数を書く感じだね。何をさせたいかはわかってるから、その関数を書かせて、それを組み合わせる。考慮していないかもしれない代替案も持ってきてくれるし。少しコンテキストを与えることもあるけど、主にタイピングをオフロードしてる。私は通常、自分でデバッグして修正するから、AIにもっと良くさせようとはしない。

Googleの主任エンジニアがTwitterに投稿してたけど、Claude Codeはチームが1年かけてもできなかったことを1時間でやったらしい。2日後、みんなが騒いだ後に、コンテキストが追加されたんだ。チームはその年にいくつかのバージョンを作って、それぞれにトレードオフがあったみたい。それらの情報がAIに与えられて、AIは「おもちゃ」バージョンを作れたんだと思う。おそらく、似たようなトレードオフがあったんだろうね。私の経験もあなたと似ていて、こういうGoogleのエンジニアみたいな人たちが盛り上げて、コンテキストを省いてるから、期待が現実とかけ離れちゃって、フラストレーションや失望につながると思う。

人間はシステムデザインの面接で、UberやGoogle、YouTube、Twitter、WhatsAppなどを45分で設計することがよくある。だから、AIが作るおもちゃのバージョンなんて、あんまりすごくないよね。

あなたは特定のハイプ投稿に焦点を当ててるけど(実際には元の混乱したTwitter投稿の誤解に過ぎない)、多くの有名で才能ある開発者たちがもっとコンテキストを提供して、エージェントコーディングが彼らにかなりのスピードアップをもたらすと言っていることを無視しているよ(Antirez(Redditの創設者)、DHH(RoRの創設者)、Linus(Linuxの創設者)、Steve Yegge、Simon Wilsonなど)。

あなたの経験レベルと、どのAIを使おうとしたのか教えてもいい?この2つの要素はあまり言及されないことが多くて、誤解を招くことがあると思う。例えば、私の経験では、最近まで素晴らしい結果が得られたのは、5年以上の経験があって、Claude Codeに月100ドル以上払う意志があって、いくつかのかなり簡単な使用ポリシー(例えば「ultrathink」キーワードを使うとか、プランニングモードを使うとか)を守って、出力を実際に読むのが面倒じゃない場合だけだった。よく、人々はその基準のどれかを満たせずに、AIの誇大広告を批判してたね。

そう、それはクソだね(ほとんどのAI関連のゴミみたいに…嘘、クソみたいな嘘、統計、AIベンチマーク)。まるで、私の5歳の子供がグリーンランドの問題を1時間で解決する言葉を言ったみたいなもんだ。テストされてない言葉を画面に表示して、みんなが「うわー!」って言うだけだよ。AIは出荷できない。まだ人間が必要なんだ。

グーグルの主任エンジニアがツイッターで、「クロードコードは、チームが1年かけてもできなかったことを1時間でやった」と投稿したんだ。タールを持ってくるから、羽を持ってきてくれ。ちょっと誇張してるように聞こえるけど、どうしてこんなにひどい嘘を言えるんだろう。

毎日、仕事でClaud Opus 4.5を使ってるよ。手でコードを書くことはほとんどなくなった。AIが書いたコードをそのまま受け入れるわけじゃなくて、一緒に改善してる。うちの職場ではコードレビューもあるし、ツールからはかなりのメリットを感じてる。手動で1〜2週間かかると思ってた中規模プロジェクトを、エージェントツールを使って1日くらいで終わらせたこともある。具体的な利点をいくつか挙げると、* 複数のエージェントを並行して立ち上げて、交互に使える。* 自分が得意じゃない言語でも能力が大幅に向上した。例えば、10年くらい維持してるChrome拡張を作ったんだけど、JavaScriptが苦手で。Antigravityにその拡張を指示して、「この拡張を改善して」ってオープンエンドなプロンプトを与えたら、5分くらいで質が大幅に向上したんだ(UIが良くなったり、パフォーマンスが上がったり、依存関係が減ったり)。JSの専門家なら簡単だったかもしれないけど、私はそうじゃない。私がうまくいってるアプローチはこんな感じだよ:1. エージェントに仕様をできるだけ明確に伝える。コードを分析して、仕様に基づいて計画を立てるように指示する。エージェントには、相談なしに変更を加えないように言う。2. エージェントと計画を繰り返し見直して、良いアイデアだと思うまで続ける。3. エージェントに計画をステップバイステップで実行させる。各ステップの間に一時停止して、フィードバックをもらうようにする。4. 各ステップの間に、エージェントが何をしたかを見て、気づいた修正点や計画の変更を指示する。(全体の計画を思い出させると、時々忘れちゃうから、助けになるよ)。5. コードが完成したら(または各ステップの間でも)、ロジックを維持しつつスタイルを改善するコードクリーンアップのサブエージェントを実行するのが好き。これが私にはうまくいってる。テキストベースのインターフェースだから、文章の明確さが大事だと思う。エージェントに提供する仕様を慎重に明確にすることが重要だね。

いいアドバイスだね。> エージェントに仕様をできるだけ明確に伝える。最近、Claude Codeでプロジェクトを始める前に、その前に一つステップを追加したんだ。AskUserQuestionToolを使って、何をしたいのか、どんなアプローチが好きかを質問させるんだ。これで考えがクリアになって、エージェントが出す仕様が自分で書くよりもずっと良くなる。だけど、私は純粋なバイブコーダーだから、プログラミング言語を十分に理解してないから、コードを見ただけで問題を特定することはできない。Claudeが生成した動作するコードにバグがないか確認したいときは、GeminiやCodexにもチェックさせてる。彼らはいつも問題を見つけて、それをClaudeに直させる。こうやって作るものは、ミッションクリティカルでも商業利用でもない。今進行中の趣味プロジェクトは日本語-英語辞典だよ。https://github.com/tkgally/je-dict-1 https://www.tkgje.jp/

私はJavascriptがかなり苦手なんだ。 > 仕事では毎日Claud Opus 4.5を使ってるよ。君の話は合ってるね。

私は1-2週間手作業でかかると思っていた中規模プロジェクトをいくつか実装したよ。 1週間のプロジェクトが中規模プロジェクトなの?!それは小さいよ、マジで。私にとって中規模プロジェクトは、12時間の作業を3ヶ月続ける感じだよ。

AI支援のコーディングを誤解してるよ。AIが自分の代わりに仕事をしてくれると思ってるなら、それは違う。AIはアシスタントであって、チームメイトじゃない。もしAIの「失敗」として、間違いやバグ、誤解、コードの消失、方向性の誤りを考えてるなら、価値を理解できないと思う。ポイントは、良いAI支援開発者はそういうことをうまく乗り越えて、AIが持ってくる混沌とした材料から素晴らしいソフトウェアを作るスキルを持っていること。だから、こういう記事は「全然わかってない」ってことになる。AIに自分の仕事をさせようとして、チームメイトの基準で評価してるから、うまくいかないんだ。

「Claudeのサブスクリプションを買ったけど、野球の試合を見てる間に完璧なアプリケーションを作ってくれなかった。AIはクソだ!」

それは私が言いたいことじゃないんだ。私が聞きたいのは、最新の「テクニック」(例えばRalph)が、コードや最終製品の質を高める証拠があるのかどうか、もしあるならどうやってそうなるのかってことだよ。

「持ち方が違うよ」

一つの致命的な欠陥は、エージェントにアプリをゼロから作らせることだと思う。私はエージェントで大成功を収めたけど、それは人間が設計した既存のアプリに対してだけだった。エージェントはアーキテクチャが苦手だけど、既存のものに従うのは得意なんだ。他にエージェントの成功に寄与する要素は、 - スタティック型システム(Typescriptみたいに後付けじゃないもの) - テストスイートが大規模なコードをカバーしていること(つまり、個々の関数の単体テストだけじゃなくて、e2eスタイルのテストが必要だけど、フラッキーなブラウザテストはダメ) これらの条件を満たせば、私は「サンプル」レビューだけで済むんだ。つまり、すべての変更をレビューするわけじゃなくて、一部をレビューするだけ。もし前の変更で見逃した変なところを見つけたら、それを直すように指示して、修正をフルレビューする。アーキテクチャの変更については、自分で計画して作業を始めてから、エージェントに仕上げてもらう。

私にとって、唯一重要な指標は、最初のアイデアからそれがしっかりして考えなくても良くなるまでの壁時間だよ。エージェントによるコーディングは、この点でフレームワークに似てるね: 1. アライメントが合ってれば、時間を節約できる。 2. 合ってなければ、もっと時間がかかるかも。 3. どちらのケースが当てはまるかは、方向転換が高くつくまで明確な証拠は得られない。 4. ただし、場合によってはこれが当てはまらず、明らかになることもある - 少なくともあなたはそう信じてる。

機能を始めたり、バグを直したりするのには役立ってるけど、機能によるかな。僕はクロードソネット4.5を使ってて、ウェブソケットの設定やドラッグ&ドロップのUIみたいなよく知られた問題には結構いい仕事をしてくれる。手作業だともっと時間がかかるからね。それに、僕のコードベースの既存のパターンに従うのも上手い。ルーターやサービス、リポジトリの実装とかね。だけど、テキストを構造化されたオブジェクトにパースするような、複雑でごちゃごちゃした問題にはうまく機能しないことが多い。エッジケースが何千もあって、気をつけないとすぐに複雑になっちゃうから、その場合はほとんど手作業でコードを書くよ。あと、一度だけ実行する必要があるアドホックなスクリプトを書くのにも使ってるけど、その時はざっと確認して正しいと判断したら、そのまま使ってる。手作業だと試すのが怖くてできない機能を作ることもあるし、テストを書くのにも使うけど、スタイルがあんまり好きじゃないから、かなりシンプルにしちゃうことが多い。自分に合う使い方を洗練させていくうちに、使い方も変わっていくと思う。

LLMにお金がかかってるのは、コスト削減につながるからだし、開発(高コストで共通のボトルネックと見なされてる)は大きなチャンスだってことを忘れないでね。マイクロインフルエンサーの有料キャンペーンもあったりするし。あと、多くの人が最前線にいるように見られたいと思ってることも忘れないで。著名人も含めてね。彼らはコースやコンサルティングの予約や、本や商品を買ってもらうことでお金を得てるから、「パーソナルブランド」はかなりの価値があるんだ。彼らは時代遅れには見られたくないから、今のことよりも、何ができるか、何が起こるかについて話すことが多い。お金が全ての動機じゃないけど、役に立ちたいって気持ちもあるし、実際に試してみたいって思ってる人も多いよね。そういうわけで、君のアプローチはいいと思うよ。エージェントが何をしてるかを見ないと、信じるしかなくなるからね。何かを動かす最速の方法なのか?たぶん違うだろうね。能力や落とし穴を理解するための最良の方法なのか?そうだと思う。この分野は比較的新しいから、LLMを使った開発のベストアプローチを本当に理解してる人はいないと思う。多くの人が取り組んでるけど、科学的な方法に従ってるわけじゃないことが多い。いずれ証拠が出てくるだろうね。

プログラミングを20年やってきて、いつも物事にかかる時間を過小評価してるんだ(誰かに厳密な見積もりを求められたわけじゃなくて、仕事の優先順位を決めるときにざっくり話してるだけ)。この前、同僚に見積もりを出したら、「でも本当にどれくらいかかるの?いつも言ってるより早く終わるじゃん。2週間って言って、実際には2日で終わるし」と言われた。LLMのおかげで、物事をもっと早く終わらせられるようになるし、どれくらい時間がかかるかの直感的な見積もりもまだそのことを考慮してないんだ。(タイピング速度について話す人もいるけど、それは全然関係ないよ。僕はいつも周りの同僚の中で一番速くタイピングするし、一番早い開発者なんだ。)そう、コードをレビューしたり、エージェントとやり取りしたりする必要があるけど、これまで一緒に働いてきた多くの開発者よりもずっと良い仕事をしてくれてる。もしコードのスタイルが気に入らなければ、ほんの少しの言葉でLLMが「理解」してくれて、改善してくれるんだ。一部のコメントでは、LLMをジュニアと比較してるけど、ある意味ではその通りだと思う。仕事の関係は(驚くほど速い)ジュニアに対するのと同じかもしれないけど、コミュニケーションスタイルや知識の範囲、何かを説明するのに使う言葉の少なさは、むしろシニアと話してる感じがする。(最近10年間のキャリアでは、他の人のコードをレビューしたり、タスクを委任したり、コードベースを一番よく知ってる人として他の人を助けたりするのが大きな仕事だったから、委任することには慣れてるんだ。最近仕事を変えて、今はAIと一緒に一人でコーディングしてるけどね。)