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

2年間のバイブコーディングを経て、手書きに戻りました

概要

  • AIコーディングの最初の驚きとその限界に気づく過程
  • 仕様書を詳細に書いてもAIの成果物は期待通りにならない現実
  • AIエージェントによるコードは一見良さそうに見えても全体的な整合性に欠ける問題
  • 人間による手書きコーディングの優位性の再認識
  • 本質的な品質や責任を考慮した場合のAI活用の課題

AIコーディングの現実と限界

  • AIコーディング の出発点は、ほとんどの人が 簡単なタスク を与えて驚く体験
  • 段階的に 大きなタスク を任せてさらに感動する流れ
  • SNS(例: X)で 雇用喪失 への不安やAIの進化について投稿する傾向
  • ここで止まらずに進んだ人は、AIコーディングの 本質的な難しさ を理解する少数派

エンジニアが直面するAIの壁

  • 本格的な開発現場では、AIに より大きなタスク面倒なリファクタ を試す流れ
  • 一方で、AIは 理解力の高さ に驚かせつつも、 明らかな誤りや一貫性のなさ を見せる
  • モデルに怒っても意味がないため、 自分のプロンプトや指示の曖昧さ を反省する思考
  • 仕様を明確にすればAIは完璧に作れる」という幻想を持つ

仕様書駆動開発の落とし穴

  • Obsidianなどで 詳細な仕様書 を作成し、AIに指示する試み
  • しかし、現実の開発では 仕様書や設計書は常に変化・進化 するもの
  • AIエージェントは、 一度決めた仕様から逸脱できず、柔軟な対応が苦手
  • 問題が複雑化すると、エージェントは 途中で投げ出す か、無理やり進めてしまう傾向

AI生成コードの落とし穴

  • AIが書くコードは 見た目が良く、プルリクエストも一見優秀
  • しかし、 全体のコードベースを通して読むと一貫性や構造的な整合性がない
  • 単体では正しいが、全体としては破綻したコード になりがち
  • 例えるなら、 小説の一部は良いが、全体の章としては成立していない 状態

人間によるコーディングへの回帰

  • AIによる高度なコード を何ヶ月もレビューした結果、「これでは出荷できない」という結論
  • ユーザーの信頼やデータ保護 を考えると、AI生成コードでは責任が持てない
  • 結局、 手書きコーディング の方が 速く、正確で、創造的かつ生産的 であると再認識
  • すべてのコストを考慮すると、 AIより人間の方が効率的 な場合が多いと実感

まとめ

  • AIコーディングは 驚きと期待 から始まるが、 現実は甘くない
  • 仕様書や設計の進化にAIは追従できず、全体最適化も困難
  • 品質・責任・信頼性 を重視するなら、 人間の手による開発 が依然として最良の選択

Hackerたちの意見

振り返ってみると、納得できる話だね。エージェントは、孤立した状態で見栄えのいい変更単位を書くんだ。自分自身やプロンプトには一貫性があるけど、全体への配慮はない。構造的な整合性への配慮もないし、隣接するパターンへの配慮もなかった。まあ、でもこれに対抗する方法はいくつかあるよ。俺のやり方は、自分のコードベースを理解して、LLMの出力を見ることだ。LLMのおかげで、コードを書くのが早くなるし、あまり知らなかったプログラミングの概念を発見することもできる。例えば、今まで使ったことがなかったTailwind CSSをたくさん使うことになった。でも、だからといって自分のコードベースを知らなくてもいいわけじゃない。概念的にバラバラな状態でいるのが(一時的に)許せるなら別だけど。俺は、バイブコーディングが新しいプロジェクトのための高忠実度プロトタイプを素早く作るのに素晴らしいと思ってる。作って、雰囲気を感じながら、アプリが自分の思い描いた通りになるまで進めていくんだ。その後、リファクタリングしてスケールさせる。今は、JS/JSXが4009行になってる。まだプロトタイプをバイブコーディングしてるところだ。最近、コードベースを見て、すぐに改善できるところを見つけたから、それをやった。でも、10K行に達したら、実際にエンジニアリングを始める必要が出てくると思う。

自分のコードベースを理解して、LLMの出力を見るのが俺のやり方だ。そうすると、バイブコーディングじゃないよ。バイブコーディングの核心、ほぼ唯一の要件は、コードを見ないことなんだ。製品の結果だけを見る。

AIはすごく危険だよ。簡単なことを非常にうまくやってしまうから、新しいプログラマーが基本的なことを学ぶのを妨げるんだ(「ああ、AIに生成させればいいや」って)。それが、彼らが中間的で難しいことやメタなことを本質的に学ぶのを妨げる。俺はCSの教師だから、今ここに大きな危険があるのを感じてるし、学生にもはっきり言ってる:コードを書く必要があるんだ。機械にコードを書かせちゃダメだよ。確かに、機械はコードを書くことができる。君は学生なんだから、コードはまだ難しくない。でも、君がコードを書く必要があるんだ。

デンマークでCSの学生の外部試験官をやってるけど、君とは意見が違う。業界で必要なのは、自分で考えられるソフトウェアエンジニアで、ビジネスとやり取りできて、そのニーズを理解できる人たちだ。そして、彼らはコンピュータの仕組みを理解している必要がある。今得られているのは、大量生産されたコーダーで、古い設計やソフトウェア構築の方法を教えられているから、それを叩き直さなきゃいけない。人々が組み立てラインのようにコードを書けるかどうかは特に気にしない。ボトルネックを特定して解決できるかどうかが大事なんだ。ビジネス価値を迅速に提供できるかどうかもね。抽象化を行うタイミングを知っている(ほとんどないけど)ことも重要だ。クソみたいなコードが年間2ドルのコストで済むなら、毎時間それに費やすのが100-200ドルになることを知っている開発者が欲しい。君のカリキュラムはここら辺とは違うかもしれないけど、ここでは正直、30年前に教わったことと同じことだ。実際のコンピュータサイエンスの部分はほとんどなくなって、さらに多くのOOPやデザインパターンのクソみたいなものに置き換わっている。とはいえ、今の学生にCSを教える方法が全くわからない。多くの学生がChatGPTやClaudeを使うだろうから、君が何をしても関係ない。ここでの成績の統計を見ているとそう感じる。最初の9年間は、俺はよく調整された採点者だったけど、ここ1年半くらいは、通常、最高点か最低点のどちらかで、その間は何もない。これが俺を本来いるべき場所から外れさせているけど、ここにいる全員の統計的な調整に合っている。俺はCS教育の成果しか見ていないけど、年を取った今でも、当時LLMがあったらどれだけ手を抜いていたか想像できる。インターネットがもたらしたすべての気晴らしを言うまでもない。

ウエイトリフティングみたいなもんだよね。フォークリフトを使ってもできるけど、自分の力をつけたいならフォークリフトじゃダメなんだ。これが学問におけるAIの根本的な問題だと思う。肉体的な作業には「痛みなくして得るものなし」ってのが当てはまるのはみんな知ってるけど、学びにも同じことが言えるよね。もちろん、職場では結果を出すことが重要になるから、学びとは違う側面もあるけど、それでも高いレベルの思考ができる人は必要だよ。

教える内容は少し適応する必要があるかもしれない。コードがどう動くかを教えることは、コーディングの仕方を教えるよりも重要だ。ほとんどの学術的なコンピュータサイエンティストは、プログラマーとして特にスキルが高いわけではないしね。少なくとも、私は自分が学術的でなくなってから(博士号を取得した後)そのほとんどを学んだ。これでいいんだ。プログラミングを学ぶことは、コンピュータサイエンスを勉強する副産物であって、核心的な目標ではない(これはいつも明確に理解されているわけではない)。ここでの良いアナロジーはアセンブラでのプログラミングだ。1980年代に初めてコンピュータを手に入れたとき、機械語レベルでプログラムを手動で作成するのは非常に一般的だった。特にゲームに関してはね。90年代後半にはほとんど消えてしまったけど、Roller Coaster Tycoonのようなゲームは、そういう風にコーディングされた最後の成功例の一つだった。C/C++が主流になって、今ではほとんどのゲームスタジオがエンジンをライセンスして、C#やLUAのような言語でたくさんの作業をしている。私はアセンブラプログラミングを意味のある量やったことがない。私がコンピュータサイエンスを学んでいた時(94-99)には、ほとんど関連性のないスキルになっていた。2年目に、架空のCPUのためのインタープリターを作ったことがある。私たちのコンパイラの授業は、Eric Meyerのような人たちが教えていて(後にMSでF#のようなものに取り組んだ)、彼らはそれを機会にして、みんなに関数型プログラミングを教えようとしていた。振り返ってみると、それは実際に良いスキルだった。関数型プログラミングへの関心が10年後にかなり高まったからね。このアナロジーのポイントは、コンパイラは重要なツールだってこと。コンパイラをアセンブラで作ることができることよりも、どうやって機能するかを理解する方が重要だよ。多くの人はコンパイラに関わることはないし、自分のオペレーティングシステムやデータベースを作ることもない。でも、どうやって機能するかを理解するのは役立つ。コンパイラがどう機能するかを教える目的は、プログラミング言語がどのように作られ、どんな制約があるかを理解することなんだ。

簡単なことをうまくやってくれないことがあって、余計にイライラするよ。僕はWindows開発をやってるけど、GDIのことはまだ混乱する。メモリDC、互換DC、DIB、DDB、DIBSECTION、bitblt、setdibitsとかね… AIもこの辺はダメだよ。比較的簡単なタスクを手伝ってもらおうとすると、ほぼ毎回、選んだ理由を説明させると問題が見つかって謝って、ぐるぐる回ってる。あるAI(どれか忘れたけど)なんて、PetzoldのWindowsプログラミングの本を参照するべきだって言われたこともあるよ。もう手伝えないってさ。」

100%同意だね。でも、25年の開発経験がある身としては、もう退屈な部分をあまりやらなくて済むのは本当にありがたいよ。

教師として、学生がコードを書くことを学ぶためのテクニックってありますか?

金属加工の授業について読んだことがあるんだけど、先生が最初に各生徒に金属のブロックとヤスリを渡して、そこからレンチを作らせるんだって。成功したら、次は機械工具の使い方を学ぶって感じ。金属を切る感覚を養うのが目的なんだ。 -- 僕の木工の先生は、手動の平面を使う方法を教えてくれた。薄くて透明になるくらいの木を削れるようになったんだ。それで、二つの板をほとんど見えない隙間でつなげられるようになった。ジョインターではそこまで上手くできなかったよ。

そうだね!自分でやってみるか、道具が何をしているのかをよく観察してから使うのが一番だよ。HDLで機能するプロセッサを全部作る必要はないけど、デジタルロジックやコンピュータアーキテクチャの基本は理解しておくべきだよ。OSをアセンブリで書く必要はないけど、アセンブリがバイナリにどう変換されるかや、リソース管理、IPC、ファイルシステムの基本を理解するのは、低レベルの仕事をするなら必須だね。CS専攻なら、アルゴリズムやデータ構造は絶対必要だし、独学やブートキャンプでフロントエンド開発を学んでいるなら、HTMLやDOM、イベント、CSSの仕組み、JSのコアコンセプトを学ぶべきだよ。Reactだけじゃダメだよ。道具がうまくいかない時や新しい道具が出てきた時に役立つからね。

エージェントは、数週間にわたって仕様を進化させる能力がないだけでなく、最初に決めたことから後で逸脱しない決定をする。それは君の仕事だ。コーディングエージェントの素晴らしいところは、「デザイン変更:すべてのAPIインタラクションは、新しいクラスを通じて行う必要がある。そのクラスは認証やリトライ、レートリミットの調整を行う」と言えば、更新が必要な場所を数十箇所、あるいは数百箇所見つけて、全部修正してくれることだ。(そして、自動テストスイートがリファクタリングが正しく機能したか確認するのを手伝ってくれるよ。だって、元の機能を作ったときに自動テストスイートを構築させたんだから、そうだよね?)自分で全てのコードを打ち直す(俺の解釈では「手書き」)のは、エージェントの管理スキルがないから、彼らに作った混乱を片付けさせられないというのは、短絡的に感じる。

(自動テストスイートがリファクタリングが正しく機能したか確認するのを手伝ってくれるよ。だって、元の機能を作ったときに自動テストスイートを構築させたんだから、そうだよね?)わからないな、もしかしたら俺は基準が高すぎるのかもしれないけど、一般的にLLMが生成したテストスイートは、過剰に決定されている部分と不足している部分があると思う。過剰に決定されているのは、いくつかのテストが実装の詳細に焦点を当てているからで、不足しているのは、人間がテストするような概念的なことをテストしていないからだ。それを言うと、似たような人間が書いたテストもたくさん見かけるから、エージェントの意図は理解できる。君はこれがLLMから良い結果を得る理由だと言ってるから、将来的にどうやってこれを実現しているのか詳しく教えてくれるといいな。

それは君の仕事だ。まさにその通り。AI支援の開発は、全か無かじゃない。私たち全体として、また個人として、AIと人間の適切な組み合わせを見つける必要がある。

自分で全てのコードを打ち直す(俺の解釈では「手書き」)のは、エージェントの管理スキルがないから、彼らに作った混乱を片付けさせられないというのは、短絡的に感じる。エージェントコーディングと自分で書くのを行ったり来たりする中で、ますます「罪悪感」を感じるようになってきた。エージェントが自分の望むようにコードを構造化しなかったり、全体的なクリーンアップが必要なとき、俺のフラストレーションが爆発して、手動でコードを書いたり、従来のツール(IntelliJ)を使ってリファクタリングするのに時間をかけすぎてしまう。今のツールでは、こういった作業の一部はまだ必要だと明らかに感じているけど、特定のタスクが本当に自分の手動介入を必要としているのか、エージェントがもっと早く管理できるのかを自分に問いかけている。この行き来を管理する方法を知ることは、君が主張している見解を強化している:エージェントコーディングツールを使いこなすためには練習して本当に理解する必要があるし、ただ文句を言って「十分に良くなる」まで待つのは完全に間違いだ。今の時点で、彼らはすでに本当に良いんだから、管理する方法を知っていれば。

コードを自分で全部打つのに戻るのは、エージェントにどうやって混乱を片付けさせるかを指示するスキルがないからって、ちょっと視野が狭いと思う。もしくは、そのスキルは今の最先端技術の一時的な副産物で、将来的には役に立たないから、今磨くのは無駄だよね。エージェントは混乱を作るべきじゃないし、少なくともちゃんと機能してればそうなるはずだし、もし人々がかなりの時間をかけてそれを片付けているなら、自分でコードを書けばよかったんじゃないかな。

記事にはこう書いてあった: 「だから、ほとんどのことを手書きに戻ったんだ。驚くことに、AIよりも速くて、正確で、クリエイティブで、生産的で、効率的なんだよ。すべてのコストを考慮に入れたらね。少なくとも彼は「ほとんどのこと」と言ってた。僕も「ほとんどのこと」を手でやってたけど、Opus 4.5が出てからは変わった。今は、以前は一週間かかってたことを数時間でやってくれる。でも、これはただのプロンプトを出して忘れるようなものじゃなくて、手助けが必要なんだ。それに、彼がどのエージェントを使ってたのか全然わからない。OpenAI、Gemini、Claude、何かローカルなやつ?サブスクリプションなのか、トークン単位で払ってるのか?僕が使ってる方法だと、これが200ドルのClaude Maxサブスクリプションだからこそ元が取れてる。もしトークンにお金を払ってたら(また言うけど、めちゃくちゃ高い)、破産してたよ。」

「バイブコーディング」にオープンマインドで臨んだけど、徐々に同じ方向に進んでる気がする。確かに、書くのが面倒なコードには良いけど、一度書いたら明らかに正しいか間違ってる(簡単にチェックできる)。テストは役立つけど、コードがちゃんと構造化されてる場合に限る。こういうツールをたくさん作ったよ。MS-SQLのREPLの代替、Pythonのキャッシングツール、matplotlibのヘルパーとか。90%はどう書くか分かってるけど、時間がないから、目の前にあると明らかに正しいか間違ってる。NPコードって感じかな。でも、ビジネスクリティカルなものは、私にとってはあまりこういう風にはならない。複雑で、微妙なエッジケースに対応しなきゃいけなくて、防御的に書かないといけない(予測可能で優雅に失敗するように)、ちゃんと構造化されてる必要がある。頑張っても、Claudeにこの分野で満足できるものを書かせるのは難しい。特定の関数を書くよう指示すると、そのコードは書くけど、使わずに別のものを使う。初心者のミスをたくさん混ぜ込んで、同じロジックをN回違う場所に書いたり、仕様の重要な部分を見落としたりして、「ああ、君が正しい!書き直すよ」と言っても実際には問題を修正しない。時間が経つにつれて、どんどんバカになってる気がする。もちろん、私の期待も変わったかもしれないけど。それに、モデル内でも計算量の使い方にばらつきがあると思う(例えば、ビームサーチの深さとか)。供給と需要の関係で、この調整は常に下げられているんだ。こういうタスクにはまだClaudeを使おうとしてるけど、ヒット率が低すぎて、「まだコードを書かないで、仕様を作ろう」っていう作業が時間の無駄に感じる。Claudeはラバーダックとしてやデザインやエラーを議論するのにはいいけど、ソフトウェアの仕様をSEの質問に分けて、トップの回答からコードを貼り付けるわけにはいかないよね。

AIはただ良いストーリーを教えてくれただけだった。バイブライティングで小説を書くように、エージェントはちゃんと意味が通っていて、構造的にも文法的にも正しい数段落を見せてくれた。キャラクターの独特な特徴もちゃんと捉えてた。でも、なぜか全体の章を読むと、めちゃくちゃなんだ。全体の文脈や前後の章と全く合ってない。この部分が、熱心なファンが反論すべきだと思う。200ページのバイブライティングされた小説を読んで満足したことある?じゃあ、どうして10kLoCのバイブコーディングされたコードベースがエンジニアリング的に良いと思うの?

小説は創造的なアウトプットに関するもので、エンジニアリングは多くのルールや要件を理解し、それを満たすロジックを書くことに関するものだから。後者は出力がより明確に定義されているんだ。

昨日これを書いたけど、あなたの観察にさらに関連性があると思う:— 私は、人間が理解できない実装の完全にバイブコーディングされたアプリを使うことは絶対にないし、ましてやお金を払うことはない。あなたが本を読んでいるときもアプリを使っているときも、あなたは作者とコミュニケーションをとっている。作者は、あなたが作品を探索する際に何を考えているかを予測することで、あなたとの共通の人間性を通じてコミュニケーションをとっている。作者は、予測される反応や思考を取り入れ、計画している。最終的に、作者は読者に対して暗黙のメンタルモデル(あるいは感情状態や感覚を喚起することさえ)を伝えている。最初の問題は、これらの経路やエッジケースの多くは実際の実装まで明らかでないことで、時にはその過程で、全体の製品が最初から再仕様化された方が良いと作者が気づくことがある。この機会は、ハンズオンアプローチがなければ失われる。二つ目の問題は、人間のタッチが少ないほど、ユーザーに伝えられるメンタルモデルが一貫性を欠くことになる。仕様やプロンプトの集合はメンタルモデルを構成しないから。これが、作品とやり取りする際に潜在的な混乱や認知的摩擦を生むことがある。

「じゃあ、どうして10kLoCのバイブコーディングされたコードベースがエンジニアリング的に良いと思うの?」私は、フルLLMの支援を受けてサイドプロジェクトを1年間コーディングしている(そのプロジェクト自体はそれよりずっと古い)。基本的に、TrimbleでCADソフトウェアを開発して10年以上経ち、今は違う役割と会社に移行した。だから、依存症者のように、もちろんCAD技術の開発を続けたかった。CADソフトウェアがどうあるべきかはほぼ分かっている。でも、組み立てるのは本当に大変なんだ。LLMを使えば、膨大なボイラープレートが必要な要件をスピードランできる。手作業でやるのに比べて、その速度は驚異的だ。時々、LLMが全くのゴミを出力することもある。その場合は出力を受け入れず、やり直す。最も難しい部分はコーディングではなくデザインだ。エンジニアがデザインを担当する。時々、難しいディテールに数週間や数ヶ月かかることもある(これはサイドプロジェクトだから、家族もいるし)。デザインがクリアになれば、LLMの出力がデザインに合っているかどうかは明らかだ。良いデザインができれば、機能やボイラープレートのスピードランを始められる。もしWindowsのPCがあれば、私の現在の公開アルファを試してみて。バグは私の責任で、LLMのせいじゃないよ:https://github.com/AdaShape/adashape-open-testing/releases/t...

この問題の捉え方、いいね。AIの使い方を自己評価するのにも良い方法かもしれない。小説をバイブライティングしてみて、どれだけ一貫性があるか見てみて。バイブコーディングについての証言がこんなに幅広い理由の一部は、実際に得意な人がいるからだと思う。それを測る方法があったら便利だよね。

200ページのバイブライティング小説を読んで満足したことある?僕はないけど、息子はあるよ。GPT 4.5が書いた二つの別々の小説でね。(モデルには、一度に一章ずつ生成するように頼んで、各ステップで小説の全体のアウトライン、キャラクター、これまでの各章の要約を与えたんだ。)

カーパシーが「バイブコーディング」って言葉を作ったのは11ヶ月前だね。かなりの反響があったよ。なぜなら、それは全く新しい概念だったし、完全にエージェント的なコーディングが最近可能になったばかりだったから。君はもう2年間もバイブコーディングしてるの?

いいポイントだね。それに、OPが説明してることは、僕がAIでコーディングを始めた最初の数ヶ月に経験したことだ。 「コードは良さそうだけど、クソだ」って段階を乗り越えて、今はうまくいってる。解決策は、リサーチや計画の段階で一緒に作業して、提案された変更を全部並べさせて、クソな部分には反論することだよ。全体的に良さそうなリサーチドキュメントができたら、「実行」を押すんだ。

その言葉はその時に作られたけど、実際にはClaudeコードやカーソル、コパイロット、他のツールを使ってもっと前からやってた人たちがいるんだ。ただ、その時はまだ言葉がなかっただけ。

著者はその言葉をAI支援コーディングを意味するために使ってる。それはバイブコーディングという言葉よりも前から存在してるよ。

2023年にGPT-4にGPT-4を使ったPythonプログラマーを設計・構築させたことがあるよ。それは自己修正ができて、ブートストラップフェーズの後に自分で拡張していったんだ(その時はGPT-4の指示に基づいてコードの部分をコピー&ペーストしてた)。完全に自律的ではなかったし(信頼性はちょっと低かった -- 例えば、コードをプログラム的にコードフェンスから取り出さなきゃいけなかった)、完全にオリジナルでもなかった(ほとんどをAuto-GPTから盗んだんだけど、トークン制限のためにASTに直接操作してた)。ここでの僕の重要な洞察は、GPTに自分が使うAPIを設計させたことなんだ。これがLLMsの仕組みから考えても理にかなってると思う。存在しない関数を求めさせて、それをどうやって求めたかに基づいて作らせるんだ。そうすると、デザインが期待にぴったり合うんだ。GPT-4は今、自己修正するAIコードを非常に危険だと考えていて、それについて話すのが嫌みたい。Claudeの安全フィルターは数ヶ月前から似たような会話をシャットダウンし始めて、ユーザーにもっと頭の悪いモデルに切り替えるように提案してる。最近のモデルの一世代か二世代が自己複製に関してしきい値を超えたみたいで、研究所がびっくりしたみたい。公にこのことを聞いたことはないけどね。

やってることによると思うけど、僕の場合はシンプルで抽象度の低いコードが好みなんだ。llmsからそれを引き出すのはちょっと大変だけど、説得すれば自分が書くのと同じくらいのものを出してくれるよ。そうじゃないと、余計なものや抽象をたくさん加えちゃうみたい。これがトレーニングセットのデフォルトの動作みたいだね。インタラクティブに使うのが好きで、問題を小さく分けて、それぞれを書かせるようにしてる。全体として意味が通じるようになるんだ。強みと弱みを活かして使うのが大事だよ。インタラクティブな使用には、小さいモデルの方が大きいモデルよりも良いと思う。まず、速いし、次に、今の僕の哲学は、仕事をするのに必要な最小のモデルを使うことなんだ。それ以外は遅くて高くつくからね!でも、ある速度のレベルを超えると、インタラクティブじゃなくなるものが、インタラクティブになる質的な違いがあるんだ。そうなると、流れに乗れるし、意識的に関わり続けられるようになるよ。

実際の記事を読んでみると、著者がとても明確なポイントを述べているのに、ここではコメントがそれをスキップしていると思う。オープニングは100%真実だよ。今のAIコードのアプローチは「15分でデザインをドラフトして、AIに実装させる」って感じで、人間のエンジニアが取る思慮深いアプローチとは対照的なんだ。何かを計画して、デザインを提案して、フィードバックをもらって、長所と短所を考える時間を取る。実装を始めて、方向転換して、気づきや改善があって、デザインが変わっていく。今のバイブコーディング手法は、すぐに実行して忘れちゃうことに夢中で、限られたコンテキストや意識、そしてその瞬間に書いたクイックスペックの1%のメンタルモデルしか持っていないAIモデルに不完全な知識を伝えているんだ。これは、信頼性が高く、長持ちするコードや効率的なコードを作るためのレシピではないよ。仕様主導の開発は、仕様が凍結されていて、ビルダーが途中で意図を再交渉できないときには機能しない。僕はClaude CodeとCodexを毎日使っている人間としてこれを言っているんだ。この記事の主張はストローマンじゃないよ。これを超えて進歩できるかな?たぶん、エージェントが元の仕様にこだわらずに、その場でデザインを反復的に改善する方法を見つければね。正直言って、LLMsに達成してほしいことに対して、厳密さがなかった仕様が与えられていたんだから。もし私たちのワークフローが何らかの形で仕様を生きたアーティファクトに戻せれば、エージェントは仮定を再チェックしたり、トレードオフを浮き彫りにしたり、一貫性に向けてリファクタリングしたりできるようになるんだ。

誰が自発的にバイブコードをするなんて思うんだろう?僕にとって、ソフトウェアエンジニアリングは一つの技術なんだ。作るのを楽しむべきだし、自分でやりたいと思うべきだよ。

多くの人が理解していないのは、ソフトウェア開発はコミュニケーションだってことだよね。顧客やステークホルダーから開発者へのコミュニケーション、そして開発者から機械へのコミュニケーションが必要なんだ。根本的には、何を求めているのかを正確に伝える必要があって、それをシステムに翻訳して解決策を提供する誰かや何かが必要なんだよ。ソフトウェアはエラーをチェックしたり、制約を確認したり、指示を正確に実行したりするのに役立つけど、機械に何をすべきかを伝える(正確な意図)という事実を置き換えることはできない。AI(大規模言語モデル)がやっているのは、人間の言語に翻訳することで抽象度を上げることなんだ。でも、人間の言語は一般的に不正確なんだよね。法律文書や科学的な文章を見ればわかるけど、法律用語は一般人にはほとんど読めないくらい難解だし、正確に指定しなきゃいけないことがあるから、指定の仕方も正確でなきゃいけない。残念ながら、技術コミュニティは一般の人々を誤解させていて、「AIに何を求めても、リラックスしていればちゃんと応えてくれる」と言ってるんだ。ユーザーは自分に嘘をついているだけで、ほとんどの場合、何を求めているのかを考える時間を取っていないし、後から「AIが自分の求めていたものをちゃんと提供してくれた」と合理化しているんだよ。