第3部:ドキュメントスキル / 第2章:設計理解

詳細設計書の読み方

詳細設計書は、システムの内部仕様を定義したドキュメントです。「どう作るか」「具体的にどう実装するか」を記述します。

📖 読了目安 約25分 対象:詳細設計書を理解し、実装に必要な情報を読み取りたい方

詳細設計書とは

別名

詳細設計書は、現場によって以下のような呼び方をされることがあります。

  • 内部設計書
  • 詳細設計
  • DD(Detail Design)
  • プログラム設計書

役割

詳細設計書は、基本設計書と実装の間に位置し、開発者が実装するために必要な具体的な情報を記載します。

flowchart LR
    A[要件定義書] --> B[基本設計書]
    B -->|何を作るか| C[詳細設計書]
    C -->|どう作るか| D[実装]

基本設計書との違い

観点基本設計書詳細設計書
別名外部設計書内部設計書
視点ユーザー視点(外部)開発者視点(内部)
内容何を作るかどう作るか
対象者お客様、SE、PM開発者、PG
詳細度概念的・俯瞰的具体的・詳細

なぜ詳細設計書が必要か?
基本設計書だけでは「どのテーブルにどんなカラムを作るか」「APIのリクエスト/レスポンスは何か」といった具体的な実装情報が分かりません。詳細設計書は、開発者が迷わず実装できるレベルまで詳細を記載します。

詳細設計書の構成要素

詳細設計書は、複数のドキュメントで構成されることが多いです。

ドキュメント内容詳細ページ
画面設計書画面レイアウト、項目定義、入力チェック画面設計書の読み方
処理設計書処理ロジック、条件分岐処理設計書の読み方
処理フロー図処理の流れをフローチャートで表現処理フロー図の読み方
クラス図クラス構造と関係性クラス図の読み方
状態遷移図データや画面の状態変化状態遷移図の読み方
ER図テーブル間の関係ER図の読み方
テーブル定義書カラム定義、型、制約テーブル定義書の読み方
API仕様書エンドポイント、パラメータ、レスポンスAPI仕様書の読み方

すべてを暗記しなくていい
必要なときに該当するドキュメントを参照すればOKです。まずは「どんなドキュメントがあるか」を把握しましょう。

【実践】詳細設計書サンプルと読み方

ここからは、詳細設計書に含まれる代表的なドキュメントのサンプルを使って、具体的な読み方を解説します。

サンプル1:画面項目定義書

画面項目定義書は、画面上の各項目の仕様を定義します。

【サンプル】会員登録画面 項目定義書

No項目ID項目名種別桁数必須初期値説明
1userIdユーザーIDテキスト20-半角英数字、先頭は英字
2passwordパスワードパスワード20-8文字以上、英数字混合必須
3passwordConfirmパスワード(確認)パスワード20-passwordと一致すること
4lastNameテキスト50-全角のみ
5firstNameテキスト50-全角のみ
6emailメールアドレスメール256-形式チェック必須
7phone電話番号テキスト15--ハイフンなし数字のみ
8birthDate生年月日日付---yyyy/MM/dd形式
9gender性別ラジオ--未選択男性/女性/その他
10agree利用規約同意チェック-OFFONでないと登録不可

この設計書から読み取るべきこと

flowchart TD
    A[項目定義書] --> B{何を確認する?}
    B --> C[入力項目の数と種類]
    B --> D[必須チェックの対象]
    B --> E[桁数・形式の制約]
    B --> F[バリデーションルール]

    C --> G[画面のHTML構造を決める]
    D --> H[必須チェック処理を実装]
    E --> I[入力制限を実装]
    F --> J[エラーメッセージを準備]

【実践】この設計書から実装を考える

ステップ1:HTMLの構造を考える

<!-- 項目定義書の「種別」を見てinputタイプを決める -->
<input type="text" id="userId" maxlength="20" required>      <!-- No.1 -->
<input type="password" id="password" maxlength="20" required> <!-- No.2 -->
<input type="email" id="email" maxlength="256" required>      <!-- No.6 -->
<input type="date" id="birthDate">                            <!-- No.8 -->
<input type="checkbox" id="agree" required>                   <!-- No.10 -->

ステップ2:バリデーションを考える

項目バリデーション内容実装方法
userId半角英数字、先頭英字正規表現 /^[a-zA-Z][a-zA-Z0-9]*$/
password8文字以上、英数字混合長さチェック + 正規表現
passwordConfirmpasswordと一致値の比較
emailメール形式正規表現またはライブラリ
phone数字のみ正規表現 /^[0-9]*$/

設計書を読むときのコツ
「必須」列を先にチェックして、必須項目の数を把握しましょう。必須項目が多いと、バリデーション処理も多くなります。

詳しくは 画面設計書の読み方">画面設計書の読み方 を参照してください。

サンプル2:API仕様書(IF仕様書)

API仕様書は、APIのリクエストとレスポンスを定義します。

【サンプル】会員登録API仕様書

■ 基本情報

項目内容
API名会員登録API
エンドポイントPOST /api/v1/users
認証不要
Content-Typeapplication/json

■ リクエストパラメータ

Noパラメータ名必須桁数説明
1userIdString1-20ユーザーID
2passwordString8-20パスワード
3lastNameString1-50
4firstNameString1-50
5emailString1-256メールアドレス
6phoneString-0-15電話番号
7birthDateString-10生年月日(yyyy-MM-dd)
8genderString--性別(MALE/FEMALE/OTHER)

■ リクエスト例

{
  "userId": "yamada123",
  "password": "Pass1234",
  "lastName": "山田",
  "firstName": "太郎",
  "email": "yamada@example.com",
  "phone": "09012345678",
  "birthDate": "1990-01-15",
  "gender": "MALE"
}

■ レスポンス(正常時:201 Created)

Noパラメータ名説明
1idLongユーザーの内部ID
2userIdStringユーザーID
3createdAtString登録日時(ISO8601)
{
  "id": 12345,
  "userId": "yamada123",
  "createdAt": "2025-01-15T10:30:00+09:00"
}

■ エラーレスポンス

HTTPステータスエラーコード説明
400 Bad RequestE001必須項目が未入力
400 Bad RequestE002形式エラー
409 ConflictE101ユーザーIDが既に存在
409 ConflictE102メールアドレスが既に存在
500 Internal Server ErrorE999システムエラー

【実践】この設計書から実装を考える

ステップ1:リクエストクラスを作る

// API仕様書の「リクエストパラメータ」から作成
public class UserRegistrationRequest {
    @NotBlank
    @Size(min = 1, max = 20)
    private String userId;

    @NotBlank
    @Size(min = 8, max = 20)
    private String password;

    @NotBlank
    @Size(min = 1, max = 50)
    private String lastName;

    @NotBlank
    @Size(min = 1, max = 50)
    private String firstName;

    @NotBlank
    @Email
    @Size(max = 256)
    private String email;

    @Size(max = 15)
    private String phone;  // 必須でない

    private String birthDate;  // 必須でない

    private String gender;  // 必須でない
}

ステップ2:レスポンスクラスを作る

// API仕様書の「レスポンス」から作成
public class UserRegistrationResponse {
    private Long id;
    private String userId;
    private String createdAt;
}

ステップ3:エラーハンドリングを考える

// API仕様書の「エラーレスポンス」から作成
public class ApiError {
    private String errorCode;
    private String message;
}

// エラーコードを定数化
public enum ErrorCode {
    E001("必須項目が未入力です"),
    E002("入力形式が正しくありません"),
    E101("指定されたユーザーIDは既に使用されています"),
    E102("指定されたメールアドレスは既に使用されています"),
    E999("システムエラーが発生しました");

    private final String message;
    // ...
}

API仕様書を読むときの鉄則

  1. 必須項目を最初に確認:バリデーションの範囲を把握
  2. 型と桁数を確認:DBカラムやバリデーションに直結
  3. エラーパターンを確認:例外処理の設計に必要
  4. リクエスト例を動かしてみる:Postman等でAPIを叩いて動作確認

詳しくは API仕様書の読み方">API仕様書の読み方 を参照してください。

サンプル3:テーブル定義書

テーブル定義書は、データベースのテーブル構造を定義します。

【サンプル】ユーザーテーブル定義

■ テーブル基本情報

項目内容
テーブル名(物理)m_user
テーブル名(論理)ユーザーマスタ
説明会員情報を管理するマスタテーブル

■ カラム定義

Noカラム名(物理)カラム名(論理)桁数NULLPKデフォルト説明
1idIDBIGINT-×AUTOサロゲートキー
2user_idユーザーIDVARCHAR20×--ログインID
3password_hashパスワードハッシュVARCHAR256×--BCryptハッシュ
4last_nameVARCHAR50×---
5first_nameVARCHAR50×---
6emailメールアドレスVARCHAR256×---
7phone電話番号VARCHAR15-NULL-
8birth_date生年月日DATE--NULL-
9gender性別VARCHAR10-NULLMALE/FEMALE/OTHER
10statusステータスVARCHAR20×-ACTIVEACTIVE/INACTIVE/DELETED
11created_at作成日時TIMESTAMP-×-CURRENT_TIMESTAMP-
12updated_at更新日時TIMESTAMP-×-CURRENT_TIMESTAMP更新時自動更新

■ インデックス

インデックス名カラムユニーク説明
idx_user_iduser_idユーザーID検索用
idx_emailemailメール検索用
idx_statusstatus×ステータス絞り込み用

この設計書から読み取るべきこと

確認ポイント読み取る内容実装への影響
PK列どのカラムが主キーかエンティティの@Id設定
NULL可否必須カラムはどれかNOT NULL制約、バリデーション
型と桁数データ型と最大長エンティティのフィールド型
デフォルト値初期値は何かINSERT時の値設定
ユニークインデックス一意制約があるカラム重複チェック処理が必要

【実践】この設計書からエンティティを作る

@Entity
@Table(name = "m_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;  // No.1: PK, AUTO

    @Column(name = "user_id", nullable = false, length = 20)
    private String userId;  // No.2: NOT NULL, VARCHAR(20)

    @Column(name = "password_hash", nullable = false, length = 256)
    private String passwordHash;  // No.3

    @Column(name = "last_name", nullable = false, length = 50)
    private String lastName;  // No.4

    @Column(name = "first_name", nullable = false, length = 50)
    private String firstName;  // No.5

    @Column(nullable = false, length = 256)
    private String email;  // No.6

    @Column(length = 15)
    private String phone;  // No.7: NULL許可

    @Column(name = "birth_date")
    private LocalDate birthDate;  // No.8: NULL許可

    @Column(length = 10)
    private String gender;  // No.9: NULL許可

    @Column(nullable = false, length = 20)
    private String status = "ACTIVE";  // No.10: デフォルト値

    @Column(name = "created_at", nullable = false)
    private LocalDateTime createdAt;  // No.11

    @Column(name = "updated_at", nullable = false)
    private LocalDateTime updatedAt;  // No.12
}

テーブル定義書とAPI仕様書の対応

  • テーブル定義書の「物理名」はスネークケース(user_id)
  • API仕様書の「パラメータ名」はキャメルケース(userId)
  • 変換が必要なことを意識して実装しましょう

詳しくは テーブル定義書の読み方">テーブル定義書の読み方 を参照してください。

設計書間の関係を理解する

詳細設計書は複数のドキュメントで構成され、それぞれが関連しています。

flowchart TD
    subgraph 基本設計
        A[画面遷移図]
        B[機能一覧]
        C[ER図]
    end

    subgraph 詳細設計
        D[画面項目定義書]
        E[API仕様書]
        F[テーブル定義書]
        G[処理フロー]
    end

    A --> D
    B --> E
    B --> G
    C --> F

    D -.->|項目が対応| E
    E -.->|カラムが対応| F

設計書を横断的に読む

1つの機能を実装するには、複数の設計書を横断的に読む必要があります。

【例】会員登録機能を実装する場合

順番読む設計書確認すること
1機能一覧機能の概要、優先度
2画面遷移図どこから来て、どこへ行くか
3画面項目定義書入力項目と制約
4API仕様書リクエスト/レスポンス
5テーブル定義書保存するデータ構造
6処理フロー処理の流れ

詳細設計書を読む流れ

flowchart TD
    A[1. 自分の担当機能を特定] --> B[2. 関連する画面設計を読む]
    B --> C[3. API仕様書でI/Oを確認]
    C --> D[4. テーブル定義書でDB構造を確認]
    D --> E[5. 処理フローでロジックを確認]
    E --> F[6. 不明点をリストアップ]

読むときのチェックリスト

読む前に確認すること

読んだ後に確認すること

設計書間の矛盾に注意

設計書間で矛盾がある場合は、確認してから作業します。

矛盾の例対応
画面設計書の項目とAPI仕様書のパラメータが違うどちらが正しいか確認
API仕様書のカラム名とテーブル定義書が違うどちらに合わせるか確認
機能一覧にある機能の詳細設計がない詳細設計の追加が必要か確認

設計書は「約束」
設計書は開発チーム全体の「約束」です。設計と違う実装をすると、後工程(テスト、運用)で問題が発生します。疑問があれば、実装前に確認しましょう。

よくある疑問

Q: 詳細設計書がない/古い場合は?

A: コードから設計を読み取る必要があります。

  • ない場合:コードがドキュメント代わり(リバースエンジニアリング)
  • 古い場合:現状のコードと照らし合わせ、差分を確認
Q: 設計書通りに実装すべき?

A: 基本的には設計書通りに実装します。

問題がある場合は、設計者に相談して設計を変更します。勝手に変更して実装すると、テスト工程で問題になります。

Q: 設計書のどこから読めばいい?

A: 「自分が実装する機能」から逆算して読みます。

  1. 機能一覧で自分の担当を確認
  2. その機能に関連する画面設計、API設計、DB設計を読む
  3. 分からない部分は基本設計に戻って確認

1年目エンジニアとしての関わり方

場面やること
実装前詳細設計書で実装内容を確認
実装中設計書と照らし合わせて実装
レビュー時設計書通りか確認される
不明点があるとき設計書の該当箇所を示して質問

ポイント:詳細設計書は「チーム全体の約束」です。設計を丁寧に読み、理解することは、プロジェクト全体の品質につながります。

関連ドキュメント