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

バイブコードはレガシーコードです

2025年7月31日原文(blog.val.town)

概要

  • "vibe coding" はAndrej KarpathyによるAI支援型コーディングの新語
  • レガシーコード とテックデットの問題点を指摘
  • プロトタイプや使い捨て開発 にはvibe codingが有効
  • 大規模・長期運用 には慎重なAI活用が必須
  • AI時代でも理論構築能力 の重要性を強調

「vibe coding」とレガシーコード

  • Andrej Karpathy が提唱した「vibe coding」は、AIがコードを書く際に「コードの存在すら忘れる」ほど直感的な開発スタイル
  • 誰も理解できないコードは legacy code(レガシーコード) と呼ばれ、 テックデット の温床
  • レガシーコードは 保守性の低下バグ混入リスク を招く
  • プログラミングの本質は 理論構築 であり、単なるコード量ではない

vibe codingの適用範囲

  • vibe codingプロトタイプ使い捨てアプリ に最適
    • 例:週次成長率計算アプリ、NYT Connections評価ツール、プロポーズ用アプリ
  • 小規模・短命なプロジェクトなら、 理解度が低くても問題なし
  • コードの理解度が低いままでも、 迅速な開発体験 が可能

vibe codingのスペクトラム

  • vibe coding には理解度の幅が存在
    • エンジニアは「Webアプリ+永続DB」と指定するだけで 理解度が高い
    • 非エンジニアは「アプリ」とだけ依頼し、 技術的背景を理解しない
  • 大規模プロジェクト を非エンジニアがvibe codingで作るのは 危険
    • 例えるなら「クレジットカードを子供に渡す」行為
    • 最初は快感 だが、後で ツケ(デット) がやってくる

維持・運用を見据えたAIコーディング

  • 2025年以降、 本格的なシステム開発 には慎重なAI活用が必要
    • Andrej Karpathyの言葉:「 AIは知識豊富だが、しばしば誤魔化す。慎重・防御的・学習重視で使うべき
  • Val Town ではAIアシスタント「Townie」を活用
    • vibe coding にも、「 慎重な編集」にも対応
    • 使い分け が重要

AIと人間の役割

  • AIの進化 でコーディング環境は変化中
  • それでも 理論構築コードの読解力 は不可欠
  • 非エンジニアがAIだけで大規模開発 するのはリスクが高い
    • 最終的には 人間自身がコードを読む必要性
    • 理解不能なレガシーコード修正より、最初から書き直す方が楽な場合も多い

謝辞・参考

  • 本稿は「The Role of the Human Brain in Programming」講演の内容を要約
  • Emily (フィアンセ)、 Malte & Rippling (会場提供)、 Geoffrey Litt 他多くの協力者に感謝
  • Simon WillisonAndrej Karpathy の冷静なAI論にも言及

Hackerたちの意見

面白いことが起きてるね。エンジニアリングについてあまり知らない人たちや、もっと知ってるはずの人たちが広めてる誤ったナラティブがネットで流れてる。彼らは、ジュニア開発者が今や10倍も生産的で、プロジェクトマネージャーが自分でコードを出荷してるって主張してる。さあ、目を閉じて5秒間、そのコードがどんなものか想像してみて。100%レガシーで、使い捨てのコードだよ。問題はAIでも、PMがFigmaをコードに変換することでも、ジュニア開発者が必死にプロンプトを打つことでもない。真の問題は、期待と結果の間にあるギャップなんだ。そのギャップが存在するのは、人々がエンジニアたちが何年もかけて正しく定義した用語を混同しているから。 - リーンプロトタイプは使い捨てプロトタイプとは違う - MVPはリーンプロトタイプとは違う - そして、製品はMVPとは違う リーンプロトタイプは出発点で、アイデアをテストして洗練するための粗いモデルなんだ。それがうまくいけば、MVPに進化するかもしれない。MVPは、コアな仮定を証明し、市場に本当にニーズがあることを示すと、製品になる。そして、使い捨てプロトタイプはその名の通り、初回使用後に捨てるもの。バイビングツールは使い捨てプロトタイプを作るのに最適で、LLMを活用したIDEは実際の製品を作るのに向いてる。今のところ、エンジニアだけがIDEの外でLLMプロンプトを使ってリーンプロトタイプを作れる。他の人たちは、ただ使い捨てコードの上にシンプル(で動いてる?)ソフトウェアを作ってるだけだよ。

プロダクトの視点を超えて考えてみると、技術的に言って、ジュニア開発者やPMが技術的に何を望むかを決めるのより悪いことは思いつかないね。キャリアの中で、週に一度はひどいアイデアを却下しなきゃいけなかった。無駄にリスクが高かったり、マイナーなユースケースを超えてスケールしない可能性があったりするから。数年後にはコンサルタントとして非常に利益が出るだろうと予想してるよ。

そのギャップが存在するのは、人々がエンジニアたちが何年もかけて正しく定義した用語を混同しているから。これは、私がソフトウェア業界で約10年観察してきた大きなトレンドの一つだ。これらの用語は、実際には水冷却器の周りでの議論や、書籍や記事、こういった技術フォーラムでの数ヶ月、場合によっては数年にわたる議論の結晶なんだ。ベテランがその言葉を口にすると、過去の会話がすぐに思い出される。新しい世代が入ってきて、その議論に参加していないから、専門家を模倣しようとして専門用語を使うけど、その言葉の裏にある実質を持っていない。単にその言葉だけを持っている。今やそれは、定義が曖昧で、複数の人にとって異なる意味を持つバズワードとして使われている。誰もその言葉の正確な定義や、自分にとっての意味を明確にできない。なぜなら、彼らは最初からその議論に参加していなかったからで、その文脈での意味や使い方を理解していないから。「アジャイル」「テクニカルデット」「DevOps」、そして今は「バイビングコーディング」。HNには「バイビングコーディング」の意味の変化についての記事があったけど、これはソフトウェア業界ではよくあることだよ。言語の雑さの他の技術的な例としては、JavaScriptのオブジェクト、JSON、辞書、ハッシュマップの混同がある。コンピュータサイエンティストにとっては、オブジェクト指向プログラミングの構成要素、シリアライズのためのJavaScriptオブジェクト表記、抽象データ型、具体的なデータ構造がそれぞれある。でも、JavaScriptプログラマーにとっては、ただの「オブジェクト」なんだ。言語的・概念的な空間の精度が、もっと解像度やニュアンスのあるものから、1ピクセルに減ってしまったんだ。[0] https://simonwillison.net/2025/Mar/19/vibe-coding/ [1] https://news.ycombinator.com/item?id=43739037

他の人たちは、ただ使い捨てコードの上にシンプル(で動いてる)ソフトウェアを作ってるだけだ。私は「動いてる」の定義をもっと明確にすべきだと思う。例えば、生成されたUIはみんな同じに見えて、微妙に間違っていたり壊れていたりすることが多い。最初は「動いてる」と思えるかもしれないけど、最初のユーザーテストで失敗することが多い。生成されたUIはすでに時代遅れに感じるし、トレーニングの瞬間に流行に従っているだけで、新しいものを生み出すことには失敗している。

そして、製品はMVPとは同じではない それ、僕が働いたほとんどの会社に言ってみてよ!最近のディレクターやC-suiteの「次の四半期までに形にしろ」っていう態度が、開発者がMVPを作って次のことに移らされるようなクソみたいな状況を生んでる。君が言ったように、実際には「バイブコーディング」なんて関係ないんだよね。ある意味、彼らの言ってることは正しい。機能の豊富さの認識が、品質に関係なく利益に影響を与えるから、実際に製品を比較してる人は少ないし、実現可能だと仮定して。開発者(今はエンジニアって呼ばれてるみたいだけど)は、最近プロトタイプを作る権限すら与えられてるのかな?確かにそういうことはあるけど、あまり一般的ではない気がする。ゲーム業界や本当のテクノロジー(「ビッグテック」じゃなくて)ではそういうことがあるかもしれないけど、ほとんどのコーディング会社はそういう余裕を持たせてくれない。結局、MVPばかりだよ。せいぜい、バイブコーディングはそのプロセスを加速させるだけで、品質は落ちる。

完璧に作られたコードは、マーケットに最初に出ることと相反するって言えるかも。僕が働いたどの会社も、MVPをそのまま進めて、どんどん機能を追加していって、市場を独占するまで行くんだよね。それから、マイクロサービスって呼ばれるものに分かれて、サービスレベルでは理解しやすいけど、同じビジネスプロセスに統合するのは悪夢みたいな状況になる。次の…MVPによる避けられない混乱につながるんだ。

過去には、異なるマインドセットを持つ他の開発者について話してた。今見ているのは、誰も理解できないコードに対する開発者の疲れだね。通常、それがエンジニアの介入を呼び起こして、壊れた部分をもっと有用でメンテナンスしやすいものにしてくれる。そしたら、アーキテクトがコードベースを見て、複雑さを減らそうとする。今は、LLM以降、開発者が書いたコードが100倍になって、エンジニアやアーキテクトは完全に無視されてる。これが今観察していることなんだ。これをテストする方法を見つけたら、例えばTDD MCPサーバーやDDD MCPサーバー(または好きなワークフローやアーキテクチャ)で、トリリオンダラーのスタートアップの可能性があるよ。コードレビューの効率をスケールさせる必要がある。今のところ、その概念は完全に壊れていて、十分にスケールしないから。

そして、製品はMVPとは同じじゃないよ ハハハ、面白いね :-)

企業が内部用にコードを書くのを見たことある?バイブコーディングと変わらないよ。ただ、LLMにペンテストを通すためにコードベースを強化するよう頼むと、何かしらのことをしてくれる。企業は本当に気にしないんだよね。

今週、うちの会社のPM(エンジニアのバックグラウンド持ち)がAI生成のゴミをチケットに投稿してきたんだ。めっちゃイライラした。こっちが「xyzコードはどこ?」って聞いたら、存在しない、妄想だった。さらに「abcのユースケースは検証した?」って聞いたら、してないって。で、PMが「この機能は簡単だ、AI生成のコードでできる」って経営陣に話を持って行ったけど、実際にはこの機能を出すために解決しなきゃいけないユースケースの5%も解決できてなかった。今の状況はこんな感じ:口だけで結果は少なく、技術的じゃない人たちがいろんな角度から同じクソみたいな話を聞かされてる。

でも、もう少し踏み込んだ方がいいと思う。すべてのコードはレガシーコードなんだ。だから、バイビングコーディングがコードを書くのを早くする能力は特別じゃない。誰も理解してないコードだからね。君が手作りしたコードも悪い。すべてのコードがレガシーだと認めると、早くコードを書くことがメンテナンスの観点から役に立たないことが明らかになる。自分の仕事を増やしてるだけだから。ライブラリは問題を解決するわけじゃないけど、ちゃんとメンテナンスされてれば、少しは楽になるかも。結局、他の誰かの問題になるからね。信頼できるようになれば、ほとんどレガシーじゃなくなる。でも、頻繁に変わったり、インターフェースが悪いライブラリは、簡単に変更できないレガシーコードに過ぎない。コードを書くほど、結局は問題から抜け出す唯一の方法は、少なくすることだと気づくんだ。必ずしも君自身ではなく、一般的に必要なものが少なくなるってこと。すべての複雑さは、結局は誰かが忘れてしまったパズルで、その誰かはおそらく君自身、一週間後の君かもしれない。あるいは、君が思っていた要件が本当に要件だったかどうかもわからない。仮にそれが専門家が言ったことだったとしても、それが正しいとは限らないし、君がその専門家であっても同じことが言える。

すべてのコードは負債だけど、すべてのコードがレガシーというわけではない。私はOPじゃないけど、Vibeはレガシーだと思う。なぜなら、それを維持する資格のある人がもういないから(そもそもそんな人はいなかった)。

Hacker Newsで議論の続きを見る