UIXHERO

状態と例外を先に設計する (States & Edge Cases)

デザインは「うまくいったとき」だけ描かれている——ローディング中・エラー時・空状態・長すぎるテキスト。これらを後回しにすると、実装後に必ず壊れる。状態と例外を先に設計する原則。

2026年2月17日
更新: 2026年8月27日
9
by Dengen Yosho(DGYS)
状態と例外を先に設計する (States & Edge Cases)

Figmaのは美しい。データが完璧に揃い、テキストはちょうどいい長さで、エラーは一切起きない——しかし現実のUIは違います。APIが遅延してローディングが続く。ユーザーが初めてアクセスしてデータが空。入力が長すぎてレイアウトが崩れる。ネットワークが切れてエラーが発生する。

よくある失敗パターンは「ハッピーパス(正常系)だけを設計する」ことです。デザイナーが「うまくいったとき」のだけを描き、エンジニアが実装時に初めて「ローディング中はどうする?」「エラーが出たらどう表示する?」「データが0件のときは?」と気づく——この後付けの状態設計が、UIの品質を下げる最大の原因です。

状態と例外を後回しにすると、実装後に必ず壊れます。ローディングスピナーが消えないまま画面が止まる。エラーメッセージが「undefined」と表示される。空のリストが真っ白なままで何も案内がない——これらはすべて、設計段階で状態を定義していなかった結果です。

1. 原則の定義

状態と例外を先に設計する(States & Edge Cases)とは、UIの「正常系(ハッピーパス)」だけでなく、ローディング・エラー・空状態・境界値(文字数上限・0件・大量データ)などすべての状態を設計段階で定義し、どの状態でもUIが意味のある体験を提供できるよう設計する原則。

本質は「UIは状態機械である」ということです。すべてのUIコンポーネントは複数の状態を持ちます。ボタンには「通常・ホバー・押下・無効・ローディング」がある。リストには「ローディング中・データあり・空・エラー」がある。これらの状態をすべて定義することが、完成したUIの設計です。

2. いつ使うか(適用場面)

特に重要になるケース

  • 非同期データを扱うUI: APIからデータを取得するリスト・ダッシュボード・検索結果。ローディング・成功・エラー・空の4状態を必ず設計する。
  • フォーム・入力UI: バリデーション前・入力中・エラー・成功・送信中・送信完了の各状態を定義する。
  • ユーザー生成コンテンツ: 投稿が0件・1件・大量件数・テキストが極端に長い/短いケースを設計する。
  • 権限・認証が絡むUI: ログイン済み・未ログイン・権限なし・セッション切れの各状態を設計する。

トレードオフが起きる場面

  • 設計コストの増大: すべての状態を設計すると、モックアップの枚数が数倍になる。重要度の低いエッジケースは「テキスト仕様」で済ませ、主要な状態のみビジュアル設計する。
  • 過剰なエラーハンドリング: すべてのエラーに詳細なUIを用意すると、実装コストが膨らむ。エラーの重大度に応じて「フルページエラー」「インラインエラー」「トースト通知」を使い分ける。

3. なぜ重要か(設計判断の核)

UIは「うまくいったとき」だけ使われない。壊れたとき・空のとき・遅いとき——それらすべてが「体験」だ。

設計判断の基準

  • 「このUIコンポーネントは何種類の状態を持つか?」→ すべての状態をリストアップし、それぞれのUIを定義する。
  • 「データが0件のとき、このUIは何を表示するか?」→ 空状態のUIが未定義なら、設計が未完成。

優先順位の考え方

  • 1. エラー状態(最優先): ユーザーがタスクを完了できない状態。何が起きたか・どう回復するかを明示する。
  • 2. ローディング状態: データ取得中の待機状態。・スピナーで「処理中」を伝える。
  • 3. 空状態: データが0件の状態。「なぜ空か」「どうすれば追加できるか」を案内する。
  • 4. 境界値: 文字数上限・大量データ・特殊文字など、通常範囲外の入力への対応。

例外条件

  • 静的コンテンツ(マーケティングページ・など)は非同期データを持たないため、ローディング・エラー状態の設計は不要な場合がある。

4. 具体の設計ルール(チェックリスト)

最低ライン(Must - これ守らないと危険)

これがないと、実装後に必ずUIが壊れた状態で公開されます。

理想ライン(Better - できると強い/プロの品質)

「動く」を超えて「どの状態でも良い体験」の状態です。

5. UI例

同じ「タスクリスト」でも、状態設計の有無では大きく変わります。

改善プロセス

  1. 4状態をリストアップする: 非同期UIを設計するとき、最初に「ローディング・成功・エラー・空」の4状態をリストアップし、それぞれのUIを定義する。
  2. スケルトンスクリーンに変える: ローディング中のスピナーをスケルトンスクリーンに変えることで、コンテンツの形が見え、レイアウトシフトが減る。
  3. 空状態に次のアクションを追加する: 真っ白な空状態に「まだデータがありません」+「追加ボタン」を加えることで、ユーザーを次のアクションへ誘導できる。

6. 関連リンク

7. まとめ

今日から直せる一手 担当しているサービスの主要なリスト画面を確認してください。「データが0件のとき」何が表示されるか確認してください。真っ白な画面なら、今日中に「まだデータがありません」+次のアクションへの案内を追加してください。

チームに共有するなら一言 「デザインは『うまくいったとき』だけ描かない。ローディング・エラー・空状態——それらすべてが体験だ。」

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年8月27日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

意思決定の瞬間を設計する (Decision Moments)

ユーザーは「プランを選ぶ」「削除する」「購入する」——これらの意思決定の瞬間に最も迷い、最も離脱する。情報・比較・リスク提示を最適化し、ユーザーが後悔しない選択をできるよう設計する原則。

2026年2月17日
8

デザインと実装が壊れない設計 (Design & Implementation Durability)

Figmaでは美しいが、実装すると崩れる——デザインと実装の乖離は、コンポーネントの状態・余白の定義・フォントの扱いが「実装不可能な形」で設計されているときに起きる。壊れない設計の原則。

2026年2月17日
9

ルール化して再利用する (Design System Thinking)

同じボタンが画面ごとに微妙に違う色・サイズ・角丸——「なんとなく作った」UIは、スケールするにつれて一貫性が崩れる。コンポーネントとトークンでルール化し、再利用可能な設計資産を作る原則。

2026年2月17日
9

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る