コンテンツにスキップ

下書き保存パターン

例:承認ワークフローシステム

申請を作成し、複数の承認者が順に確認・承認する。

適用する原則: 状態と操作を分離する

  • 作成途中で中断・再開したい
  • 下書き状態では申請に進めない
  • 承認は複数段階
  • 監査・説明責任が強い

典型パターン:下書き保存と保存が分離 別タブで開く ↗

典型の画面遷移

GET /petitions 稟議一覧
GET /petitions/:id 稟議詳細(編集モード含む)
PUT /petitions/:id/draft 下書き保存(status = 下書き)
PUT /petitions/:id/confirm 確定保存(status = 確定)
POST /petitions/:id/submit 申請

典型のテーブル構造

稟議詳細の編集モードに2つのボタンがある:

  • 下書き保存 → DB保存 + status = 下書き
  • 確定保存 → DB保存 + status = 確定

「状態を変えるためだけに編集モードにする」 という不自然な操作が発生する。

「下書きかどうか」は状態であり、保存操作とは独立しているべき。


再設計パターン:保存と状態変更を分離 別タブで開く ↗

再設計の画面遷移

GET /petitions 稟議一覧
GET /petitions/:id 稟議詳細(編集モード含む)
PUT /petitions/:id 更新(状態は変えない)
PATCH /petitions/:id/status 状態変更(下書き ↔ 確定)
POST /petitions/:id/submit 申請

再設計のテーブル構造

  • 保存ボタンは1つだけ
  • 「下書き/確定」は状態として稟議詳細で切り替え可能(ステータスバッジをクリック)
  • 保存と状態変更を分離する

画面遷移の比較

観点典型再設計
保存ボタン2つ(下書き保存/確定保存)1つ(保存)
状態切替編集モードで保存が必要ステータスバッジから直接
PUT2つ(/draft, /confirm)1つ
status保存操作に依存状態として独立