2
0

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の登場によって開発現場は大きく様変わりした。バイブコーディングをはじめ、未経験者が開発に参入するハードルは一気に下がり、参入者は急増している。もはやプロダクトの「インフレ状態」と言ってもいいかもしれない。

しかし、プロダクトを作れるようになったこと自体は喜ばしい一方で、そのプロダクトが長く生き続けられるかどうかは、まったく別の問題として残っている。

仕様が「本当に存在しない」時代

趣味や個人開発であれば、それでも問題ない。しかしAIは今や、世界中の開発現場の最前線で使われている。それ自体はとても良いことだ。

一方で、AIで開発されたプロダクトの多くには、仕様をまとめたドキュメントが残っていないケースが少なくない。これはAI以前の時代にもあった話ではある。だが今の時代は少し事情が違う。

開発者自身の頭の中にも、仕様が残っていないのだ。

つまり、本当の意味で「存在しない」。

AIが登場したことで開発のスピードは劇的に上がったにもかかわらず、プロダクトを運用し続ける難易度は、逆にとてつもなく上がってしまっている。

そこで私は、AI時代のドキュメント駆動開発を提唱したい。

なぜ「今さら」ドキュメント駆動なのか

ドキュメントを起点に開発するという考え方自体は、決して新しいものではない。ウォーターフォール的な仕様書駆動開発や、DDDにおける「言語化」の重視など、以前から語られてきたことだ。

ではなぜ今、あえてこれを掲げるのか。

理由は単純で、AI以前は「面倒だから省略されていた」工程が、AIによって省略しなくても回るようになったからだ。仕様のフォーマット化も、設計書への落とし込みも、人力でやろうとすると相応の時間と労力がかかる。だからこそ、多くの現場で軽視されてきた。

しかしAIを使えば、大雑把なメモをフォーマットの整った仕様書に変換する作業も、その仕様書から設計書を書き起こす作業も、大幅に省力化できる。「仕様を書く余裕がない」という言い訳が、AI時代には成立しなくなったのだ。

AIドキュメント駆動開発とは

まず docs ディレクトリに、プロダクトデザインをざっくりと書き出す。ここはかなり大雑把でいい。

  • 何ができるのか
  • どんな機能が欲しいのか
  • 何の言語/フレームワーク/ライブラリで構築するか
  • 何の機能がコアになるのか
  • 開発において何を重視したいのか

次に、そのプロダクトデザインをAIを用いてフォーマット化してもらう。この時点で認識の相違や、追加・削除したい点があれば編集する。その後、再度AIにフォーマット化してもらう。

これを繰り返し、product.md を完成させる。ここがコアになる。

設計ドキュメントへの展開

次に、その product.md をベースに、FE/DB/UI/BEの設計ドキュメントを docs 配下にAIを用いて記述してもらう。

そして、認識に相違がないか、設計に問題がないかを確認する。不明点や不満点があれば質問・修正を行い、再度LLMに書き直してもらう。これを繰り返し、それぞれの設計書を完成させる。

より厳密に設計したい場合は、ディレクトリ構成やアーキテクチャについてのドキュメントを作ってもいい。やり方は同じだ。

コーディングへ

すべてに対してある程度納得のいくものができたら、それを元にAIにコーディングを委託し、プロダクトを作っていく。

おすすめはモノレポ構成だ。設計がブレにくく、CLAUDE.md などに書き起こす際やバージョン管理が楽になるからである。

メリット

AI時代のドキュメント駆動開発には、次のようなメリットがある。

  • 仕様のバージョン変更がGitで管理できる
    product.md や設計ドキュメントをコードと同じリポジトリで管理することで、仕様がいつ・どう変わったのかを履歴として追える。

  • 新規開発者や引き継ぎに強い
    仕様と設計が言語化されているため、口頭説明や記憶に頼らずオンボーディングができる。

  • AIとの認識の相違を事前に防げる
    コーディングを委託する前に設計段階ですり合わせておくことで、AIが誤った前提でコードを書いてしまうリスクを減らせる。

  • しっかり設計を行なった状態でプロダクトの開発ができる
    勢いだけで実装に入らず、設計を固めてから着手できるため、手戻りが少ない。

  • 保守性をある程度担保できる
    仕様と実装の対応関係が残るため、後から機能追加や改修を行う際にも影響範囲を把握しやすい。

注意点・向かないケース

一方で、このやり方が常に最適とは限らない。

  • ドキュメントの往復コストが発生する
    仕様策定→フォーマット化→設計→レビューという工程を踏む分、思いついたその日にコードを書き始めるスピード感は失われる。検証段階のMVPや、数時間で作り切りたい小さなツールには過剰な場合がある。

  • ドキュメントと実装が乖離するリスク
    設計後にAIへ実装を任せきりにすると、実装が進むうちに仕様書側が更新されなくなり、いつの間にか「また仕様が実態と合わなくなる」状態に逆戻りしかねない。ドキュメントは作って終わりではなく、変更のたびに更新する運用ルールとセットで機能する。

  • 探索段階のプロダクトには不向きなことがある
    「何を作るべきか」自体がまだ定まっていない、仮説検証フェーズのプロダクトでは、先に設計を固めることがかえって足かせになる場合もある。この手法は、ある程度作るものの方向性が見えてから効いてくる。

こうした限界があることを踏まえた上で、それでも「後から泣く」よりは「先に少し手間をかける」方が、長く運用するプロダクトには合っていると私は考えている。

おわりに

AIによって、誰もが「動くもの」を作れる時代になった。これは間違いなく歓迎すべき変化だ。しかし「動くもの」と「生き続けられるもの」の間には、依然として大きな溝がある。

その溝を埋めるのは、AIの性能でもコーディング速度でもない。言語化された仕様だ。

コードは書き直せる。しかし、開発者の頭の中にしかない意図や判断の理由は、失われた瞬間に本当に取り戻せなくなる。AI以前の時代であれば、まだ本人に聞けば済んだ。今の時代は、本人の頭の中にすら残っていないかもしれない。だからこそ、ドキュメントという形で外部化しておく必要がある。

プロダクトのインフレ状態は、これからも加速していくだろう。その中で生き残るのは、最も速く作られたプロダクトではなく、最も正しく引き継げるプロダクトだと私は思う。

AIに書かせて終わりにするのではなく、AIと一緒に「残すもの」を作る。それが、AI時代のドキュメント駆動開発だ。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?