【3行要約】・AIによる「バイブ・コーディング」が話題ですが、実際には理想通りに動作する確率が低く、仕事では使いづらい現実があります。
・Rubyの開発者のまつもと氏によれば、AIは既存のものの再現は得意でも、まったく新しいアイデアの開発には不向きだと指摘します。
・開発者は知識補完、リファクタリング、文書作成などの分野でAIを活用しつつも、その出力を必ず検証する姿勢が重要です。
前回の記事はこちら バイブ・コーディングはガチャみたいなもの
まつもとゆきひろ氏:実際にはそうではないんですね。バイブ・コーディングみたいなことができることもあるんですけれども、実際問題ガチャみたいな感じなんですよ。つまり「こういうことをしたいです」って言って、ソフトウェアが出てくる。それで、そのソフトウェアがちゃんと動く可能性っていうのは、正直言うと、まだかなり低いんですね。
「新しいソフトウェアを作りたい」と思って、「こんなソフトウェアを作りたい」と言って出てきたものが、自分のほしいものにだいぶ近い確率っていうのは、たぶん1割以下だと思うんですね。説明の仕方によってだいぶ変わってくるので、1割っていうのは単なる数字なんですけど。もうちょっと詳細に説明すると若干は確率が上がるかもしれないけど。
いずれにしても、当たり外れがあるんですよ。うまくいかない時は本当にうまくいかないんですよね。

うまくいくこともあるんだけど、そうでないこともあって。だけど、仕事としてソフトウェアを作る場合って、解決したい問題があって、その問題を解決するものを作るわけですよね。
その時に「AIに聞いてみましたけど、ガチャに外れたので、この問題は解決できませんでした。以上、終わり」では済まないんですよね。そのガチャは仕事でも困るんですよ。

あるいは仕事ではなくても、例えば「オープンソフトウェアを開発しています。そういうプロダクトを作りたいです」って言った時に「AIに聞いてみました」「ガチャで外れたのでダメでした」では困るんですよね(笑)。
ちゃんとしたものを生成するにはAIをガイドする必要がある
そうすると、その成果を確実に出す方法が必要なんですね。どうやってこのガチャ要素を排除するかが重要になってきます。その時に、ガチャを外させないため、つまりAIからちゃんとした結果を出すためには、現状では少なくともAIそのものをガイドしてやらないといけないんですよね。

つまり、能力拡張マシン。1人でもプログラムは書けるんだけど、その仕事のうち、AIでも代替できるような部分がけっこうあるので。AIで代替できるような部分をAIに出して、それが正しいかどうかを確認して、AIが方向性を間違っていたら軌道修正して。
AIがバグを見つけられなかったら「ここにバグの原因がありますよ」と教えてやるみたいなことをしないと、少なくとも2025年の現状ではちゃんとしたソフトウェアは開発できないんですね。
類似の事象は過去にもたくさん起きている
こういうことって、過去にもいっぱい起きていて。つまり、プログラミングの歴史の中で、いろいろなツールが新しく登場して、それによってソフトウェア開発者の能力っていうのは、どんどん向上してきたんですね。生産性も向上してきました。

例えば昔々のコンピュータが登場したばかりの頃っていうのは、マシン語、つまりそのバイナリですよね。それは、人間が心を込めて1バイト1バイト書いていたんですね。それで表を引きながら、C9はリターンであるとか。そういうようなことを引きながら1バイト1バイトずつ埋めて、それを1バイト1バイト人間がコンピュータに入力していたんですよ。
でも、正直に言うとバカバカしいので。そうすると、アセンブラっていう機械語の命令と1対1対応するんだけど、数字じゃなくて意味のある文字列でプログラムを書いて、それをバイナリに変換するプログラムが登場しました。これによって1950年代のソフトウェア開発者の……。今から75年前なのか(笑)。1950年代のソフトウェア開発の生産性能が爆上がりしたんですね。
でも、マシン語命令と1対1対応しているっていうのだと、抽象化レベルが低すぎるので「ツライな」っていうことで、「もうちょっと人間に易しい言語からコンピュータのプログラムを書きたい」ということで、高級言語、例えば最初期だとFortranとか、COBOLとかが登場して。今だと何ですかね? Rustとかありますよね。そういう高級言語でプログラムを書いて、それを使ってそのマシンコードを生成するということになりました。
そうすると、もっと高いレベル。抽象度の高いレベルでプログラムが書けるようになるので、マシンの都合とかはある程度無視して、そのアルゴリズムとか、それの記述にフォーカスすることができるようになって、また生産性が上がりました。
生産性が向上し、文明が崩壊した
それからそのデバッグ側。つまり、そのプログラムの実行状態を動的に観測することができるようなツールが登場して、どこにバグがあるかをより見つけやすくなることができるようになりました。
これによって、今までだと「ここまでいきました。どうなったか確認します」とか(笑)。そういうようなことをいちいちしなくても、プログラムが実行する様子を眺めながら「あ、ここに間違いがある」みたいなことを、動的に見つけることができるようになりました。
それからプロファイラーといって、どこでそのパフォーマンスが落ちているか、どこで無駄にCPUを使っているかみたいなことを検出するツールが登場して、パフォーマンスのボトルネックを探しやすくなりました。
こういうようなツールが出てくる度に、ソフトウェア開発者、人間がいちいちやっていたことを機械に代わってもらうことができるようになって、生産性が上がるということが、これまでもずっと何回も起きてきました。

こういうツールがなくても、プログラムはできる、書けるんですよ。今1バイト1バイトプログラムをアセンブラで書くっていうのは、あまりやりたくないけど(笑)。
でも、やれば理論上はできるんですよね。ただ、こういうツールがあることによって、ソフトウェア開発の生産性が非常に向上して、もう今さら元に戻らないし、ここから文明が崩壊しました。「コンパイラがありません」みたいな状態でプログラムをしたくないっていうのが正直なところですね。