混乱を招くインターフェースを避けるためのドン・ノーマンのUX原則
ドン・ノーマンのUX原則は、ユーザーを迷わせるフローを見つけ、サポートコストを下げ、チャットで生成した画面をユーザーが詰まる前に検証するのに役立ちます。

わかりにくいインターフェースの隠れたコスト
わかりにくいインターフェースは単に気持ちの問題ではありません。測定できるコストを生みます:サインアップやチェックアウトで離脱が増え、返金やサポートへの問い合わせが発生し、明白であるべきことについて問い合わせが来ます。
多くの場合、問題はビジュアルデザインではなく「明瞭さ」です。ユーザーはシステムが何を求めているか、次に何が起きるか、先に進んでも安全かどうかがわかりません。
その混乱は予測可能ないくつかの方法で時間とお金に変わります。疑問が生じた瞬間に離脱が増えます。「Xはどこ?」や「なぜこれが起きた?」という問い合わせでサポートが溢れます。価格や確認、キャンセルの流れが不明瞭だと返金やチャージバックが増えます。社内では製品が自ら説明しないためにガイドや回避策を作る時間が発生します。
小さな摩擦が高コストになるのは、頻繁に繰り返されるからです。わかりにくいサインアップは一度ユーザーを失うかもしれませんが、わかりにくいチェックアウトは毎回損失になります。
単純なシナリオでどう起きるかを示します:誰かがアカウントを作り、通知頻度のような設定を変更します。トグルを見てタップしたが、変更を確認する表示が出ません。後でメールが届き続けます。サポートチケットが発生し、ユーザーは裏切られた気分になり信頼が下がります。UIは見た目はきれいでも、体験は不明瞭です。
スピードで作ると見落としやすくなります。特にチャットツールで画面やフローを素早く生成していると、作った人には理にかなって見えても初めてのユーザーには通じないステップが残りがちです。
対処はドン・ノーマンに関連づけられるいくつかの考え方から始まります:アクションを明確にする、ユーザーのメンタルモデルに合わせる、素早くフィードバックを出す、エラーを事前に防ぐ。以下は実務的な手法:少数の原則と、チャットで素早く作ったフローを本物のユーザーが迷う前に検証するための簡単な手順です。
ドン・ノーマンの基本をわかりやすく
人はインターフェースを読まない。推測する。
ユーザーはメンタルモデルを持っており、他のアプリや現実世界の物、習慣に基づいた「こう動くだろう」という物語を心に持っています。インターフェースがそのモデルに合っていれば人は素早く動けます。モデルと戦うと減速し、躊躇し、「間違い」を起こしますが、それは実際にはデザインの失敗です。
メンタルモデル:クリックする前にユーザーが期待すること
ユーザーが「保存」をクリックする時、作業が安全だと期待します。「削除」をクリックする時は警告や戻れる方法があると期待します。検索ボックスを見ればタイプしてEnterを押せると期待します。これらの期待はヘルプテキストの前に既に存在します。
良いUXは人を再教育しようとするのではなく、その期待に従います。
サイニファイア(示し)とアフォーダンス(可能性)
アフォーダンスは要素が何をできるか。サイニファイアはそれができることをどう示すかです。
テキストフィールドは入力を許容します(アフォーダンス)。サイニファイアは見える枠、カーソル、プレースホルダーテキストなどです。ボタンはクリック可能ですが、形、コントラスト、ラベルがクリックを示します。ボタンをプレーンテキストのように見せるとアフォーダンスは変わらなくてもサイニファイアが弱くなり見落とされます。
混乱の多くを説明する二つの「ギャップ」
実行のギャップは、ユーザーがやりたいこととUIが提供する操作の間の差です。配送先を変更したいのに「プロフィール編集」しか見えないと何をすればいいかわかりません。
評価のギャップは、システムが何をしたかとユーザーが画面から理解できることの差です。「支払う」をクリックして何も変わらない(あるいは小さなスピナーだけ)と、成功したのか失敗したのか処理中なのか判断できません。
フィードバック:何が起きたか、次に何が起きるかを示す
良いフィードバックは速く、明確で、具体的です。三つの質問に答えます:うまくいったか、何が変わったか、次に何をすべきか。
これはチャットベースのツールで速く作る場合に特に重要です。生成された画面でも初見ユーザーが迷わないように、明確なサイニファイアと明瞭なフィードバックが必要です。
人々を混乱させる実際のソフトウェア例
混乱するインターフェースはたいていコードが間違っているからではありません。画面が人々の次の行動を示していないから失敗します。
典型的な例は「Save vs Submit vs Publish」の混乱です。多くのツールで「Save」は下書きを保存する、「共有する」、「プロセスを完了する」など複数の意味を持ちます。作業を単に保存したいユーザーは躊躇したり、誤ってクリックして慌てます。「Save draft」や「Publish now」といったラベルは結果を説明するので不安を減らします。
設定画面も静かに大きな損害を与えることがあります。ON/OFFが不明瞭だったり逆になっているトグルはどこにでもあります:「Notifications」というラベルだけでONの意味がわからない。さらに悪いのは見た目はオンだが別の依存関係で実際はオフになっている場合です。人はそのページを信頼できなくなり推測し始めます。
フォームもよく問題を起こします。理由を説明せず失敗するサインアップフォームは「当たりを引くまで試せ」と言っているようなものです。パスワードルールをエラー後に初めて示す、必須項目が小さな赤い枠だけで示される、「Invalid input」のようなメッセージは余分な手間を強います。
空の状態(empty states)もユーザーを閉じ込めることがあります。「まだデータがありません」とだけ表示されたブランクなダッシュボードはユーザーを迷わせます。役立つ空の状態は「次に何をすべきか」を答えます。「最初のプロジェクトを作成する」+一文の説明があれば十分なことが多いです。
破壊的な操作は無害な言葉の後ろに隠れていることがあります。「Remove」が「リストから外す」を意味するのか「完全に削除する」のか。結果が取り返しがつかない場合、文言で明示する必要があります。
素早く作る時にまず見直すべき点:ボタンラベルは結果を説明するか、トグルはON/OFFの意味を示しているか、フォームエラーは具体的なフィールドとルールを指しているか、空の状態は次のステップを提示しているか、破壊的操作は明確に名付けられ必要なら確認を挟むべきかをチェックしてください。
フローをユーザーの目標に合わせる
多くの混乱は、スクリーンから作るのではなくユーザーの目標から作らないことに始まります。画面は見た目は完成していても、ユーザーがやろうとしていることを助けられないと失敗します。
一つの目標を選び、それを機能ではなくタスクとして書いてください:「請求書を作成して送る」「金曜のヘアカットを予約する」「ランディングページを公開する」。その目標がアンカーになり「完了」の定義が決まります。
次に旅程を最小の自然なステップに縮めます。混乱を減らす最速の方法の一つは、作り手だけが文脈を知っているために存在するステップを削ることです。作り手はセットアップ時に設定を前倒しにしがちですが、新しいユーザーはまずその行為を始めたいので、設定は後に回すべきです。
実用的なテストとして、各ステップに次の三つの質問を当てはめてください:
- これは何か(平易な言葉で)?
- ここで何ができるか(主なアクションは明白か)?
- それをすると何が起きるか(結果は予測可能か)?
どれかが満たされないとユーザーは遅くなります。ホバーしてスクロールしてランダムなメニューを開けたり、同僚に聞きに行ったりします。
予測できる停止点を探してください:違いが不明瞭な選択(「Workspace」と「Project」)、今持っていない情報を求めるフォーム、複数の主要ボタンがあるページ、途中で用語が変わるフロー(サインアップ、次に「provision」、次に「deploy」など)。
停止点を見つけたら次のアクションを目標に合わせます。ユーザーの言葉を使い、上級者向けの設定は後に回し、一つの明白な次のステップを作ります。フローはクイズではなく案内された道のように感じさせるべきです。
フィードバック:混乱を減らす最速の方法
ユーザーはシステムが何をしているか、行動の後に何が起きたかがわかればほとんどのインターフェースを扱えます。画面が無言でいると混乱が始まります:保存の表示がない、処理中のヒントがない、ボタンが何かした証拠がない。
速いフィードバックは装飾ではありません。「聞きました」とインターフェースが言うことです。これが二重クリックやリロード、放棄されたフォームを防ぎます。
システム状態を早く、頻繁に示す
瞬きより長くかかる操作は可視のステータスが必要です。ページの読み込み、支払い処理、ファイルアップロード、レポート生成、メッセージ送信などが含まれます。
単純なルール:ユーザーが「うまくいった?」と聞けるなら、UIは既に答えるべきです。
具体的に:
- 「Saving...」をすぐに表示し、その後「Saved」とタイムスタンプを表示する。
- マルチステップでは進捗(ステップ2/4)を見せ続ける。
- 長時間かかるタスクにはプログレスバーか明確な時間見積もりを示す。
- 処理中はボタンを無効化するが理由を説明する(「Sending...」)ので壊れているように見えない。
確認とエラーは物語を伝えるべき
確認は何が変わったか、どこで見つかるかを伝える時に役立ちます。「Success」だけでは曖昧です。「請求書を [email protected] に送信しました。送信済み請求書で確認できます」のように具体的に示すと落ち着きます。
エラーは罰ではなく案内であるべきです。良いエラーフィードバックは三つを含みます:何が間違っているか、どう直すか、作業が失われていないことの保証。入力した内容は保持してください。一つのフィールドが間違っているからといってフォーム全体をリセットしてはいけません。
サイレントな失敗が最悪です。失敗したら明確に伝え、次のアクション(再試行、編集、サポートに連絡)を提示してください。自動保存しているならそれを示し、保存できないなら理由を伝えてください。
制約とエラー予防(ユーザーを苛立たせない方法)
人は不注意でエラーを起こすのではなく、インターフェースが間違った操作を許してしまうか、次に何が起きるかを見せないためにエラーを起こします。
ノーマンの制約の考え方は簡単です:安全な操作を最も簡単にする設計をすること。
良い制約は行き止まりではありません。何かが無効化されているならユーザーは理由と修正方法がわかるべきです。「Save」がグレーで何も説明がないと壊れているように見えますが、「Save(続行するにはタイトルを追加)」とあれば助けになります。
ミスを防ぐパターン
いくつかのパターンで混乱を減らせます。自由入力でタイプミスが発生しやすいところはピッカーやプリセットを使う(日時、国、役割)。最も一般的なケースのための妥当なデフォルトを提供し、上級者が変更できるようにする。入力中にバリデーションし具体的なメッセージを出す。アクションを無効化するなら理由をその隣に置く。
具体例:素早く作られた「ワークスペース作成」フローでデータベースのリージョンが必須なら、ユーザーに入力させるのではなく推奨デフォルト付きのピッカーを提供し、なぜ重要かの短い説明を付ける。名前が必須なら最初にルール(「3〜30文字」)を表示しておき、最終ステップまで待たない。
破壊的な操作は明確に確認する
確認ダイアログは恐怖を与えるべきではありません。具体的であるべきです。「本当にいいですか?」の代わりに、何が削除されるか、何が失われるか、元に戻せるかを示してください。
安全な抜け道(safe exit)もエラー予防の一部です。「Cancel」や「Back」で進行中の作業が黙って失われるべきではありません。可能なら削除やドラフトの削除のような操作にはUndoを提供してください。
ミスのコストが大きい場合(支払い、プランのアップグレード、データやアカウントの削除、権限付与、実際の顧客への招待、不可逆なエクスポートやリセット)は追加の摩擦を入れる価値があります。目的は遅らせることではなく、クリック前に結果を見えるようにすることです。
ステップバイステップ:チャットで素早く作ったフローを検証する
チャットベースのビルダーで機能を速く作るとき、リスクはコード不良ではなく作り手には意味が通じるが初見のユーザーには通じないフローです。誰も混乱の代償を払う前にこの短い検証ループを使ってください。
-
1文のユーザーストーリーを書く。 人物、目標、「完了」の定義を入れる。例:「初めての顧客がパスワードをリセットして再ログインする」。1文で言えないならそのフローはおそらく大きすぎます。
-
ステップを並べて、削る。 画面やアクションを順にスケッチする。目標に近づかないステップは削るか後に回す。
-
ストーリーに対してラベルを確認する。 各画面で主要ボタンが目標に合っているか確かめる。「Continue」ではなく「Send reset link」や「Save address」に置き換える。ページタイトルが実際の動作と一致しているかを確認する。
-
5分の廊下テストを実施する。 作った人以外にフローを渡し、ユーザーストーリーだけを伝え、ヒントは与えない。
-
意見ではなく摩擦を記録する。 停滞、戻る動作、誤クリック、「今どこ?」の瞬間を全て書き留める。それぞれが具体的な編集指示になる:文言を変える、項目を移動する、フィードバックを追加する、選択肢を削る。
-
明白になるまで再テストする。 上位2〜3件の問題を直してから新しい人で再テストする。人がタスクをスムーズに完了し、何が起きたかを簡単に説明できるようになったら止める。
短いループを繰り返す方が、一度きりの長いレビューより効果的です。
速く作るときのよくある落とし穴
スピードは素晴らしいですが、注意を払うべきポイントを変えます。チャットツールはもっともらしい詳細を埋めてしまいます。ユーザーはそうしません。彼らは自分の言葉、目標、忍耐を持ってきます。
よくある失敗の一つは語彙のずれです。作り手やチャットプロンプトが内部用語に寄ってしまいがちです("workspace"、"entity"、"billing profile"、"sync"など)。新しいユーザーは単に「チームを追加したい」「請求書を送信したい」と考えます。ラベルがユーザーのメンタルモデルと合っていないと離脱が増えます。
またインターフェースをデータベースに合わせてそのまま鏡写しにするのも危険です。生成が簡単だからと first_name、status_id、plan_tier のようなフィールド名をそのまま表示するのは避けてください。人はテーブル列では考えず、「これは誰のため?」「次に何が起きる?」「取り消せる?」のように考えます。
速く作ると機能を積み重ねがちです。一つのステップが awkward(ぎこちない)に感じると、オプションやタブ、詳細設定を追加してしまう本能がありますが、多くの場合本当の問題は最初の混乱した瞬間が残っていることです。
ヘルパーテキストを万能薬にしないでください。プレースホルダや小さなヒントは自己説明していないレイアウトを救えません。画面に段落が必要なら、その設計はユーザーに「読む」ことを強いており、行動を促していません。
「きれい」はコストになることがあります。主要なアクションをメニューの中に隠すと見た目は整いますがユーザーが探す羽目になります。画面に一つの主要アクションがあるなら、それが主要アクションに見えるようにしてください。
最後に、スピードはエッジケースを隠します。完璧なデータで動くフローは実際の使用では簡単に失敗します:空の状態、遅いネットワーク、誤入力、ユーザーが途中で戻るなどです。
出荷前のクイックチェックリスト
わかりにくいフローはサポートチケット、返金、放棄されたサインアップを静かに増やします。素早く作った画面やフローを出荷する前に、同じ三つの観点:明確なサイニファイア、即時のフィードバック、穏やかな制約で10分チェックをしてください。
まずメインパス(ユーザーが来た主要な行為)から始め、次を確認します:
- 瞬時の明確さ: 最初の5秒で初見のユーザーがこの画面が何のためで、最初に何をすべきか言えるか?
- 明白な主要アクション: 目立つ主要ボタンが一つあり、それが平易な動詞(Pay, Save, Send, Book)で名付けられているか?(OK, Continue, Submit など曖昧なラベルは避ける)
- 毎回のフィードバック: クリック後に何か可視の変化がすぐにあるか(読み込み状態、成功メッセージ、インラインエラー)
- 簡単な復旧: キャンセル、戻る、編集、Undo が可能で進行中の作業が失われないか? 操作が危険なら明確な確認と安全な抜け道を追加する。
- 失敗前にルールを表示: 必須項目、フォーマット、制限はエラー後ではなく事前に見えるようにする。
人が見落としがちなチェック:成功時と失敗時の次のステップが明白か。成功状態は次に有用なアクションを示すべきです(領収書を見る、注文を追跡する、チームを招待する)。失敗状態はユーザーがコントロールを保てるようにする(この項目を直す、再試行、サポートに連絡)そして入力を消さない。
Koder.aiで構築しているなら、このチェックリストをUI文言と状態の最終確認として扱ってください。Planning Modeは最初に一文のゴールと期待されるステップを書かせ、生成されたUIが迷路のように振る舞わないようにするのに役立ちます。
次の一手:速く作りつつ混乱を出荷しない
速さが目的ではなく明確さが目的です。最速で作ること自体が、ユーザーがやりたかった一つのことを完了できなければ失敗です。
正直でいられるシンプルな習慣:毎リリースでコアフローを一つ見直す。請求や信頼を生むフロー(サインアップ、作成、支払い、招待)を選んでください。そのフローが明確なら他の部分も楽になります。
変更は小さく可視化して行ってください。ボタンラベル、エラーメッセージ、ページレイアウトを同時に変えると何が効果を生んだかがわかりません。
本当のユーザーテストはラボは不要です。誰かに簡単なタスクを与えて黙って見てください。ためらいがあればそれがバグレポートです。
素早く反復するチームには Koder.ai のようなツールがプロトタイプとデプロイを助けますが、UXの基本がユーザーが仕事を終えられるかを決めます。明確化作業をビルドの一部として扱い、後始末に回さないでください。
よくある質問
What’s the real business cost of a confusing interface?
混乱するUIは繰り返し発生するコストを生みます:
- 離脱: 次に何が起きるかわからないとユーザーはやめてしまいます。
- サポート負荷: 「Xはどこ?」という問い合わせが自己解決を置き換えます。
- 返金/チャージバック: 価格や確認、キャンセルの流れが不明瞭だと不信を招きます。
- チームの時間: 製品が説明すべきことを補うためにガイドや回避策を書かなければならなくなります。
How do I tell if the problem is “visual design” or “clarity”?
各ステップで初めてのユーザーが次の三つの質問に答えられるかを確かめてください:
- これは何か?(今どこにいる?)
- ここで何ができる?(主なアクションは?)
- それをすると何が起きる?(何が変わる?)
見た目が“きれい”でも、結果が予測できなければそれは「明瞭さ」の欠如です。
What is a “mental model,” and how does it affect UX?
メンタルモデルとは、ユーザーが他のアプリや日常の習慣から持っている「こうあるはずだ」という期待です。
基本方針:一般的な期待に合わせる(例:「Save」で作業が保存される、「Delete」は警告や復元可能である)。期待を破るなら、明確なラベルとフィードバックでユーザーに推測させないこと。
What’s the difference between signifiers and affordances in simple terms?
アフォーダンスはその要素ができること。サイニファイアはそれができることを示すもの。
例:ボタンはクリックできる(アフォーダンス)。見かけやコントラスト、ラベルがクリックできることを示す(サイニファイア)。見た目をテキストのようにするとサイニファイアが弱くなり気づかれにくくなります。改善策は明確なラベル、コントラスト、配置、状態変化(押下中/読み込み中/無効)です。
What are the “gulfs of execution and evaluation,” and why do they matter?
簡単な診断として使ってください:
- 実行のギャップ(gulf of execution): ユーザーの目的に合う操作が見つからない(メニュー名が違う、コントロールが隠れている)。
- 評価のギャップ(gulf of evaluation): ユーザーが操作した後、画面から何が起きたかがわからない(保存が無音、微小なスピナーだけ)。
両方を埋めるには:次のアクションを見つけやすくし、結果が明白になるようにします。
How do I fix “Save vs Submit vs Publish” confusion?
結果に基づいたラベルを使ってください。
- 違いが重要なら “Save draft” のようにする。単に “Save” は曖昧。
- 公開するなら “Publish now” を使い、“Submit” より結果が伝わるようにする。
- 状態が複数ある場合は「誰に見えるか」などの短い説明を付ける。
目標は:クリックする前に結果が分かるようにすることです。
What’s the best way to design settings toggles so users trust them?
ON/OFF の意味を明確にして、システムの状態と一致させてください:
- 効果をラベル化する:例「メール通知: On / Off」や「メールを受け取る」。
- 即時フィードバックを示す:「保存しました」や「更新しました」。
- 別の依存関係で無効になるならその理由を示す(例:「Workspaceポリシーにより無効」)と対処方法を提示する。
外見上オンに見えて実際はオフ、というトグルは避けてください。
What feedback should my UI show after clicks, saves, and long actions?
ルール:ユーザーが「うまくいった?」と聞けるなら、UIはすでに答えているべき。
実用パターン:
- Saving… → Saved をすぐに表示(重要ならタイムスタンプ付き)。
- 処理中はボタンを無効化するがラベルで理由を示す:「Sending…」
- 複数ステップでは進捗を表示(例:「ステップ2/4」)。
- 「Success」だけでなく何が変わったか具体的に示す。
How do I prevent errors without annoying users?
安全な経路を最も簡単にすることでエラーを防ぎます:
- 日付や国、役割などはピッカーやプリセットを使う。
- 入力中に検証して具体的なメッセージを出す。
- エラーで入力を消さない。
- 操作が無効ならその理由と修正方法をそばに示す。
破壊的操作は詳細な確認を:何が削除されるのか、何が失われるのか、取り消せるかどうかを明示してください。
What’s a simple checklist to validate a flow built quickly by chat tools?
出荷前に短い検証ループを行ってください:
- 1文のユーザーストーリーを書く(人 + 目標 + 「完了」の定義)。
- 手順を書き出し、目標に近づかないものは削る。
- 「Continue」などの曖昧なボタンを「Send reset link」など結果を示すラベルに置き換える。
- 作った人以外に5分のテストをしてもらう(ヒント禁止)。
- 停滞、間違ったクリック、「今どこ?」といった摩擦を記録し、上位2〜3件を直す。
Koder.aiで作っているなら、Planning Modeで事前に意図を決めてからこの検証を行うと効果的です。