🫢

【和訳解説】本番環境で「Vibe Coding」を実践する方法とは?Anthropic研究者が語る、AI時代のエンジニアの新たな役割

に公開

はじめに

AIによるコード生成が日常となった今、私たちエンジニアは大きな転換点に立っています。AIを単なる「便利なツール」として使う段階から、AIを「自律的な同僚」として捉え、協業する段階へ。その最先端の概念が「Vibe Coding」です。

「Claude」を開発するAnthropicの研究者 Eric氏による講演「How to vibe code in prod responsibly」が良かったので、本記事ではエンジニアの視点から深掘りして解説します。

https://www.youtube.com/watch?v=fHWFF_pnqDk

彼自身、事故で手を骨折し、2ヶ月間まったくコードが書けなくなった際に、Claudeに全てのコーディングを任せて乗り切ったという経験を持ちます。その実体験と研究から導き出された、「責任あるVibe Coding」の実践論は、これからのソフトウェア開発のあり方を考える上で非常に重要な示唆に富んでいます。

第1章:「Vibe Coding」の本当の意味を理解する

まず、この議論の核となる「Vibe Coding」を正確に定義し直しましょう。

それは単なるAIの多用ではない

講演の冒頭でEric氏は、多くのエンジニアが持つ誤解を解くことから始めます。

「CursorやCopilotを使い、AIが生成したコードの割合が多い状態をVibe Codingだと思われがちですが、それは少し違います。開発者がAIと密なフィードバックループの中にいて、生成されたコードを逐一確認・修正している状態は、まだ本当のVibe Codingではありません。」

本当のVibe Codingとは、よりラディカルな状態を指します。彼が引用するAndrej Karpathy氏の定義は、その本質を的確に表しています。

「完全にVibes(感覚)に身を委ね、指数関数的な進化を受け入れ、コードの存在さえ忘れてしまうこと」

「コードの存在を忘れる」——これがキーワードです。これは、開発の抽象化レイヤーが根本的に変わることを意味します。私たちがC言語を書くときにアセンブリ言語を意識しないように、自然言語で指示するだけで、その裏にあるコードの実装を意識しなくなる状態。それがVibe Codingの目指す世界です。

このコンセプトは、非エンジニアでもアイデアを形にできるという素晴らしい可能性を示しましたが、同時に、無邪気なVibe Codingが引き起こす問題も浮き彫りにしました。「APIキーを意図せず使い切ってしまう」「身に覚えのないデータがデータベースに大量生成される」「サブスクリプションをバイパスされてしまう」といった、笑えない事態が報告されたのです。

だからこそ、「責任ある(Responsible)」実践方法が不可欠となります。

第2章:なぜ今、この議論が不可欠なのか?—「指数関数」との向き合い方

リスクがあるにも関わらず、なぜ私たちはVibe Codingという未知の領域に踏み込むべきなのでしょうか。その答えは、避けることのできない技術の進歩にあります。

7ヶ月ごとに倍増するAIの能力

Eric氏は衝撃的なデータを提示します。「AIが単独で完遂できるタスクの長さは、7ヶ月ごとに倍増している」のです。

An exponential curve graph showing the length of tasks AI can do over time. The y-axis is 'Length of Task' and the x-axis is 'Time'. The curve starts slow and then steeply increases, with a label indicating 'Doubling every 7 months'.
https://www.youtube.com/watch?v=fHWFF_pnqDk

現在は、AIがこなせるのは1時間程度のタスクかもしれません。この段階では、生成されたコードをすべてレビューし、人間が品質を担保することが可能です。

しかし、この指数関数的な成長が続けば、1年後、2年後にはAIが1日分、あるいは1週間分の作業量をまとめて生成するようになります。その時、私たちがすべてのコードを一行ずつレビューし、従来通りのやり方で品質を保証することは物理的に不可能です。

「もし私たちがこの指数関数的な成長の恩恵を享受したいのであれば、どこかの時点で、この流れに身を委ねる方法を見つけなければなりません。さもなければ、私たち人間がボトルネックになってしまうのです。」

この状況は、かつて高級言語とコンパイラが登場した時の変化と似ています。当初はコンパイラを信用せず、出力されたアセンブリ言語を読んでいた開発者も、システムの複雑化に伴い、コンパイラという「抽象化レイヤー」を信頼せざるを得なくなりました。私たちは今、AIという新たな抽象化レイヤーをいかに信頼するか、という課題に直面しているのです。

第3章:本番環境でVibe Codingを実践するための4つの原則

講演の核心部分です。どうすれば、このパワフルな手法を安全かつ効果的に本番環境で活用できるのか。Eric氏は4つの具体的な原則を提示します。

原則1:抽象化レイヤーを変える — 「コードではなく、プロダクトを管理する」

Vibe Codingの根幹をなすマインドセットです。

「コードの存在は忘れても、プロダクトの存在は忘れるな」(Forget that the code exists but not that the product exists.)

これは、エンジニアの役割が「実装者」から「管理者」へとシフトすることを意味します。Eric氏は、CTOやPM、CEOといったマネジメント層のアナロジーを用いてこれを説明します。

  • CTOは、自身が専門家でない技術領域(例:機械学習)のエキスパートを管理する際、実装の細部ではなく受け入れテストの結果で品質を判断します。
  • PMは、コードが読めなくても、実際にプロダクトを触り、ユーザーとして期待通りに動くかを検証します。
  • CEOは、財務諸表の全貌を理解できなくても、重要なKPIや特定のデータを抜き打ちでチェックし、全体の健全性を確認します。

彼らは皆、実装の詳細には立ち入らず、検証可能な抽象化レイヤーを通じて仕事を管理しています。私たちエンジニアも同様に、コードの一行一行ではなく、システムの振る舞いや成果物を検証することに焦点を移すべきだ、と彼は主張します。

原則2:リスクを封じ込める — 「リーフノードに集中する」

現在のAIが苦手とすることの一つに、「技術的負債(Tech Debt)」の評価があります。コードの可読性、保守性、拡張性といった要素は、コードを直接読まずに検証することが困難です。

この現実的な制約を踏まえた上で、Eric氏が提案する戦略が「コードベースのリーフノード(leaf nodes)に集中する」ことです。

  • リーフノード(葉): アプリケーションの末端機能。例えば、特定のUIコンポーネント、一度きりのデータ移行スクリプト、依存先が他にない機能など。
  • トランクやブランチ(幹や枝): システムのコアアーキテクチャ。共通ライブラリ、認証基盤、データベーススキーマなど、多くの機能が依存する部分。

A diagram showing a tree structure with a trunk, branches, and leaf nodes. The leaf nodes are highlighted in orange.
https://www.youtube.com/watch?v=fHWFF_pnqDk

エンジニアリング的な根拠:
リーフノードに多少の技術的負債が生まれたとしても、その影響範囲(Blast Radius)は限定的です。依存先がないため、負債がシステム全体に広がることはありません。一方、システムの幹となるコアアーキテクチャに技術的負債が入り込むと、その後のすべての開発に影響を及ぼし、修正コストは甚大になります。

したがって、システムの幹や枝といったコア部分は、引き続き人間が深く関与し、設計と思考を重ねて保護するべきです。Vibe Codingは、影響範囲をコントロールできる「葉」の部分から始めるのが賢明なアプローチとなります。

原則3:AIの能力を最大化する — 「Claudeの優秀なプロダクトマネージャーになる」

AIに高品質な仕事をしてもらうためには、私たちの関わり方が決定的に重要だと言います。

「Claudeに何ができるかを問うな。あなたがClaudeのために何ができるかを問え」(Ask not what Claude can do for you but what you can do for Claude.)

このケネディ大統領の演説をもじった言葉は、Vibe Codingにおけるエンジニアの役割の変化を象徴しています。私たちは単なる指示者ではなく、AIの能力を最大限に引き出すプロダクトマネージャー(PM) になる必要があります。

優秀なPMが新人のエンジニアにタスクを依頼する場面を想像してください。「この機能を作って」と一言で済ますでしょうか?いいえ、成功確率を高めるために、以下のような情報を提供するはずです。

  • 関連するコードベースの案内: 「この機能は、XというディレクトリにあるYというクラスを参考にするといいよ」
  • 明確な要件と制約: 「パフォーマンスはZミリ秒以内、エラーハンドリングはこういう方針で」
  • 踏襲すべき設計パターン: 「このプロジェクトではDIコンテナをこのように使っているから、それに倣って」
  • 類似機能の例: 「既存のAという機能が似ているから、実装の参考になるはずだ」

Eric氏自身、Claudeに大きなタスクを任せる前には15〜20分かけてこれらの情報を収集・整理し、一つの完成されたプロンプトとして渡すそうです。この事前の投資が、AIのパフォーマンスを劇的に向上させます。

原則4:信頼を構築する — 「検証可能性をシステムに組み込む」

コードを読まずに信頼を担保するにはどうすればよいか? 答えは、設計段階から検証可能性(Verifiability)を組み込むことです。

これは、システムが「ブラックボックス」であっても、その正しさを外部から確認できる仕組みを作ることを意味します。具体的には、以下のようなアプローチが挙げられます。

  • 安定性のための負荷試験: 長時間の負荷をかけ、メモリリークやパフォーマンス劣化が起きないことを確認する。
  • 正当性のための入出力検証: システムへの入力と、それに対応する出力を明確に定義し、人間が容易にその正しさを検証できるように設計する。

これは、原則1で述べた「プロダクトを管理する」という考え方の実践編です。実装がどうであれ、「この入力を与えれば、この出力が返ってくる」という契約(Contract)が守られている限り、そのシステムは正しいとみなすことができます。

第4章:実践例:Anthropicの+22,000行PRはこうして実現した

理論だけでなく、Anthropicはこれらの原則を実際に適用した事例で、成果を上げています。

本番環境の強化学習コードベースに対し、Claudeが主体となって書いた22,000行もの巨大なプルリクエストをマージしたのです。

この成功の裏側には、4つの原則の忠実な実践がありました。

  1. PMとして振る舞う: 数日をかけて人間が要件定義を行い、Claudeに明確なビジョンと計画を与えた。
  2. リーフノードに集中: 変更の大部分を、影響範囲の少ない末端の実験用コードに限定した。
  3. コア部分は人間がレビュー: 将来の拡張性が必要なシステムの根幹部分は、人間が徹底的にコードレビューを行った。
  4. 検証可能性を設計: システムは完全にオフラインで動作するものであったため、セキュリティリスクを大幅に低減。さらに、安定性を測るための負荷試験と、結果を簡単に検証できる入出力の仕組み(ブラックボックステストが可能な設計)を設計した。

この成果がもたらした最大の価値は、単なる時間短縮ではありませんでした。

「本当にエキサイティングだったのは、時間の節約だけではありません。『2週間かかると思っていた機能が、1日でできる』と気づいた時、エンジニアリングに対する考え方が変わるのです。ソフトウェアの限界費用が下がり、より野心的な機能開発に挑戦できるようになる。それがこのアプローチの真の力です。」

第5章:エンジニアからのQ&A

講演後のQ&Aでは、エンジニアが抱くであろう具体的な疑問に、さらに踏み込んだ回答がなされました。

Q1: Vibe Codingの時代、若手エンジニアはどうやってスキルを伸ばせばいい?

A: 「苦労して学ぶ」機会が減るという懸念はもっともです。しかし、見方を変えれば、学びの機会は爆発的に増えます。

  • AIが家庭教師になる: 「Claude、君が使ったこのライブラリについて教えて。なぜ他の選択肢ではなくこれを選んだの?」と対話することで、かつてないスピードで知識を吸収できます。
  • 挑戦の回数が増える: 従来2年かかっていた大規模なアーキテクチャ変更のフィードバックループが、AIの支援で6ヶ月に短縮されるかもしれません。同じ期間で4倍の経験を積むことができ、アーキテクトとしての成長が加速します。

Q2: セキュリティは本当に大丈夫なのか?

A: これが最も重要な点です。Eric氏は明言します。「本番システムにおけるVibe Codingは、誰にでもできるものではありません。

  • 適切な問いを立てる能力: 成功の鍵は、Claudeの優秀なPMになることです。そのためには、何が危険で、どのような問いを立てれば安全な方向に導けるかを理解している、十分な技術的知識が必要です。
  • リスク評価: Anthropicの22,000行の例が成功したのは、それがオフラインシステムであり、セキュリティリスクが管理可能だったからです。コンテキストを理解し、リスクを評価する能力が、まさにエンジニアに求められるスキルです。

Q3: テスト駆動開発(TDD)との相性は?

A: TDDはVibe Codingと非常に相性が良いアプローチです。

  • テストを仕様書として使う: 「ハッピーパス」「特定のエラーケース」といった高レベルなE2Eテストを3つほど、まずClaudeに書かせるのが有効です。
  • テストを読んでコードを信頼する: 実装コードを全行読む代わりに、まずテストケースを読み、その内容に同意できるかを確認します。 テストが妥当であり、かつそのテストが通るなら、実装コードの信頼性も高いと判断できます。これは、コードレビューの効率を劇的に上げる実践的なテクニックです。

まとめ:これからのエンジニアに求められる新たな役割

本講演が示すのは、AIによってエンジニアの仕事がなくなるという未来ではなく、役割が進化する未来です。

私たちは、一行ずつコードを書く「実装者」から、

  • システムの振る舞いを定義し、品質を保証する「アーキテクト兼QA」へ
  • AIの能力を最大限に引き出し、プロジェクトを導く「プロダクトマネージャー」へ

と、その役割をシフトさせていく必要があります。

指数関数的な進化の波は、もうそこまで来ています。この変化に適応し、「責任あるVibe Coding」のスキルを身につけること。それが、これからの時代を生き抜くエンジニアにとって、最大の挑戦であり、最もエキサイティングな機会となりそうです。

Discussion