コンテンツにスキップ

独立した状態を1軸に統合する

典型パターン:統合ステータス 別タブで開く ↗

典型のステータス遷移

受注ステータス(入金と出荷を1つに統合):
受付 → 入金待ち → 入金済 → 出荷準備 → 出荷済 → 完了
  • 実態と合わないステータスを選ばされる - 「入金済みだけど未出荷」「未入金だけど出荷済(先出し)」という状態を表現できない
  • 見たいデータにたどり着けない - 「未入金の受注だけ」「未出荷の受注だけ」をフィルタしにくい
  • 順序が固定されて柔軟に動けない - 入金より先に出荷したい場合でも、ステータス遷移が固定されている
  • 遷移ルールが複雑になる - 入金と出荷の順序が業務によって異なる場合、例外的な遷移を個別に実装することになる
  • マッピングロジックが必要になる - 2つの状態を1つに変換する処理が必要で、バグの温床になる
  • テストケースが増える - 本来独立している状態の組み合わせを1軸で表現するため、遷移パターンのテストが複雑化する
  • 状態追加時の影響が大きい - 新しい状態(例:部分入金)を追加すると、既存の遷移ルールすべてに影響する

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

再設計パターン:独立したステータス 別タブで開く ↗

再設計のステータス

入金ステータス: 未入金 / 入金済 / 返金済
出荷ステータス: 未出荷 / 出荷済 / 配達完了
  • 独立した軸: 入金と出荷は別々のステータスとして管理
  • 組み合わせ自由: 入金と出荷の順序に制約がない
  • 個別フィルタ: 「未入金」「未出荷」でそれぞれ絞り込める
  • 状態が明確: 現在の状況が一目で分かる

ステータスの比較

観点典型(統合)再設計(独立)
ステータス1つに統合(6状態)2軸で独立(各3状態)
表現できる状態6通り9通り(3×3)
フィルタ複数ステータスをOR条件軸ごとに指定
遷移の自由度順序固定独立して遷移
実装マッピングロジック必要シンプル
テストケース遷移パターンごとに検証が必要軸ごとに独立してテスト可能
起きやすい不具合状態不整合、想定外の遷移構造的に発生しにくい

再設計には2つの変更がある。一度にやる必要はない。

変更内容効果
1ステータスを分離する状態表現の自由度が上がる
2フィルタUIを軸ごとに分ける検索が直感的になる

変更1がメイン。変更2は変更1に伴って自然に実現できることが多い。

  • 統合ステータスカラムを廃止し、入金・出荷それぞれのカラムを追加する
  • 既存データを新しいカラムにマイグレーションする
  • 各ステータスの更新処理を独立させる
  • 状態の組み合わせを自由に表現できる
  • マッピングロジックが不要になる
  • 状態追加時の影響範囲が限定される
懸念対応
データ移行が不安既存データの統合ステータスから入金・出荷を推測してマイグレーションする
一覧のカラムが増える表示項目を選択可能にする、またはアイコンで省スペース化する
既存の帳票に影響帳票側で複合ステータスを表示するロジックを入れる(DBは分離)

変更2: フィルタUIを軸ごとに分ける

Section titled “変更2: フィルタUIを軸ごとに分ける”
  • 「ステータス」ドロップダウンを「入金状況」「出荷状況」に分割する
  • それぞれ独立してフィルタ条件を指定できるようにする
  • 「未入金の受注」「未出荷の受注」を簡単に抽出できる
  • 複合条件(未入金かつ未出荷)も直感的に指定できる
  1. データを先に分離する: まずDBスキーマを変更し、既存データをマイグレーションする
  2. 表示を変更する: 一覧・詳細画面に両方のステータスを表示する
  3. フィルタを追加する: 軸ごとのフィルタを追加する

スキーマ変更が先。UIは段階的に対応できる。

  1. 業務フローを確認する: 入金と出荷の順序に柔軟性が必要か確認する
  2. 現行データを分析する: 統合ステータスのどの値が入金済み/出荷済みに対応するか整理する
  3. 移行計画を提示する: データ移行とUI変更のスケジュールを分けて説明する

「ステータスを分けると集計が複雑になるのでは?」という懸念には、「軸ごとに集計できるので、むしろシンプルになります」と説明する。


統合ステータスを使いたくなる理由

  • 一覧のカラム数を減らしたい
  • 「全体の進捗」を1つで見せたい
  • 既存システムがそうなっている

独立ステータスにすべき判断基準

  • 2つの状態が「独立して変化する」なら分離する
  • 「Aが完了しないとBに進めない」なら統合でもよい
  • フィルタや集計で「軸ごとに見たい」なら分離する

よくある統合ステータスの例

  • 受注: 入金 × 出荷
  • 見積: 社内承認 × 顧客送付 × 受注可否
  • 申請: 申請 × 承認 × 実施
  • プロジェクト: 承認 × 進捗 × 請求