5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI駆動開発のはてに

Posted at

AIのアプリケーション開発への適用が目覚ましい勢いで進化しています。GitHub CopilotやClaude CodeといったAIツールが自律的・半自律的に開発運用業務を実施していることを、日々体感している方も多いのではないでしょうか。
今回はこのAI駆動開発の精度や内容が洗練され続けた先に何があるのか、考察してみようと思います。

要件定義から全てができる時代

要件定義をインプットに、ソースコード(アプリ、インフラ)、各種テストシナリオ/テストケース、各種テスト結果、デプロイスクリプトなどが一気通貫で完成するようになった際に、”はたして人間は何をすることになるのか”が気になったのが本投稿のきっかけです。

image.png

はたしてこのレベルまで一気通貫に作成できるようになるのか、それはいつなるのか、それとも到達しないのかは正直わかりません。個人的には、今回触れる論点すべてが完全に解消されることはないのではないかと想像していますが、一方でAIやツールの進化はとどまるところを知らないため、このあたりは今後の展開を期待したいと思っています。

本稿の前提としては、AIツールがめざましい勢いで進化し、以下のような開発フローが実現できたとします(対象はトイアプリや軽いPoCではなく、エンタープライズシステムです)。

  • 要件定義(業務要件/制約/非機能/受入基準)を入力
  • 設計~実装(アプリ/インフラ)を生成
  • 各種テスト計画・テストケース生成、実行、結果の取りまとめ
  • デプロイ/リリースまで自動化
  • 障害対応も、一次切り分け~修正案提示まで自動化

このとき、人間の役割はどのようなものになるのでしょうか。

要件はいつ固まるのか

image.png

顧客要件の明確化の困難性を示した有名な"顧客が本当に欲しかったものの絵"が思い浮かびます。要件定義が定まり、そこからすべての成果物やシステムが構築されるとして、その要件が本当に顧客が求めていたものなのかというと、「ここは違う、あれも違う」ということになりそうです。

また極端な話として「ちょっとここはこうしたい」といった要望を、要件定義の変更として扱い、すべての成果物・システムを再構築し、都度リリース判定などを行うのは問題がありそうです。もちろん差分生成と影響範囲分析をもとに実施するにしても基本的な合意形成は残り続けます。やはり要件定義を詰めるにあたっては、

  • 画面モックなどを元に、要件定義をすり合わせる
  • 設計などの中間成果物をもとに、要件定義との整合性を確認し、すり合わせする
  • 何ができたらOKか、受入基準やスケジュールを具体化する

といった従来通りの調整作業が発生しそうです。もちろんすり合わせ自体にもAIは活用できますが、人間と人間(+AI)で要件定義を詰める作業は無くならなそうです。(スクラムの場合はPBIの扱いとして同じ話になりそうです)

AIがつくったシステムの品質は十分か

image.png

やはり心配になります。要件の充足性もそうですが、セキュリティなど含めて大丈夫なのでしょうか。

例えば、機能要件のテスト、非機能要件のテスト(システムテスト、性能テスト、負荷テスト、セキュリティテストなど)のテストケースやテストシナリオがAIにより作成され、またすべてのテスト結果がOKであった場合、それで十分であると言えるのかが気になるポイントです。

本来的には全テストがOKであればOKとしたいところです。が、一方で「AIが作ったテストでAIが作った成果物を確認する」構図になると、同じ誤解や前提漏れを共有したまま整合してしまう(=テスト結果がグリーンになる)可能性もあります。ブラックボックステスト“だけ”のような状況になると、やはりこのままでは足りなそうです。

なので、単体テストや結合テストといった種類のテストも中間成果物として必要になると考えます。では中間成果物として単体テストや結合テストなどのテストケースまで含めば十分でしょうか。そこはYesと言いたいポイントですが、一方で、

  • テスト戦略(どこまで何を担保するか)の策定
  • 各種のテストケース/シナリオが充足しているかのレビュー
  • リスクが高い箇所の重点レビュー

は発生しそうです。さらにテスト観点だけでなく、監査に耐えうる証跡やガバナンスなども必要になるかと思います。AIによる作業補助は期待しつつも、最終的な品質判断は人間側の重要責務になりそうです。

また、ここまでくるとやはりソースコードの構造も気になってきます。共通化やモジュール分割、レイヤー構成といった「綺麗な構造」になっているか否かは、運用・保守のしやすさにも直結します。これはAIに対して適切な指示を与えることである程度実現できますが、結局のところ、

  • 設計ポリシー、コーディング規約、例外処理方針などの各種ガイドラインの整備
  • 全体的なソースコードレビュー

といった説明性、保守性を高めるための人間(+AI)作業は、頻度や深さがどうあれ残りそうです。

障害や問題が起きたらどうするのか

image.png

開発主体がAIであれ人間であれ、完璧なシステムはありえません。ので、多かれ少なかれ、早かれ遅かれバグは発生します。では、問題が起きた際にどうなるのでしょうか。

もちろん完全AI駆動なのでAIに修正をしてもらうことになります。しかしAIで全ての問題が解決するのでしょうか。解釈変更や仕様上の問題などがあった場合どうなるのでしょうか。やはりここは人間側作業が残りそうです。

  • 要件解釈や仕様変更あるいは不具合対応の調整
  • 優先度やリリース判断
  • 影響範囲や復旧見込み、再発防止策などの顧客/利用部門への説明

こういった作業はAIに内容作成の補助は期待しつつ、人間側の作業となりそうです。

また、修正のタイミングでAIツールが使えない状況や、AIがギブアップしてしまう(修正できない)なども可能性としてありそうです。もちろんAIツールがサービス終了となり代替ツールもない、という状況はあまり無いとは思います。が、一方で「AIが今使えないので、あきらめます」という選択肢は現実的ではありません。そのため、

  • 生成物がブラックボックス化しない工夫(履歴や作業意図などの記録)
  • いざという時に人間が修正できる体制、オペレーション

これらは、復旧の主導権を握るために、エンタープライズシステムでは特に重要になりそうです。

そもそもそのアーキテクチャでいいのか

image.png

要件定義に含まれているのであればスキップできるかもしれない項目ですが、AIになんの指定もなしで開発を依頼することは無いのではないかと思います。

例えばどのクラウドを使うのか、どのサービスを使うのか、どんなテクノロジースタックで実現するのか、といったところは、開発運用ポリシーやコストなどにも影響します。また、いざという時に人間が介入できるようにするためにも、ノウハウやナレッジがあるテクノロジースタックを利用する、といった制約もつきそうです。

  • 利用クラウドや利用サービスなどの全体概要構成の決定
  • テクノロジースタックの指定・制約の決定
  • コストや性能、可用性や運用負荷などのトレードオフの意思決定記録

このあたりも今後ともに必要そうです。むしろAIが強くなるほど、「何を許可し、何を禁止し、何をトレードオフするか」の判断やその履歴が重要になっていくのかもしれません。

AI駆動開発のはてに、人間は何をするのか

image.png

ここまでの話をまとめると、AIが要件から成果物を一気通貫で作れるようになったとしても、人間の役割がゼロになるというより、役割の重心が変わっていきそうです。再掲となりますが、まとめると、

要件を詰めていくために、

  • 画面モックなどを元に、要件定義をすり合わせる
  • 設計などの中間成果物をもとに、要件定義との整合性を確認し、すり合わせする
  • 何ができたらOKか、受入基準やスケジュールを具体化する

品質を保証するために、

  • テスト戦略(どこまで何を担保するか)の策定
  • 各種のテストケース/シナリオが充足しているかのレビュー
  • リスクが高い箇所の重点レビュー

運用・保守性を高めるために、

  • 設計ポリシー、コーディング規約、例外処理方針などの各種ガイドラインの整備
  • 全体的なソースコードレビュー

障害時や修正対応のために、

  • 要件解釈や仕様変更あるいは不具合対応の調整
  • 優先度やリリース判断
  • 影響範囲や復旧見込み、再発防止策などの顧客や利用部門への説明
  • 生成物がブラックボックス化しない工夫(履歴や作業意図などの記録)
  • いざという時に人間が修正できる体制、オペレーション

そもそもの土台をしっかりと決めるために、

  • 利用クラウドや利用サービスなどの全体概要構成の決定
  • テクノロジースタックの指定・制約の決定
  • コストや性能、可用性や運用負荷などのトレードオフの意思決定記録

という作業が人間の主体作業として重要になり続けるのではないでしょうか。
つまるところ、「作る」よりも「調整」や「判断」するところがより重要になると考えます。

AIが強くなればなるほど作業は加速していきます。その一方で、最終的な責任や、”何をもって良しとするのか”という判断は、当面残り続けそうです。
ただし、これらの作業にも、そのシステムの要件や規模・特性に合わせた濃淡がでるでしょうし、またAIによる効率化は多いに期待できると考えます。

今回はそもそもの前提として、AIが全ての成果物を十分な精度で作れるとした場合、それでも人間は何をするのか、という観点で考察してみましたが、いかがでしたでしょうか。前提が仮定の考察記事のため、もしこの観点が抜けているとか、ここはAIですでに十分カバーできる、などフィードバックあれば頂けると嬉しいです。

おまけ)今はどうなのか

今回は前提としてAIツールが十分な精度で全ての成果物を作り切れることを前提としました。しかし現状はこの前提とはまだ遠いところにあると私は認識しています。
そのため、現在のAIツールを使って70-80点でもほぼ全ての成果物を作る仕組みづくりや、成果物を100点までもっていく作業が上記の人間作業に加えて発生すると考えています。

今今の開発をAIで強化しつつ、今後も日進月歩で進化を続けるであろうAIツールを継続的にウォッチしていきたいと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?