第3部:ドキュメントスキル / 第4章:ロジック実装

処理設計書の読み方

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

📖 読了目安 約15分 対象:バックエンド実装、テスト設計を行う方

処理設計書とは

役割

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

いつ使うか

バックエンド実装時処理ロジックの確認
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

■ 基本情報

処理IDAPI-001
処理名ユーザー登録API
関連画面SCR-001(ユーザー登録画面)
作成日2024/01/15
更新日2024/02/20
バージョン1.2

■ 処理概要

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

■ API仕様

エンドポイントPOST /api/users
認証不要
コンテンツタイプapplication/json

■ 入力パラメータ

Noパラメータ名必須説明
1emailStringメールアドレス"user@example.com"
2passwordStringパスワード"Password123"
3nameString氏名"山田太郎"
4phoneString-電話番号"03-1234-5678"

【リクエストサンプル】

{
  "email": "user@example.com",
  "password": "Password123",
  "name": "山田太郎",
  "phone": "03-1234-5678"
}

■ 出力パラメータ

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

Noパラメータ名説明
1user_idInteger登録されたユーザーID
2emailStringメールアドレス
3nameString氏名
4created_atDateTime登録日時

【レスポンスサンプル】

{
  "user_id": 12345,
  "email": "user@example.com",
  "name": "山田太郎",
  "created_at": "2024-01-15T10:30:00+09:00"
}

■ 処理フロー

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]

処理フロー(ステップごと):

  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)
  6. レスポンス返却
    • 登録されたuser_idを含むJSONを返す

■ エラー処理

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

【エラーレスポンスサンプル】

{
  "error": {
    "code": "EMAIL_EXISTS",
    "message": "このメールアドレスは既に登録されています"
  }
}

■ 使用テーブル

【usersテーブル】

カラム名NULL説明
user_idINT×主キー(自動採番)
emailVARCHAR(256)×メールアドレス(ユニーク)
password_hashVARCHAR(256)×パスワード(ハッシュ済)
nameVARCHAR(100)×氏名
phoneVARCHAR(15)電話番号
created_atDATETIME×作成日時
updated_atDATETIME×更新日時

■ セキュリティ考慮事項

  • パスワードは平文で保存しない(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

関連ドキュメント