AI駆動開発の実態

1. イントロ

1年ほど前からやりたいビジネスがあり、その基礎となるソフトウェアの開発が、実行に移すうえでのハードルになっていました。

「こんなものを開発したら、工数もかかるし、お金もかかるかもしれない……」

私はシステム系のコンサルタントとしての経歴があり、昔は多少開発を行ったこともあります。ただ、最近の言語については、Pythonでデータ解析をする程度でした。

一方で、昔Java開発をやっていたことがあり、30年前、JDK 1.3あたりの頃ですが、オブジェクト指向が何なのかはコンセプトレベルで覚えていました。

AI駆動開発やバイブコーディングといった言葉が増えてきた中で、

「もしかしたら、これを使えば低コストかつ短時間で開発できるかもしれない」

と思い始めていたところでした。

今から2か月ほど前に関与していたプロジェクトが終わり、「プロジェクトは終わったが、逆に時間はできた。これはチャンスだ」と思い、このシステムを開発してみることにした、という経緯です。

現在はまだ開発中ですが、8割程度はできた感覚です。現在のコード行数(LOC)は38,397行となっており、中規模くらいのシステムになってきています。

これをAI駆動開発なしで行った場合、どれくらいかかるのかをGeminiに聞いてみると、以下の回答でした。

A. 全体工数の見積もり

まず、プログラミング(実装)だけでなく、前後の工程を含めた総工数を算出します。

  • 合計工数:約38.4人月
    • 1人が専任で作業した場合、約3年2か月かかる計算です。

B. 工程別の工数配分

一般的なウォーターフォール開発の工数比率(要件定義:10%、設計:20%、開発:40%、テスト:30%)を適用すると、以下のようになります。

工程配分比率工数(人月)主な作業内容
要件定義10%3.8人月機能要件、非機能要件の決定、業務フロー作成
設計20%7.7人月基本設計(外部設計)、詳細設計(内部設計)
開発(製造)40%15.4人月コーディング、単体テスト
テスト30%11.5人月結合テスト、システムテスト、運用テスト
合計100%38.4人月

お金をかけずに自分一人でやったら「約3年2か月」かかるシステムが、2か月程度、1日10時間程度の稼働でできてしまったことになります。

2. 目標としたこと

  1. 自分ではプログラムコードに一切手を加えず、AIに実装させること
  2. きちんと設計すること(オブジェクト指向の考え方に基づき、しっかりとクラス設計を行うこと)
  3. テストも自動化し、別のAIによってテストを実施すること

2については、AIにコードを書いてもらう中で、自分なりに立てた目標です。

というのも、AIにそのまま書かせると、再利用性の低いコードをどんどん生成してしまうことがありました。

そのため、

  • 「この部分は既存の処理を再利用してほしい」
  • 「こういうクラス構成にして実装してほしい」

といった形で、ソースコードの中身にまで踏み込んで指示を出す必要がありました。

お遊びで作るソフトであれば、それでも問題ないのかもしれません。

ただ、自分としては“ちゃんとした設計の、きれいなソフト”を作りたかったのです。

3. やったこと

使用したのはAntigravity(以下、AI)です。途中からFreeプランでは限界が来たため、契約形態を「ULTRA」に切り替え、月に3〜4万円支払うことにしました。

基本的なスタイルは以下のようなものです。

  • 仕様(ロジック)、設計、データ定義関連のドキュメントを作り、AIに対して指示を出す
  • AIが作ったものを実際に動かしてテストし、動作確認を行い、プロンプトで細かな調整をしていく
  • AIと相談しながら、「こうした方がよいと思うけど、どう思う?」といった対話を行い、機能を拡張したり、画面表示を決めたりしていく
  • ひと段落したタイミングで、「リファクタリングする箇所はないか」「使っていないファイルは消してくれ」といったやり取りをして、プログラムをきれいにしていく
  • ひと段落したタイミングでドキュメントの更新をAIに依頼し、ドキュメントを最新化する
    • 使っているドキュメントは、説明書、仕様書、クラス仕様、データベース定義です。ドキュメントはすべてObsidianを使い、Markdown形式で管理しています。

開発しているシステムの機能については現時点では見せられませんが、全体像としては以下のようになります。

テストについては、開発者が行うより第三者が行う方がよいと思い、別のAIであるCodex(OpenAI)に任せることにしました。

Codexには「あなたはテスターとして動いてくれ」と指示していたのですが、途中からCodexがテストして、おかしなところを勝手に修正し始めたのは困りました。

<私 → Codex>
「テスターとして動いてくれ」と言ったよね? なんで勝手に修正を加えているの?

<Codex>
分かりました。今後はコードを修正することはしません……。

<私 → Antigravity>
Codexが勝手に直してしまったので、ここの部分が変更されているはずです。チェックしておいてください。

<Antigravity>
今確認しましたが、変更されていません。

<私>
(???)

<私 → Codex>
何かした?

<Codex>
先ほど、コードは修正してはいけないとのことでしたので、元に戻しておきました

<私>
(なんだか、人間世界と同じようなことをやっているんだな 笑)

4. 思ったこと

  • ビジネスアイデアを持っている人が、アイデアを具体化しやすくなった
  • 今後、開発者は要らなくなるのではないか。ただし、仕様を決めることは、相変わらず必要であることに変わりはない
  • AIに伝えるためのドキュメントを定義することが重要である
  • デグレが多すぎる。デグレとは、ある箇所を開発していたら、別の箇所が動かなくなること
    • デグレを起こさせないために、オブジェクト指向、カプセル化、コンポーネント化などを意識して進めていたが、AIが勝手に変更を加えるため、ほぼ無意味になってしまう場面もあった
    • そういう意味では、テストを自動化することが重要になってくる

今回のやり方が正しい方法なのかは分かりません。ただ、ベストは尽くしているので、それほど大きくはずれてはいないと思います。

結局、ソフトウェアを作るうえでやっていることは、以下の流れです。

作りたいものを考える(頭の中)
→ 具体的にどのような仕様にしたらよいか考える(頭の中 → 自然言語)
→ AIに仕様を伝え、作成を依頼する(自然言語)
→ AIがプログラムを作成する(構造化言語)

つまり、

いかにAIに正確に伝えるための自然言語を作り上げるか

に尽きます。

今開発しているソフトウェアも、まだ完成はしていませんが、おそらくあと1か月程度で出来上がるでしょう。

完成した暁には、また報告させてもらいます。

コメント