生成 AI を用いた開発プロセスに関する現時点の所感と今後
はじめに
生成AIを使った開発が広まって来た一方で、それに対してどのようなスタンスを保っているかという点は当然その人や取り扱う対象によって異なる。
それを一々説明するのはそれなりに大変なので、ここにまとめておきたい。
ソフトウェア開発の構造は生成AIによって変わるのか
生成AIの登場により、ソフトウェア開発の進め方が大きく変わるのではないか、といった期待が増えていると感じる。確かに、大量のコードを短時間で生成できるようになったことで、開発現場の生産性に影響を与えているのは事実だ。
しかし、開発プロセスや構造そのものが本当に変わるのかといえば、必ずしもそうではないと思う。少なくとも現時点では、大幅に変えるのは難しいと考えている。
評価という不可避のプロセス
第一に、評価プロセスは不可欠だ。生成AIが出力したコードは、そのまま本番に投入できるものではない。これは人間が記述したコードでも同じだ。要求を満たしているかという基本的な観点から始まり、セキュリティや保守性など、さまざまな観点で「問題がないか」を評価しなければならない。
この評価は従来から静的解析や自動テストなどによって補助されてきたし、生成AIに任せる試みもある。しかし、最終的には人間による評価が欠かせない領域が残る。評価を完全に生成AIに委ねられる段階には至っていないのだ。
不確実性という本質的な要素
第二に、ソフトウェア開発が本質的に不確実性を抱える営みだという点がある。ウォーターフォールにおける段階的詳細化やアジャイル開発における反復的なアプローチは、いずれも不確実性に向き合うための方法だった。
生成AIの出力は確率的なばらつきを持ち、このこと自体が新たな不確実性を持ち込む。つまり、生成AIを利用することは開発を加速させる力を得る一方で、追加の不確実性を受け入れることでもある。
この不確実性を完全に取り除くことができれば、大きな転換点になるだろう。しかし、それは同時に生成AIが持つ創造性の源泉を失わせる。結果として、不確実性をなくした時点で、もはや私たちが求める機能は失われてしまう。
これらのことは、先ほどの評価で述べた「評価を完全に生成AIに委ねられる段階には至っていない」という点の理由でもある。
生成AIと不確実性のコントロール
ここで重要なのは、不確実性を完全に排除するのではなく、制御可能な範囲に収めるという姿勢だ。人間だけで開発を行ってきた時代にも、不確実性は常に存在していた。情報が正しく伝達されているのか、伝わった情報が正しくコードに表現されているのかといった点は、常に検証が必要だった。こうした不確実性は、開発プロセスやレビューといった仕組みによって低減させてきた。
しかし、人間が評価できる範囲には限界がある。したがって、生成AIにすべてを任せて end to end でコードを生成させるのは現実的ではない。なぜなら、人間が評価できないほど大規模な成果物が生まれてしまうか、あるいは評価に過剰な時間を要してしまうからだ。また、生成AIがコードを出力するまでの各ステップが持つ不確実性が積み重なり、その結果だけが提示されるという構造的な問題もある。
そういう意味で、個人的にプロトタイピングなどを除き長時間コーディングエージェントを動作させて膨大なコードを生み出すという行為に意味を感じられない。
だからこそ、段階的にステップを踏むことが有効だ。段階的詳細化のように小さな単位に区切ることで、不確実性が過剰に積み重なることを防げる。そして生成AIはアウトプットが早いため、フィードバックループを短く保ちながら進めることができる。これにより、プロセスの構造そのものは変わらないが、進行速度は確実に高まる。
今後
今後、AIがもっと良くなることを期待するとき、人々は具体的にどのような改善を思い描いているのだろうか。AIのどの点が良くなれば私たちの開発は本当に良くなるのか。この問いに対して具体的な答えを持たず、「もう少しすればもっと良くなる」といった漠然とした期待を抱いている人が多いように感じる。これは一つの懸念でもある。期待を語るときに、どの部分の改善を想定しているのかを明確にしない限り、議論は進みにくいからだ。
私自身が特に期待しているのは、大量の情報を扱う能力の強化だ。より多くの情報をコンテキストに保持し、その中から必要な情報のみを抽出して出力できるようになれば、開発の支援として大いに役立つだろうと思う。
ただし、これは生成AI単体の改善によって実現するのではなく、外部の仕組みや環境との連携によって支えられるものだと思う。つまり、生成AIそのものの性能向上よりも、それを取り巻く仕組みとの組み合わせが現実的な進歩を生み出すのだと思う。
そういう意味で、個人的に生成AI単体の改善に対して期待することは、性能の向上というよりは省コストなどのほうが大きいかもしれない。(これも性能と言えば性能なのだが)
おわりに
生成AIを使った開発は、人間が行う開発と本質的には変わらない。生成AIを擬人化するわけではないが、人間とは異なる性質を持ちながらも同様に不確実性を内包しているという点では共通している。そのため、これまで培ってきた手法で対処するのが現状における最も現実的な選択肢だと考えている。
結局のところ、開発の構造は変わらない。しかし、生成AIの登場によって各ステップの速度が上がり、フィードバックループをより速く回せる可能性を私たちは手にしている。この「開発の構造は変わらないが速くなる」というスタンスが現在私が取っているものということになる。
Discussion