Vibe Codingの限界
Vibe Codingは便利だ。
とりあえず自分のプロジェクトのディレクトリに行って、Claude Codeに内容を読ませて「こういう機能をつけろ」と言うだけでいい。
しかもそれが、やきとん屋に四時間並んでる間にできる。座る必要すらない。時々、指示を出すだけなんだから。
昨日はサーバーとクライアント、両方でClaude Codeを動かして、「サーバーはこうなってるからクライアントをこう変更しろ」とか「クライアントからこういうAPIコールが来るから実装しろ」とか言うだけで実装される。まあそれによってバグも出るのだが、それとてClaude Codeにだらだら指示してればいずれ治る。
会社で「Vibe Coderを使ってなんか作ってみてよ」というと、「ピザ屋ゲームができました」と言われた。
ピザの注文が来たら、具材を載せるという簡単なゲームである。
しかしプログラミング知識ゼロの人が作ったとは信じられない。
同時に、Vibe Codingの難しさを痛感した。
実際のところ、Vibe Coderは、ただ与えるだけでは自分の思った通りのものを作れるようにならない。
昨年開発した「初心者AIハッカソン」のキーポイントは、「AIをプログラムの一部に取り入れることで初心者でも自分の考えを表現しやすくなること」だった。
そこからAI要素を抜くと、途端に難易度が普通のプログラミング並みに難しくなる。
というのも、完全な初心者はプログラミングを知らないからだ。
例えば「ピザ屋ゲーム」では、具材をドラッグ&ドロップでピザ生地に乗せて行く。
少しDOMを齧った人なら、これがどれほど無謀なUIであるかわかるだろう。
普通は「ドラッグ&ドロップは避ける」ということが本能的に刷り込まれていて、実際にドラッグ&ドロップで解決するようなことは極力避けるはずだ。
しかし、初心者はそんなことお構いなしにイメージした通りに指示する。すると、AIは普通のプログラマの何百倍も賢いので、経験豊富なプログラマが本能的に避けるUIを見事に実装してしまう。
これはこれですごいことなのだが、僕自身がVibe Codingをしていて簡単にぶつかってしまう壁がある。
それは、「ある一定以上複雑なプログラムを人間は想像したり簡潔な言語として表現したりすることができない」ということだ。
そもそもそれができないからプログラムを小さな単位に分けて構造化したりオブジェクト指向にしたりしていたわけで、Vibe Codingによってプログラムを細かい単位に分ける恩恵は残るものの、大まかな全体像を捉え続けるというのは結構大変だ。
もしも自分がコードを書ければ問題ないが、これからVibe Codingネイティブ世代が現れると、彼らはコードを知らないので、常に「なんとなく指示する」ということを無益に繰り返すことになる。これは結構な損失だ。
コードを知っている人と知らない人ではVIbe Coding時のプロンプトに雲泥の差が出る。このプロンプトの質の差というのは、出来上がるコードの差に直結するのはもちろん、同時にAPI利用料金が跳ね上がるということも意味する。つまり、Vibe Codingであっても、コードを知らない人は損をし続けることになる。
そこまで行くとVIbe Coding時代のプログラミング教育とはどのようなものになるのか見えてきた。
実は10年ほど前に予想していた未来が到来してきただけだった。
2013年にプログラミングをもっと簡単にするために、僕の会社ではenchant.jsとMOONBlock、そしてenchantMOONという端末を作った。
enchant.jsは、「普通のプログラマーが簡単にゲームを作れるようにする」ツールであり、MOONBlockは「キーボードを打つのが苦手な子供がプログラミングを学ぶ」ためのものだった。enchantMOONはさらにマウスやトラックパッドも使えない未就学児でもプログラムを書けるようにするための試みだった。

実はどの手段でも結局、使用者の想像力を超えることはない。
プログラミング手法の進化というのは、使用者の敷居を下げるが、それが可能性を広げることと直結しない。
プログラミングを学ぶということは機械との付き合い方を学ぶということに他ならない。機械の方からの歩み寄りもあるが、人間はやがてAIとの意思疎通をするために結局は全員がプログラミングを学ぶ必要があるだろう。
それが10年前に考えたビジョンだった。

ここから先は
¥ 1,000
1,000円分のAmazonギフトカードが当たる!
