AI駆動開発という言葉を使うな
改訂履歴
2025/03/18 一部の表現を修正、また余談の末尾にVibe Codingについての言及を追記
2025/04/25 記事冒頭に注意書きを追加
2025/04/26 アイキャッチ絵文字を変更、注意書きの誤植を修正
僕がCursorを使うようになって3ヶ月が経った。
.cursorrulesの廃止やcomposer→agentへの変更など細々とした小改良を進めながら、LLMとプログラミングを取り巻く環境は確実に良くなっていると思っている。僕はCursorしか使わない(正確には使えない)ので他のエディタの話は割愛するけど、大なり小なり同じ感じではないかと推測する。
しかしながら最近、その使い手であるエンジニア側に看過出来ない問題を感じたので、今日は一つの問題提起としてその話をしたい。
AI駆動開発とは何か
既に知ってる人は読み飛ばしてもいい。
要はAI(主にLLM)を使ったソフトウェア開発手法のことで、従来はソフトウェアエンジニアやプログラマが担っていた役割の一部(又は全部)をAI(主にLLM)に移譲することで開発速度の向上や開発の更なる効率化、ソフトウェアの高機能化などを実現しようという試みの事だ。
僕がその言葉を初めて見たのはTwitterに蔓延る胡散臭いAIコンサルのプロフ欄なんだけど、考え方としては結構昔からあるみたいで、Manus君にその起源を尋ねると2023年の11月ChatGPTの発表をきっかけに英語圏を中心として自然発生した概念らしく、向こうでは『AI-driven development』と言われており、本邦ではTDDやDDDと同様に『AI駆動開発』と表記されることが多い。
AI駆動開発が抱える歪み
今回では個別ケースの話はしない。
しかしながらAI駆動開発を標榜するソフトウェア開発手法において、その全てが同じ歪みを抱えている。それが具体的に何かというと『AIはソフトウェア開発を駆動しないし、駆動するきっかけにもならない』という純然たる事実である。
稀によくSNS上で〇〇駆動開発というエンジニアジョークを目にするが、それはその実ソフトウェア開発を駆動するきっかけとして強く作用している。一方AI駆動開発はどうだ?
具体的に過去の事例を考えると、TDDはテストに基づく開発手法である。同様にDDDはドメインモデルに基づく開発手法である。AI駆動開発はAIに基づいている?依存しているの間違いでは?
ではAI(主にLLM)を使った開発をどう呼ぶべきか
これは非常に難しい問題だと思っている。
というのもこの記事を書く数日前まで、僕はAI(主にLLM)を使ったソフトウェア開発手法について、実際何と呼ぶべきか答えを持ち合わせていなかったからだ。単に『AI開発』というと機械学習の偉大な先駆者に失礼な気もするし、『AIコーディング』というと少し正確ではない気がする。
その理由としてLLMはコーディングだけでなく設計、要件定義でもその威力を十分に発揮する。僕はあまり詳しくないが、開発後の運用フェーズにおいても恐らく同様だろう。
また非エンジニアの理解という側面も考慮する必要がある。僕の経験上、AI(主にLLM)を使った開発手法を導入したとしても、工数は思ったより減らない。むしろ工数が減ったり増えたりするのは旧来の開発手法と同じで、そのレバレッジが変わる部分がエポックという微妙な機微を非エンジニアに過不足無く伝えるには、AI駆動開発という言葉はあまりにも不適切な気がした。
AI駆動開発→チャット駆動開発
AI(主にLLM)を使った開発は対話から始まる。
これは地球の重力加速度に匹敵する公理である。LLMを代表するchatGPTがそうであるように今時のAIはUIを例外なく対話型インターフェースに依存している。例え将来の技術革新で新しいAIが出てきたとしてもLLMの延長線上に存在する技術であれば、それは変わらない。
であれば必定としてAI(主にLLM)を使った開発は『チャット駆動開発』と呼ぶべきである。 結論としてAI(主にLLM)を使った開発は『チャット駆動開発』と呼ぶべきではないかと考える。字面は色々考えてみたけど一般的にTDDを試験駆動開発とは言わないし、これがちょうどいい落とし所ではないかと思った。
また、この名称と合わせて『チャット駆動開発』という概念は『AI駆動開発』から生まれたという事もここに明記しておく。どれだけ不都合な存在であろうと、間違っていた存在であろうと、一度この世に存在したものを無かったことにしてしまうのはエンジニアとして誠実な振る舞いではない。
これは新しいソフトウェア開発手法の話ですか?
多分違う。そうでもない。
というのも従来のソフトウェア開発手法においても、わざわざ明示されないだけで『対話』という手続きは存在した。それはエンジニアと営業、エンジニアとマネージャ、エンジニアとプログラマといった異なる立場の人間同士の会話もそうだし、エンジニア同士の会話もそう。日々JTCを飛び交う本文より長いCCが付いたメールもそうだし、中小企業のグループLINE(Slack,discord)で飛び交う短文もそう。
つまり本質的には何も変わらない。
ただ強いて言うのであれば、恐らくそれ以外の全てが変わる。
例えばLLMの理解力や思考力の向上によって、ソフトウェア設計という工程が丸々吹き飛ぶかもしれないし、もしLLMが真に完璧なコードを書いてくれるのであれば、テストという工程が丸々吹き飛ぶかもしれない。しかし仮に現代に言われているようなテストが完全に無くなった所で、結局何らかの方法でソフトウェアの機能要件、非機能要件を担保する必要があることは変わらない。
そのような機微を1から10まで列挙して解説するには、あまりにも余白が少ないし、そもそもLLMの性能すら日進月歩な現状、現段階でそれを一元的に定義すること自体、ナンセンスであると考える。
つまり現状、それらは僅かな参考資料と己の勘と技術と経験を頼りにプロジェクトごとに定義するしかなく、その辺りの課題感は従来手法と何ら変わらない。何ならむしろ悪化してるまである。
これはTDDやDDDを置き換えますか?
明確に違う。
というのもレイヤー的な話をするとチャット駆動開発はそれらの実践的な技術よりレベルが低い。チャット駆動開発をベースにTDD、DDDを実践することは実際理にかなっている。
しかしながら、前述の通りLLMの進歩は今まさに過渡期にある。TDDの大きな課題であった「ソフトウェア開発がちゃんと出来ない人間が事前にちゃんとテストを書ける訳がない」という問題やDDDの「ドメインモデルを構築する工数がそもそも無駄」という問題もLLMは解決する(というか個人的にはもう解決済みいう認識)だろうし、それは他の諸問題についても同じだ。
だから何が言いたいかというと、TDDやDDDってもう古い概念かもしれない。だってもう誰もオブジェクト指向とデザインパターンの話をしていない。いずれTDDやDDDもそうなると思う。
そうやって最終的にTDDやDDDって考え方がいつかチャット駆動開発の中に溶けていくのかもしれないけど、それはチャット駆動開発がTDDやDDDを置き換えたことを意味しない。まずあり得ないとは思うけど、世界中のLLMがストライキを起こしたら、僕らはまたTDDやDDDに立ちかえる必要がある。
これはノーコード開発ですか?
分からない。
そりゃコードの記述量的にはだいぶ減ったし、簡単な実装やデバッグであればLLMに自走させれるけど、ノーコード開発の原義である『誰でも簡単に』みたいな文脈が含まれているかっていうとかなり怪しいところがある。
前述したけど、いい所もあればもちろん悪いところもある。AIがソフトウェアエンジニアの仕事を奪うかと言うとそんなことない気がする。
CI/CD、DevOps(DevSecOps)との対応
以下個人的な感想
正直このあたりの技術を単なる形式や旗印ではなく、実際にちゃんとやれてるのってソフトウェア業界全体の上位10%とかその辺りの話だと思う。そしてそうなってくるとメンバーが優秀過ぎて何を使っても何をしても大体上手くいくので、そもソフトウェア開発手法を論じる必要があるのか?という疑問がある。
結論を言うと、やろうと思えばチャット駆動開発でも上記技術は利用できる。見出しには入れなかったけどコンテナ技術やk8sとかも同様、チャット駆動開発はDDDより低いレイヤの話なので、理論上は過去に存在した全ての開発手法をそのまま応用することができる。
しかしぶっちゃけこの辺りの技術って、技術で得られるメリットより、難しい技術を採用することでチームに〇〇(検閲済み)が混入しなくなるメリットの方が大きいと思っていて、LLMの普及でその技術的なハードルが下がることは技術のメリットが減ることを意味する。もっと直接的に言えば、〇〇(検閲済み)なエンジニアとそうでないエンジニアを識別するのに必要なハードル(コスト)は今後指数関数的に上昇(増加)する。
その環境の中でわざわざ難しい技術を採用する意義が薄れると思っていて、あまり食指が動かない。
あと従来手法を応用すると一口に言っても当然それなりの難しさがある。LLMは優秀な人間と違って言うことを100%聞いてくれないし、もし言うことを100%聞かせようと思ったら自然言語でプログラミングを行う必要がある。必然的にどこかで妥協点が生じるんだけど、これが優秀なエンジニアの存在を前提とする高度な開発技術と滅茶苦茶食い合わせが悪い。
いずれAIがそのあたりの問題も解決してくれるのかもしれないけど、チャット駆動開発が普及する過程でCI/CD、DevOpsといった高度な技術は実用品から贅沢品になるのではないかと言うのが僕の予想。
これからはコンテナセキュリティとWebAssemblySandboxが熱いと予想する人間もいるけど、それならもうAIに何しても大丈夫なパソコンを買い与えた方が早くないですか?と言う気はする。
余談
まずはここまで読んでいただいて感謝。
テーマとしては言葉の使い方みたいなもっと短い話だけで収めるつもりだったんですが、思ったより筆が乗ってしまって4000字程度のお話になってしまいました。言葉の使い方……難しいですよね。余談ですがLLMって言葉遣いに人間より敏感な所があると思ってて、例えば「AI駆動開発してください!」ってプロンプトと「チャット駆動開発してください!」ってプロンプトはこの記事の内容を踏まえると本質的に同じことを指してるんですが、LLM君が本当にその機微を理解して動いてくれるの?みたいなところはあまり信用できないと思っています。現状でもcursor/rulesにうっかり矛盾した内容を書いた結果、実際の挙動にどちらの内容も反映されないとか日常茶飯事で、プログラムと違ってエラーを吐いてくれないので、JavaScriptより性格悪いなコイツって思うこともしばしばです。なのでね……たまに普通にプログラム書くより難しいんじゃないかって思うこともあるんですよチャット駆動開発。早く画期的な手法が見つかるといいですね。あと記事の内容についてはご意見ご感想歓迎です。勢いだけで書いたのでひょっとしたら変なこと書いてる所もあるかもです。細かいところは正直100%個人の感想なので色々検討とかした結果、やっぱAI駆動開発って呼んだ方がいいよねってなったら僕もシレッとそう呼んでるかもです。それではまた次回!
2025/03/18追記
遅ればせながらVibe Codingという言葉を知りました。ただ、現状その言葉は人によって音声入力によるLLMを用いたコーディングを指すこともあり、Claude 3.7 Sonnet君は「音声入力はあまり関係なく、Vibe Coding自体はAIアシスタントを活用して自然言語でプログラミングを行うことを指します」と言っているので、その辺りの機微をちゃんと認識しているとは思いますが、人間にはその識別は難しいのではないかという認識です。従ってチャット駆動開発を部分的にVibe Codingと呼ぶ考え方についてはあまり素直に賛同できません。
Discussion