📖 読了目安 約11分
この記事の目次

処理設計書の読み方

処理設計書は、バックエンドの処理ロジックを定義したドキュメントです。API実装やサーバーサイドの開発で必ず参照します。

処理設計書とは

役割

  • 処理の目的と概要を定義
  • 入出力データを定義
  • 処理フロー(ロジック)を定義
  • エラー処理を定義
  • 使用するテーブルを定義

いつ使うか

場面 使い方
バックエンド実装時 処理ロジックの確認
API実装時 入出力、エラー処理の確認
テスト実施時 正常系・異常系の確認
障害調査時 処理フローの確認

処理設計書の構成

よくある構成要素

項目 内容 確認ポイント
基本情報 処理ID、処理名、関連画面 最新版か確認
処理概要 この処理の目的 何をする処理か
API仕様 エンドポイント、メソッド URL、認証要否
入力パラメータ リクエストデータ 必須/任意、型
出力パラメータ レスポンスデータ 成功時/失敗時
処理フロー 処理の順序 チェック順序
エラー処理 エラー時の動作 ステータスコード
使用テーブル DBテーブル 参照/更新の区別

読み方の流れ

flowchart TD
    A[1. 基本情報で関連画面を確認] --> B[2. 処理概要で目的を理解]
    B --> C[3. 入出力を把握]
    C --> D[4. 処理フローを追う]
    D --> E[5. エラー処理を確認]
    E --> F[6. 使用テーブルを確認]
    F --> G[7. セキュリティ考慮事項を確認]

【サンプル】処理設計書の実例

画面設計書と対になる、処理(バックエンド)側の設計書サンプルです。

処理設計書サンプル:ユーザー登録API

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
処理設計書
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

■ 基本情報
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
処理ID      : API-001
処理名      : ユーザー登録API
関連画面    : SCR-001(ユーザー登録画面)
作成日      : 2024/01/15
更新日      : 2024/02/20
バージョン  : 1.2

■ 処理概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
新規ユーザーの情報をデータベースに登録する。
メールアドレスの重複チェック、パスワードのハッシュ化を行う。

■ API仕様
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
エンドポイント  : POST /api/users
認証            : 不要
コンテンツタイプ: application/json

■ 入力パラメータ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

| No | パラメータ名 | 型 | 必須 | 説明 | 例 |
|----|-------------|------|------|------|-----|
| 1 | email | String | ○ | メールアドレス | "user@example.com" |
| 2 | password | String | ○ | パスワード | "Password123" |
| 3 | name | String | ○ | 氏名 | "山田太郎" |
| 4 | phone | String | - | 電話番号 | "03-1234-5678" |

【リクエストサンプル】
{
  "email": "user@example.com",
  "password": "Password123",
  "name": "山田太郎",
  "phone": "03-1234-5678"
}

■ 出力パラメータ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【成功時】HTTPステータス: 201 Created

| No | パラメータ名 | 型 | 説明 |
|----|-------------|------|------|
| 1 | user_id | Integer | 登録されたユーザーID |
| 2 | email | String | メールアドレス |
| 3 | name | String | 氏名 |
| 4 | created_at | DateTime | 登録日時 |

【レスポンスサンプル】
{
  "user_id": 12345,
  "email": "user@example.com",
  "name": "山田太郎",
  "created_at": "2024-01-15T10:30:00+09:00"
}

■ 処理フロー
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌─────────────────────────────────────────────────────────┐
│ 1. リクエスト受信                                         │
├─────────────────────────────────────────────────────────┤
│ 2. 入力バリデーション                                     │
│    - 必須チェック(email, password, name)                │
│    - 形式チェック(email形式、パスワード8文字以上)        │
├─────────────────────────────────────────────────────────┤
│ 3. メールアドレス重複チェック                             │
│    SELECT COUNT(*) FROM users WHERE email = ?            │
│    → 1件以上あれば重複エラー                             │
├─────────────────────────────────────────────────────────┤
│ 4. パスワードハッシュ化                                   │
│    bcrypt(password, salt_rounds=10)                      │
├─────────────────────────────────────────────────────────┤
│ 5. ユーザー情報登録                                       │
│    INSERT INTO users (email, password_hash, name, phone, │
│                       created_at, updated_at)            │
│    VALUES (?, ?, ?, ?, NOW(), NOW())                     │
├─────────────────────────────────────────────────────────┤
│ 6. レスポンス返却                                         │
│    登録されたuser_idを含むJSONを返す                      │
└─────────────────────────────────────────────────────────┘
flowchart TD
    A[リクエスト受信] --> B{入力バリデーション}
    B -->|NG| C[400 Bad Request]
    B -->|OK| D{メール重複チェック}
    D -->|重複あり| E[409 Conflict]
    D -->|重複なし| F[パスワードハッシュ化]
    F --> G[DBに登録]
    G -->|成功| H[201 Created]
    G -->|失敗| I[500 Internal Server Error]
■ エラー処理
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

| HTTPステータス | エラーコード | 発生条件 | エラーメッセージ |
|---------------|-------------|---------|-----------------|
| 400 | INVALID_EMAIL | メール形式不正 | メールアドレスの形式が正しくありません |
| 400 | INVALID_PASSWORD | パスワード要件未達 | パスワードは8文字以上で入力してください |
| 400 | MISSING_REQUIRED | 必須項目未入力 | {項目名}を入力してください |
| 409 | EMAIL_EXISTS | メール重複 | このメールアドレスは既に登録されています |
| 500 | INTERNAL_ERROR | システムエラー | システムエラーが発生しました |

【エラーレスポンスサンプル】
{
  "error": {
    "code": "EMAIL_EXISTS",
    "message": "このメールアドレスは既に登録されています"
  }
}

■ 使用テーブル
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【usersテーブル】

| カラム名 | 型 | NULL | 説明 |
|---------|------|------|------|
| user_id | INT | × | 主キー(自動採番) |
| email | VARCHAR(256) | × | メールアドレス(ユニーク) |
| password_hash | VARCHAR(256) | × | パスワード(ハッシュ済) |
| name | VARCHAR(100) | × | 氏名 |
| phone | VARCHAR(15) | ○ | 電話番号 |
| created_at | DATETIME | × | 作成日時 |
| updated_at | DATETIME | × | 更新日時 |

■ セキュリティ考慮事項
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- パスワードは平文で保存しない(bcryptでハッシュ化)
- SQLインジェクション対策(プレースホルダー使用)
- レスポンスにpasswordを含めない

■ 備考
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- v1.1 phone項目追加
- v1.2 パスワード要件変更(英数字混合必須)

読むときのチェックポイント

確認する箇所 確認すること 見落としがちなポイント
入力パラメータ 必須/任意の区別 phoneは任意(NULLを許容する必要あり)
処理フロー チェックの順序 入力バリデーション→重複チェックの順
エラー処理 HTTPステータスの使い分け 重複は400ではなく409 Conflict
使用テーブル カラムの型と制約 emailにユニーク制約がある
セキュリティ パスワードの扱い 平文保存NG、レスポンスに含めない

画面設計書と処理設計書の対応関係

flowchart LR
    subgraph 画面設計書
        A1[入力項目] --> A2[入力チェック]
        A2 --> A3[ボタン動作]
    end
    subgraph 処理設計書
        B1[入力パラメータ] --> B2[入力バリデーション]
        B2 --> B3[処理フロー]
    end
    A1 -.->|対応| B1
    A2 -.->|一部対応| B2
    A3 -.->|API呼び出し| B3

フロントとバックエンドのバリデーション役割分担

チェック種類 画面側(フロント) 処理側(バックエンド)
必須チェック ○(二重チェック)
形式チェック ○(二重チェック)
重複チェック × ○(DB参照が必要)
桁数チェック ○(二重チェック)

ポイント:セキュリティ上、バックエンド側でも必ずバリデーションを行います。フロント側は「ユーザビリティ向上」、バックエンド側は「セキュリティ担保」の役割です。

処理設計書でよくある落とし穴

落とし穴 対策
任意項目のNULL処理を忘れる 入力パラメータの必須欄を確認
HTTPステータスコードを間違える エラー処理の表を確認
処理順序を変える 処理フローの順番通りに実装
セキュリティ考慮を見落とす セキュリティ考慮事項を必ず読む
レスポンスに余計な情報を含める 出力パラメータに定義されたものだけ返す

質問例:処理設計書について確認するとき

処理設計書API-001について確認させてください。

処理フローのステップ3「メールアドレス重複チェック」について、
大文字小文字を区別するかどうか教えてください。

例えば、以下は同一ユーザーとして扱いますか?
- User@example.com
- user@example.com

関連ドキュメント