チョン・ドヒョン - ROBOCO首席コンサルタント

バイブコーディング(vibe coding)という言葉を聞いたことがあるでしょうか。もともとこの表現は褒め言葉ではありませんでした。直感と感覚だけに頼ってコードを書き、厳密な構造やルールはしばしば無視する開発者を、いささか皮肉る意味で使われていたのです。ところが興味深いことに、最近では人工知能(AI)、とりわけ大規模言語モデル(LLM)を活用してプロンプトだけでコードを生成する手法と結びついて使われています。もちろん、LLMを使っても十分に模範的で保守しやすいコードを書くことはできます。特に、試行錯誤なしに一度でうまく動くコードが得られたなら、それはバイブコーディングがきちんと機能したということであり、AIベースの開発の本質を正しく理解しているという意味でもあります。

「AIコーディングはコンパイラと似ているのではないか」という質問をときどき受けます。表面的には正しいと言えます。コンパイラがコードを機械語に変換するように、LLMは自然言語のプロンプトをコードに変換するからです。しかし、両者の類似点はその程度までです。最大の違いは決定性です。コンパイラは同じ入力に対して常に同じ出力を返しますが、LLMは同じ入力に対しても、微妙に、あるいはまったく異なる出力を返します。不完全な、あるいは文脈のないプロンプトを入力すると、見当違いの結果が出てくることもあります。コードの言語は明確ですが、人間の言語は曖昧だからです。そのためLLMは、常に意図を「推測」しなければなりません。

では、このように非決定的なツールを、どうすれば信頼して使えるのでしょうか。その答えは、ほかの確率ベースのシステムを信頼する方法と似ています。「収束」という概念です。たとえば、最適解を探す際にランダム性を許容しながら少しずつ範囲を狭めていく「シミュレーテッドアニーリング(Simulated Annealing)」に似ています。機械学習で用いられる確率的勾配降下法(Stochastic Gradient Descent)も、確率的に少しずつ良い結果へと収束していきます。さらに言えば、私たち人間の開発者も日々コンディションや成果が変わりますが、良い習慣と仕組みを通じて信頼できる結果へと収束します。つまり、完璧さではなく有用な結果へ収束するように構造化すれば、LLMも十分に信頼できるのです。

TL;DR

  • バイブコーディングとは、直感でコードを丸投げすることではなく、非決定的なLLMが有用な結果へ収束するように構造化することです。
  • 信頼は、コードを目で一つひとつ確認することから生まれるのではなく、テスト・リンタ・フォーマッタといった自動検証を再現可能な仕組みにすることから生まれます。
  • 良い入力、小さなステップ、思い切った単純化が、AIベースの開発の品質と保守性を左右します。

収束のような大げさな話を持ち出すまでもなく、生成されたコードが正しいかどうかの確認を自動化しなければ、LLMの利用は非常に苦痛になります。多くの人が、LLMの生成したコードは信頼できないと言います。先ほどコンパイラとの違いを見たとおり、信頼できないのは当然のことです。生成されたコードが正しいかどうかを、なぜ人間の目で確認しなければならないのでしょうか。遺伝的アルゴリズム(Genetic Algorithm)のような手法を使うとき、交叉や突然変異で生成された遺伝子が実際に適法かどうかを人間が一つひとつ確認しなければならないとしたら、誰もそれを使いたいとは思わないはずです。

LLMをきちんと活用するには、いくつかの原則に従う必要があります。

第一に、思い切って単純化してください。LLMはしばしば過度に複雑な構造を作ろうとします。不要なクラス、抽象化、複雑な構造は削除し、最小限の形に保ってください。単純化はエラーの可能性を減らし、問題点を素早く把握できるようにしてくれます。

第二に、小さなステップで進めてください。一度にすべてを解決しようとすると失敗します。明確な要件を書くことから始め、曖昧な部分は例で解きほぐしてください。必要であれば設計文書を作らせ、それを一緒にレビューしてください。このように一歩ずつ段階を踏めば、エラーを減らすことができます。

第三に、自動化を積極的に活用してください。例ができたら、すぐに実行可能なテストへと変換してください。コードフォーマッタ、リンタ、ユニットテストを自動的に実行するスクリプトを用意しておくとよいでしょう。細かなスタイルの問題は自動フォーマッタに任せ、LLMが変更後に自らテストを実行し、失敗した箇所を修正するよう仕向けてください。自動化はコストも低く、速度も速いのです。

最後に、良い入力を与えてください。LLMは不確かなときに右往左往します。最新のドキュメントや正確なAPI情報といった信頼できる入力を与えれば、際限のない繰り返しと不確実性を大きく減らすことができます。

かつては嘲笑の対象だったバイブコーディングが、いまやAI時代の強力な思考法として浮上しました。しかし、直感だけでは足りません。このゲームは結局のところ、収束をうまく調整する仕事です。単純化し、自動化し、明確に方向を示してください。そうすれば、モデルは正しい道を見つけ、自ら「バイブ」に乗ることでしょう。