AI時代の開発において、最も重要になる工程の一つが「詳細設計」です。
要件定義で「何を作るのか」を決め、基本設計で「システム全体をどう作るのか」を決めたあと、実際の実装に入る前に必要になるのが詳細設計です。
詳細設計とは、AIやエンジニアが迷わず実装できるレベルまで、処理内容・画面の動き・データの扱い・例外処理を具体化する工程です。
AIはコードを書く速度を大きく上げてくれます。しかし、AIに任せる範囲が広すぎると、開発はかえって危険になります。
なぜなら、AIは曖昧な指示に対しても、何らかの答えを出してしまうからです。
なぜ詳細設計が重要なのか
従来の開発では、仕様が少し曖昧でも、エンジニアが確認しながら実装することができました。
しかしAIを使った開発では、曖昧な仕様をそのまま入力すると、AIが不足している部分を勝手に補完してコードを書いてしまいます。
AI時代の詳細設計が重要なのは、「AIに考えさせる部分」と「人間が決めるべき部分」を分けるためです。
たとえば、「ユーザー登録機能を作って」とだけ指示した場合、AIはそれらしいコードを書いてくれます。
しかし、実際には次のようなことを決める必要があります。
- メールアドレスは必須にするのか
- パスワードの文字数制限はどうするのか
- 同じメールアドレスで登録された場合はどうするのか
- 入力エラーはどのように表示するのか
- 登録完了後にどの画面へ移動するのか
- 認証メールを送るのか
- 退会済みユーザーの再登録を許可するのか
これらを決めないままAIに実装させると、AIは一般的にありそうな仕様を推測してコードを書きます。
その結果、一見動くものはできます。しかし、実際のサービス要件とはズレた実装になる危険があります。
AIは曖昧仕様を勝手に補完する
AI開発で特に注意すべきなのが、「AIは曖昧な部分を空白のままにしない」という点です。
人間であれば、「ここは仕様が決まっていないので確認が必要です」と止まる場面でも、AIは自然に補完してしまうことがあります。
AIは便利ですが、仕様の未確定部分を見つけるよりも、もっともらしい実装を作る方向に進みやすいです。
たとえば、「一覧画面を作って」と指示した場合、AIは自動的にページネーションを入れるかもしれません。
あるいは、検索機能や並び替え機能を勝手に追加するかもしれません。
逆に、本当は必要だったエラーハンドリングや権限制御を省略してしまうこともあります。
つまりAIは、「良さそうなもの」を作ることは得意ですが、「そのプロダクトにとって正しいもの」を判断することは苦手です。
だからこそ、人間が事前に詳細設計を行い、AIに渡すべき情報を明確にする必要があります。
詳細設計がないと起きる問題
詳細設計が不十分なままAIに実装を任せると、開発の初期段階では速く進んでいるように見えます。
しかし、あとから仕様のズレや設計の不整合が見つかり、修正に大きな時間がかかります。
詳細設計を省略すると、最初は速く見えても、後半で大きな手戻りが発生します。
特に起きやすい問題は、次のようなものです。
- 画面ごとに動きがバラバラになる
- 同じ意味のデータが複数の形式で扱われる
- エラー処理が画面によって違う
- APIの入出力形式が統一されない
- 権限制御が抜ける
- あとから仕様変更しづらいコードになる
- AIが生成したコードの意図を人間が理解できなくなる
AIが書いたコードは、一見するときれいに見えることがあります。
しかし、そのコードがなぜそうなっているのか、どの仕様に基づいているのかが分からないと、保守が難しくなります。
ブラックボックス化問題
AI時代の開発で大きな問題になるのが、ブラックボックス化です。
ブラックボックス化とは、システムが動いている理由や、コードの意図が分からなくなる状態のことです。
AIに任せすぎると、「動いているけれど、なぜ動いているのか分からない」状態になりやすくなります。
たとえば、AIに何度も修正を依頼しているうちに、コードの中に不要な処理が増えていくことがあります。
最初は小さな修正だったはずが、気づけば条件分岐が複雑になり、どの処理が何のために存在しているのか分からなくなるのです。
この状態になると、次のような問題が発生します。
- バグが起きても原因を追いづらい
- 仕様変更の影響範囲が分からない
- 不要なコードを削除できない
- AIに再修正を依頼しても、さらに複雑になる
- 人間がコードを管理できなくなる
AI開発では、コードを書くスピードが上がる分、ブラックボックス化のスピードも上がります。
だからこそ、実装前に詳細設計を行い、「なぜこの処理が必要なのか」を明確にしておくことが重要です。
実装前に決めるべきこと
詳細設計では、実装前にできるだけ具体的なルールを決めておきます。
ここで重要なのは、すべてを難しい設計書にすることではありません。
大切なのは、AIが勝手に判断しなくていい状態を作ることです。
実装前に決めるべき内容は、大きく分けると次のようになります。
画面の動き
画面ごとに、ユーザーが何をできるのかを決めます。
- どのボタンを押すと何が起きるのか
- 入力欄には何を入れるのか
- 初期表示では何を表示するのか
- データがない場合は何を表示するのか
- 処理中はローディングを出すのか
- 完了後にメッセージを出すのか
データの扱い
どのデータを、どの形式で、どこに保存するのかを決めます。
- 必要なテーブルやカラム
- データ型
- 必須項目
- 初期値
- 更新タイミング
- 削除方法
APIの仕様
フロントエンドとバックエンドをつなぐAPIの仕様も、実装前に決めておく必要があります。
- URL
- HTTPメソッド
- リクエスト項目
- レスポンス項目
- 成功時の形式
- 失敗時の形式
- ステータスコード
エラー処理
エラー処理は、AIに任せると画面や機能ごとにバラバラになりやすい部分です。
- 入力ミスの場合
- 通信エラーの場合
- ログイン期限が切れた場合
- 権限がない場合
- データが見つからない場合
- サーバー側で例外が発生した場合
権限制御
誰がどの機能を使えるのかも、詳細設計で明確にする必要があります。
- 未ログインユーザーが使える機能
- ログインユーザーが使える機能
- 管理者だけが使える機能
- 自分のデータだけ操作できるのか
- 他人のデータを見られないようにする条件
AIに渡す詳細設計の形
詳細設計は、AIにそのまま渡せる形で書くと効果的です。
たとえば、単に「メモ機能を作る」と書くのではなく、次のように具体化します。
AIに渡す設計は、「何を作るか」ではなく「どの条件で、どう動くか」まで書くことが重要です。
例として、メモ作成機能であれば次のように書きます。
- タイトルは必須
- 本文は任意
- タイトルが未入力の場合は保存しない
- 保存成功時は一覧画面へ戻る
- 保存失敗時はエラーメッセージを表示する
- 作成日時はサーバー側で自動登録する
- ログイン中のユーザーIDと紐づけて保存する
このレベルまで決めておくと、AIはかなり安定して実装できます。
逆に、この情報がない状態でAIに作らせると、AIは自分で仕様を補完します。
その補完が正しければ問題ありませんが、実際のサービス方針とズレている場合、あとから修正が必要になります。
詳細設計はAIを縛るものではない
詳細設計というと、AIの自由度を下げるもののように感じるかもしれません。
しかし実際には逆です。
詳細設計は、AIの能力を正しい方向に使うためのレールです。
AIは、具体的な条件があるほど精度の高いコードを生成できます。
「いい感じに作って」と依頼するよりも、「この条件で、この動きをするように作って」と依頼した方が、実用的なコードになります。
AIに任せるべきなのは、コードの具体的な書き方や実装パターンです。
一方で、人間が決めるべきなのは、仕様・業務ルール・ユーザー体験・データの意味です。
この役割分担ができていると、AI開発は非常に強力になります。
詳細設計で開発スピードは落ちるのか
詳細設計を丁寧に行うと、最初は開発スピードが落ちるように見えるかもしれません。
しかし、実際には逆です。
詳細設計を先に行うことで、AIへの指示が明確になり、修正回数が大きく減ります。
AI開発で時間がかかる原因の多くは、コードを書くことではありません。
むしろ、AIが作ったコードを見て、「思っていたものと違う」と修正を繰り返すことに時間がかかります。
詳細設計があれば、最初からAIに明確な指示を出せます。
その結果、次のような効果があります。
- AIへの指示が具体的になる
- 生成されるコードのズレが減る
- レビューしやすくなる
- バグの原因を追いやすくなる
- 仕様変更にも対応しやすくなる
つまり詳細設計は、開発を遅くするものではありません。
AI開発を安定して速く進めるための準備です。
AI時代の詳細設計で意識すべきこと
AI時代の詳細設計では、完璧な設計書を作ることよりも、AIが迷わない情報を整理することが重要です。
特に意識したいのは、次の3つです。
「入力」「処理」「出力」を明確にすると、AIの実装精度は大きく上がります。
まず、入力です。
ユーザーが何を入力するのか、どの項目が必須なのか、どの形式なら許可するのかを決めます。
次に、処理です。
入力されたデータをどのようにチェックし、どのように保存し、どの条件でエラーにするのかを決めます。
最後に、出力です。
成功したときに何を返すのか、失敗したときに何を表示するのか、ユーザーをどの画面に移動させるのかを決めます。
この3つを整理するだけでも、AIに渡す仕様はかなり明確になります。


コメント