AI開発

AIに設計書・コード・テストを全部書かせたとき、現場で起きること

アツメル株式会社|8分で読めます
AIに設計書・コード・テストを全部書かせたとき、現場で起きること

AIが「全部書ける」時代に、何かがずれている

最近、「AIに設計書もコードもテストもすべて書かせて半年間開発してみた」という体験記が話題になった。読んでいて、「ああ、これは多くのチームが辿る道だな」と感じた。

AIが実際に動くコードを書ける。テストコードを自動生成できる。設計書の下書きも作れる。それは事実だ。でも、現場で試してみると「なんか思ったより大変だった」という感想になりがちだ。

なぜか。

結論から言うと、AIは「書けるか書けないか」の問題ではなく、「何を書かせるか」の問題だ。設計書・コード・テストのどれを自動化するかより、それらをつなぐ「意図の構造」をどう管理するかのほうが、はるかに重要だということを、現場で痛感している。


半年試して、何が起きるか

AIに開発の上流から下流まで一貫して任せた場合、最初の数週間は非常に順調に見える。コードは出てくる。設計書もそれらしい体裁になる。テストも通る。

ところが、2〜3ヶ月が経った頃から、特定のパターンが現れ始める。

1. コードと設計書が静かに乖離していく

AIが生成した設計書は、コードを書いた瞬間の状態を反映している。しかし開発が進み、仕様が変わり、リファクタリングが入ると、設計書はその変更を追いかけない。

人間がコードを書いていた頃でも同じ問題はあった。ただ、AIがコードを書く速度は人間の5〜10倍速い。変更の速度が上がるほど、設計書の陳腐化も加速する。

「設計書を更新してください」とAIに頼むと、確かに更新してくれる。でも、そのAIは「現在のコードがどういう意図で書かれているか」を本当に理解しているわけではない。コードを読んで、それっぽい説明を生成しているだけだ。

結果として、設計書とコードは「表面的には似ている」けれど「意図は違う」という状態になる。

2. テストが通っているのに品質が怪しい

AIが書いたテストは、AIが書いたコードに対して非常に相性がいい。そのコードの実装に合わせてテストを書くので、当然カバレッジは高くなる。

問題は、テストが「コードが何をしているか」を検証しているのか、「コードが何をすべきか」を検証しているのかが、曖昧になることだ。

実装に引きずられたテストは、実装が間違っていても通る。「動いている」と「正しい」は別の話だ。この区別をつけるためには、「あるべき動作」を独立して定義する必要がある。それが設計書であり、仕様だ。

3. 変更が怖くなる

半年経つと、多くのチームが「大きな変更に踏み切れなくなる」という状況に陥る。

コードもテストもAIが書いており、設計書との整合性は曖昧。何かを変えると、どこに影響が出るかがわからない。AIに「この変更の影響範囲を教えて」と聞いても、コードを読んだ推測しか返ってこない。

つまり、スピードが上がるほど、変更のコストも上がっていくという逆転現象が起きる。


問題の根っこは「上流」にある

これらの問題には、共通の原因がある。

設計書・コード・テストのどれを自動化するかという話ではなく、それらをつなぐ「意図」が明示されていないことだ。

AIは与えられたコンテキストに基づいて出力を生成する。コードを書けと言えばコードを書く。テストを書けと言えばテストを書く。設計書を書けと言えば設計書を書く。

しかし、「なぜこの機能が必要なのか」「この設計でどういう制約を満たさなければならないのか」「このテストケースはどういる要求を検証しているのか」という意図のレイヤーを、AIは自律的に管理してくれない。

管理の本質がここにある。


上流工程をAIに「任せる」と「使う」の違い

よく混同されるのが、「AIに上流工程を任せる」と「上流工程でAIを使う」という2つのアプローチだ。

任せる:AIが決める

  • 「要件定義書を書いて」→ AIが自由に書く
  • 「設計書にまとめて」→ AIがそれらしい文書を生成する
  • 「テスト仕様を考えて」→ AIが網羅的なケースを列挙する

これは速い。でも、「AIが書いたもの」になる。チームの意図・制約・文脈が入らない。

使う:人間が決める、AIが整理する

  • チームで合意した要件を、AIが構造化する
  • 議論で出た設計の意図を、AIがドキュメントに落とす
  • テストしたい「振る舞い」を人間が定義し、AIがテストコードに変換する

この違いは小さく見えるが、半年後の結果は大きく違う。

後者のアプローチでは、設計書はチームの意図の記録になる。コードはその意図に基づいて生成される。テストは意図した振る舞いを検証する。整合性が取れた状態が維持される。


「AIが読める仕様書」とは何か

ここで重要になるのが、「AIが読める仕様書」という概念だ。

AIが読めない仕様書というのは、人間の感覚では理解できるが、AIが処理しようとすると文脈が欠けているものだ。

例えばこんな記述。

ユーザー管理機能
- ユーザーの登録・編集・削除ができる
- 権限に応じた制御を行う

これを読んで「よし、コードを書こう」とAIに渡すと、AIはそれなりにコードを書く。でも、「権限に応じた制御」の具体的なルール、ユーザー削除時の関連データの扱い、エラー時の挙動などは、AIが推測で埋めることになる。

その推測がチームの意図と合っていれば問題ない。ずれていると、後でレビューや修正が必要になる。

AIが読める仕様書は、こういった「暗黙の前提」を明示する構造を持っている。

## ユーザー管理機能

### 権限モデル
- admin: 全操作可能
- editor: 自分以外の閲覧は可能、編集・削除は不可
- viewer: 閲覧のみ

### ユーザー削除時の挙動
- 論理削除(物理削除はしない)
- 関連するコメント・投稿は削除ユーザーのまま保持
- セッションを即時無効化

### エラーハンドリング
- 権限エラー: 403を返す(詳細なエラーメッセージは出さない)
- 存在しないユーザーへの操作: 404を返す

この構造であれば、AIは推測する余地がなくなる。意図通りのコードが出てくる確率が格段に上がる。


実務で使えるアプローチ

では、具体的にどう変えればいいか。

1. 仕様に「なぜ」を入れる

多くの設計書には「何を作るか」は書いてあるが「なぜそう決めたか」が抜けている。

AIにコードを書かせる場合、「なぜ」がないと実装の方向性がぶれる。「レスポンスタイムを200ms以内にする」という制約があるなら、その理由(ユーザー体験の閾値)と優先順位(他の要件とトレードオフになるとき何を選ぶか)を明示するべきだ。

2. 変更の影響範囲を仕様レベルで管理する

コードの依存関係はAIが解析できる。でも、仕様の依存関係は明示しないとわからない。

「このAPIの仕様を変えると、フロントエンドの画面Aと、バッチ処理Bに影響する」という関係を、仕様書レベルで記録しておく。これにより、変更時にAIが「この変更の影響範囲」を正確に把握できるようになる。

3. AIとのレビューサイクルを短くする

設計書→コード→テストという大きな単位で任せるのではなく、「この関数の仕様を確認してからコードを書く」というサイクルを短くする。

一度に大量のコードを生成させると、後からずれを修正するコストが大きくなる。小さい単位で意図を確認しながら進むほうが、結果的に速い。


なぜ上流が重要か、改めて

AIがコードを書ける時代になって、上流工程の重要性は下がっていない。むしろ上がっている。

コードは生成できる。テストも生成できる。でも、「何を作るべきか」「どういう品質を担保すべきか」という意思決定は、AIには代替できない。

そして、その意思決定をAIに正しく伝えるためのフォーマット、つまり「構造化された仕様書」の重要性が、AIが普及するほど際立ってくる。

「AIに全部任せてみた」という実験の結論が「やっぱり上流が大事だった」になるのは、偶然ではない。AIが高速にアウトプットを生成できるからこそ、インプットの質が問われる。


まとめ

AIに設計書・コード・テストをすべて書かせる実験から見えてくるのは、自動化の難易度ではなく、意図の伝え方の問題だ。

  • 設計書とコードの乖離 → 仕様の構造化が解決する
  • テストが通るのに品質が怪しい → 「あるべき振る舞い」の明示が解決する
  • 変更が怖くなる → 仕様レベルの依存関係管理が解決する

AIを活用した開発で本当に必要なのは、「AIに何かを書かせる技術」よりも「AIが理解できる仕様を作る技術」だ。

アツメルが開発している Kakusill は、この「AIが読める仕様書」の作成・管理を支援するためのプロダクトだ。要件定義の段階から仕様を構造化し、AIとの協働を効率化することを目指している。AIを使った開発をさらに加速させたい方は、ぜひ試してみてほしい。


関連記事

#AI開発#設計書#仕様駆動開発#上流工程#ソフトウェア品質

AI仕様書エディタKakusillに興味がありますか?

無料トライアルで、AIと開発する体験をすぐにお試しいただけます。

お問い合わせ