自分のLLMとの付き合い方について(2025年8月時点で)
私がバイブコーディングにあまり興味がない理由を読んで、自分が思っているバイブコーディングというかLLMとの付き合い方について。
twitterでも書いたが、完全に同感でテキストデータを生成させるのであれば、GitHub Copilotがソリューションとして一番フィットしている。
これはなぜかというと2つ理由がある。
委譲問題
LLMにコーディングさせるにせよドキュメントを書かせるにせよ、あるいは何かコマンドを実行させるにせよ、とどのつまりはLLMにタスクを委譲しているということになる。
エンジニアリングマネージャーのしごと p.51 3章 人間と関わる
上記の図は人間が部下や後輩に仕事を任せる際の委譲とコントロールの大きさを表しているが、これは相手が反省し学習する人間であるという前提がある。特に「自分がやり方を示す」は完全に教育指導の活動である。
仕事を委譲するというのは相手が適切に学習するからできる活動であり、言われたことをただ反射的に直すような振る舞いをする相手にできる活動ではないと思っている。仕事を委譲する中で行う指導というのは、相手の頭の中に「適切なアウトプットを出力する関数」を実装していくようなものだからだ。その関数を実装することが困難で、実装することを諦めたとき「この人にこの仕事を任せるのは難しそうだ」と考えるようになる(少なくとも私は)。
人の話はこの辺にしてLLMに戻るが、LLMにどれだけフィードバックしても「適切なアウトプットを出力する関数」は実装されない。できることはMarkdownやプロンプトに文言を追加する、つまりインプットを増やすことだけである。
また、いわゆるバイブコーディングとして喧伝されているのは図の右から2番目の「終わったら相手が知らせてくる」に当たる。もう少しましなやり方として、ステップごとの生成結果をレビューするのだとしてもせいぜい「相手が行い自分が頻繁にチェックする」になる。
いうまでもなく、人間相手に「終わったら相手が知らせてくる」レベルの委譲をする時は、相手の頭の中にある「適切なアウトプットを出力する関数」にかなりの信頼を置ける場合に限られる。LLM相手にこれを行うなら、「Mermaidのテキストを受け取って描画するVueコンポーネントを作成する」といった指示内容に類似する学習データを使ってLLMのモデルが作られていると期待できる場合になる。
それゆえに、学習データにないような複雑なアルゴリズムの実装とか、あるいは特定業務のドメインロジックの実装などにおいては、どう頑張ってもバイブコーディングは不可能だと思っている。ガチャだと割り切るとかステップを刻んで生成結果をレビューするとか、そういう考え方ややり方というのも人のようにフィードバックを学習しない以上、掘った穴を埋めるような徒労に私は感じてしまう。
熟練タクシードライバー
コーディングやドキュメント作成において「LLMに運転席は譲らん」と考えているが、自動運転については「運転は丸投げして後部座席で寝てたい」と考えている自分がいる。これはハードウェアセンサーという意味で明らかに人間の方が劣るというのもあるが、一番の理由は自分の判断力より自動運転AIの判定の方が優れていると思っているからだ。ペーパードライバーのゴールド免許であり自転車すら乗らないので、ど素人の自分の運転より自動運転の方がはるかに信用できる。
逆に、自分が熟練タクシードライバーだったとして自動運転AIを信用できるかと言えば多分できない。航空機のオートパイロットのように、緊急時には自分のハンドル操作やブレーキで車が制御できて欲しいと考えるだろうと思う。つまり、委譲のレベルは良くても「相手が行い自分が頻繁にチェックする」になる。LLMと自動運転AIは方向性の異なるAIだが、LLMに対する私の反応も同じようなものだと思われる。
LLMに対する委譲のレベルをさらに押し下げる要因は、自動運転車と違って大体の場合で人間の方が多くの情報を持っていて、その情報格差をLLMに渡すのが途方もなく面倒というのがある。LLMは今自分が実装しているプログラムのドメイン知識も背景も何も知らないため、実装に必要な全てのコンテキストを渡さなければならない。これは、転職してきた人に仕事を委譲するめんどくささと等しい。
すでに書いた通り、人間の新規参画者と違ってフィードバックしたところでLLMは学習しない。そのため、「自分がやり方を示す」と「相手が行い自分がガイドする」の中間あたりの委譲レベルに固定されてしまい、GitHub Copilotがちょうど良いソリューションになってしまう。
それに対して、文章の要約やコードレビューと言ったタスクは、処理対象自身がコンテキスト情報になるためLLMに任せる心理的負担は低くなる。さらに言えば、その要約やコードレビューというのは使い捨てでしかないので、正しさに対してそこまでの期待値がないというのがある。
だから、以下の条件を満たす領域ではGitHub Copilotが限界というのが正直なところである。
- 自分が熟練タクシードライバー
- 複雑なコンテキストを自力でLLMに入力しなければならない
- 継続的に利用し続けるアウトプット
補記
なお、最近の諸々の不調に対するリハビリとしてこの文章は書いているため、生成AIを一切使わずに書いた(というか、明確に書いていない限りは弊サイトの文章はlinyclarが書いている)。
この文章を書いて気付いたことだが、LLMの登場によってドメイン駆動設計のメリットは「LLMがコードからドメイン知識を読み取れるようになること」という言い方もできるな。
あ、自分も真面目にバイブコーディングに向き合ってません。念の為。