まず、この記事はポエム的な内容です。
勝手な未来予想図を想像した内容となっております。
Claude Code, Codexをはじめ、あらゆるコード生成ツールが世に出てきています。
これらは非常に強力な開発パートナーになることは間違いないでしょう。
AIコード生成が誕生する前と現在ではどのような変化があるのでしょうか。
持論を整理したいと思います。
ウォーターフォールモデルからプロトタイプモデルが主流になるのでは?
まず、ウォーターフォールモデルとは、一般的に要件定義→設計→実装→単体テスト→結合テスト...と水の流れのように上から順に工程を進めていく開発モデルであることは自明の通りです。
一方、プロトタイプモデルとは、いったん原型を作成して、テストや動作を見て機能改善を行っていく開発手法となります。
コード生成AIの登場によって、ソフトウェア開発の多くは、ウォーターフォールモデルからプロトタイプモデルに移行することが予測できます。
なぜプロトタイプモデルか
実際にコード生成AIを利用したことのある人ならよくわかることだと思いますが、AIに要件定義を伝えることで、設計の工程を飛ばすことができます。
つまり、「とりあえず、つくってみる」 が容易にできてしまうというわけです。
AIにとりあえず、頭にあるイメージを伝えて、とりあえず使えるもの を作ってもらう。
その後、実際に使ってみて、「こういう機能が欲しい」 や 「ここは何かバグがある」 と気づいたときに、AIに対して、追加の要件や修正依頼をする。
以下のようなフローでソフトウェア開発が行うイメージである。
AIコード生成の強みは、追加の要件についても、人間が複雑な思考をせずとも、AI側がコードを見て、修正方法を提案、実装を行ってくれるところである。
人が設計した場合は、途中段階での仕様の追加は、大きな手戻りになったり、大幅な変更を行わなければならないことも多くあるが、そこもAIが考えてくれる。
実際にAIで開発をすると、それが多く実感できるはずだ。「こんな機能追加だと既存の処理の多くを見直す必要があるから難しいだろう」 と思うような仕様追加でも意外と柔軟に対応してくれる。
テスト設計や仕様書はどうするのか?
そのあたりも問題ないです。AIに任せればよいのです。
- ある程度できたタイミングで、テスト設計を依頼する。
- 生成されたテスト設計を確認する
- 人が実施するまたはテストもAIに依頼する
こういったことができてしまいます。
要件定義の段階でテスト設計についても、組み込んでおけば、さらに容易である。実装と同時にテストコードも生成するようにすればよいのだから。
そのテストコードを機能追加のタイミングで叩くことで、デグレもチェックも可能となります。
仕様書についても、コードから逆に生成を依頼することができます。ウォーターフォールモデルで例えると「川のぼり」が発生するような操作ですね。
ソースコードから、データベースの定義やAPIの定義をER図やOpenAPIに変換したドキュメントを作成できます。
もちろん、要件定義書も開発当初に与えたものから変わっているので、そのあたりもAIに最新版を作成してもらうことができます。
取説やLP(ランディングページ)の生成も可能です。
人は理解しなくてよいのか?
いいえ、全く理解しなくてよいわけではありません。
ソフトウェア開発について全く知識がなくてもプロダクトは作成できてしまうでしょう。
ただ、その品質についてはAIは担保してくれません。
もちろん、基本的な動作確認は実装時に行ってくれますが、セキュリティ的に問題のあるコードも含まれている可能性はゼロではありません。(動作することとセキュリティなどの非機能要件は別問題)
なので、知識があれば、この実装はSQLインジェクションの問題はないですか?パスパラメータインジェクションの問題はないですか?など確認することができるし、実際に問題がないか確認することもできる。
実際に、RLS(Row Level Security)で設計してもらっているはずが、URLのパスを変えるだけで、本来アクセスできてはいけないデータにアクセスできてしまうバグが見つかったりしました。(もちろん、修正を依頼し、他の機能にも同様の問題がないか水平展開もかけてもらいました)
このように、生成AIが優秀でもまだまだ人の介在する余地は存在します。
コード生成AIの現在の立ち位置
これは私見ですが、「独学で知識も技術もあるけど、まだ製品の開発を行ったことがない新人エンジニア」 のようなイメージでとらえるとよいかと思います。
まとめ
前述もしましたが、これからは、とりあえず作って、機能追加や改善を行っていく「プロトタイプモデル開発」 が主流になるのではと思います。
ウォーターフォールモデルが有効なのは、ハードウェアを伴う開発のみになり、ソフトウェアのみの開発では今後かなり稀有な存在になっていくのではないでしょうか。
AIについて、依存しすぎず、かつ恐怖心を持ちすぎずの距離感で付き合っていくことで今後のソフトウェア開発はより進歩を遂げていくことと思います。