状態と操作を分離する
保存操作に状態変更を混ぜず、状態は状態として独立させる。
「下書き保存」と「確定保存」のように、保存ボタンが複数あるなら、設計を見直すきっかけかもしれません。
ユーザーのゴール達成にどう寄与するか: 「内容を直したい」と「状態を進めたい」を別々に実行できる。「柔軟に作業を進めたい」というゴールに直結する。
なぜこの考え方か
Section titled “なぜこの考え方か”| 混在させる設計 | 分離する設計 |
|---|---|
| 下書き保存ボタン / 確定保存ボタン | 保存ボタン1つ + ステータス切替 |
| 保存時に状態が決まる | 状態はいつでも変更できる |
| 「状態を変えるために編集モードにする」 | 状態変更は参照モードでも可能 |
保存操作に状態変更を混ぜると、「状態を変えるためだけに編集モードにする」という不自然な操作が生じます。
避けたい構造
Section titled “避けたい構造”保存ボタンは1つ
Section titled “保存ボタンは1つ”- 保存ボタンを押したら、現在の状態のまま保存される
- 状態を変えたいなら、状態変更の操作を別途行う
状態変更は参照モードでも可能
Section titled “状態変更は参照モードでも可能”- ステータスバッジをクリックして状態を切り替える
- 編集モードに入らなくても状態変更できる
API設計の例
Section titled “API設計の例”PUT /items/:id → 内容を更新(状態は変えない)PATCH /items/:id/status → 状態のみ変更POST /items/:id/submit → 申請(状態遷移 + 副作用を伴う操作)PUTは内容の更新、PATCHは部分的な変更(状態のみ)、POSTは副作用を伴う操作(通知送信など)という使い分けが一般的です。
状態遷移の条件
Section titled “状態遷移の条件”状態を進めるには条件の満たされていることが必要です。
- 必須項目のチェック: 下書き → 申請中 には、必須項目がすべて入力されている必要がある
- バリデーション: 状態変更時に内容の妥当性を検証する
この場合でも、「保存」と「状態変更」は分けておくと、ユーザーは途中まで入力して保存し、後から続きを入力できます。
status が「分類」のとき
Section titled “status が「分類」のとき”状態の意味によっては、属性更新に含めても破綻しにくい場合があります。
- 分類・ラベル程度で、業務上の意味が薄い場合(例:色ラベル、タグ的な公開/非公開、個人メモの分類)は、
PUTやPATCHで内容と一緒に更新してもよいことがあります。ただし、UI の都合で「保存ボタンが複数」になっているなら、分離した方がよいです。 - ライフサイクルの段階で、条件・権限・副作用の絡む場合(申請→承認、締め処理など)は、上で述べた通り「内容」と「状態」を別操作にするほうが適切です。
判断の目安として、「状態を変えるために編集モードを開く必要があるか」を考えると分けやすいです。編集画面を開かずに状態だけ変えられれば、分離できていると言えます。
避けたいこと
Section titled “避けたいこと”- 「下書き保存」「確定保存」のように保存ボタンを複数用意する
- 保存操作に状態変更を暗黙的に含める
- 状態を変えるために編集モードを経由させる