ウェブエンジニア問題集
第3章

基本設計と詳細設計 — 2つの設計フェーズの違いと役割

6
この章の目次開く

「設計」と一口に言っても、実務では基本設計詳細設計という2つのフェーズに分かれます。 この2つの境界が曖昧だと、基本設計で細かいことを議論しすぎたり、詳細設計でアーキテクチャの根本を覆したり、非効率な進め方になります。

この章では、それぞれのフェーズで決めること・成果物・粒度の違いを整理します。

学習者学習者

「基本設計」と「詳細設計」って何が違うの?どっちのフェーズで何を決めるの?

基本設計(外部設計)で決めること

基本設計は「システム全体の構造と外部から見た振る舞い」を決めるフェーズです。

項目内容
システム構成サーバー構成、外部サービス連携、ネットワーク構成
画面一覧・画面遷移どんな画面があり、どう遷移するか
データモデル主要なエンティティとリレーション(ER図)
API一覧エンドポイント・メソッド・主要パラメータ
認証・認可方式セッション/JWT/OAuth、ロール体系
非機能要件への対応方針性能目標、可用性、セキュリティ方針

基本設計のアウトプットは「このシステムは全体としてこういう構造で、こう動く」という合意を取るためのものです。

設計の合意形成
基本設計はチーム内・クライアントとの合意が目的。コードレベルの詳細はまだ不要

詳細設計(内部設計)で決めること

詳細設計は「実装者がコードを書ける粒度まで落とし込む」フェーズです。

項目内容
テーブル定義カラム名・型・制約・インデックス
API詳細仕様リクエスト/レスポンスのフィールド定義、バリデーションルール
処理フロー主要ロジックのシーケンス図・フローチャート
エラーハンドリングエラーコード体系、異常系の振る舞い
画面項目定義入力フォームの項目・制約・初期値
「プログラマーがこのドキュメントだけ見てコードを書けるか」が詳細設計の粒度の目安。

2つのフェーズの関係

成果物の一覧と粒度

基本設計の成果物

成果物粒度
システム構成図サーバー・サービス単位Web + API + DB の3層構成
画面遷移図画面単位ログイン → 一覧 → 詳細 → 編集
ER図エンティティ単位users, orders, products の関係
API一覧エンドポイント単位GET /users, POST /orders
認証方式方式の選定JWT + リフレッシュトークン

詳細設計の成果物

成果物粒度
テーブル定義書カラム単位users.email VARCHAR(255) NOT NULL UNIQUE
API仕様書フィールド単位リクエストボディ { name: string, email: string }
シーケンス図処理ステップ単位注文処理: バリデーション → 在庫確認 → 決済 → 注文作成
画面項目定義書入力項目単位メールアドレス: 必須, 形式チェック, 255文字以内
エラーコード一覧エラー単位E001: メールアドレスが既に使われています
先生先生

基本設計書に「users テーブルの email カラムは VARCHAR(255)」と書く必要はない。逆に、詳細設計書に「全体のサーバー構成をどうするか」は書かない。粒度を間違えると、レビューの観点もずれるよ。

アジャイルでの設計フェーズ

ウォーターフォール型では基本設計→詳細設計→実装と順に進みますが、アジャイルではスプリントごとに必要な分だけ設計します。

アプローチ設計のタイミング
ウォーターフォール実装前に基本設計・詳細設計をすべて完了する
アジャイルスプリント0で全体のアーキテクチャ決定、各スプリントで必要な詳細設計を行う

「設計書を書く時間がない」問題

実務では「設計書を書く時間がない」「とりあえず作ってから考える」という圧力がかかることがあります。

よくある状況対応策
「設計書は後で書く」後で書かれた設計書は例外なく陳腐化する。最初に書く方が早い
「コードが設計書だ」コードは「どう実装したか」であり「なぜこの構造にしたか」は残らない
「スケジュールが厳しい」設計を省くと実装の手戻りで余計に時間がかかる
設計書の目的は「きれいなドキュメントを作ること」ではなく「チーム内で合意を取ること」。合意に必要な粒度で書けばよい。

ちゃんと使うためのポイント

  • 基本設計は「全体の構造と方針」、詳細設計は「実装できる粒度の仕様」
  • 基本設計を飛ばして詳細設計に入ると、根本的な構造の問題に後から気づく
  • 詳細設計は「コードを書く人が迷わない程度」が適切な粒度
  • アジャイルでも全体のアーキテクチャは最初に決める
  • 設計書の目的は合意形成。完璧なドキュメントを目指さない

次の章では、詳細設計の中核となる詳細設計書の書き方を具体的に見ていきます。