本文へ移動

ホーム / デザイナー / 第2部 Web とアプリの実装の制約

第2部 Web とアプリの実装の制約・第4章

画面の状態をデザインする

★★☆ 重要8トピック・面接 4問

デザインで決めていない状態は、実装の都合で作られがちです。この章では、画面の状態の洗い出し方と、読み込み中・空・エラー・入力フォーム・オフラインの見せ方を押さえます。

4.1画面の状態の洗い出し

用語★★☆ 重要
ひとことで

読み込み中・空・エラー・オフライン・権限なしなど、画面には多くの状態がある。全部をデザインする。

1つの画面にも、データや通信の具合によってたくさんの状態があります。デザインで決めていない状態は、実装の都合で作られがちです。画面ごとに状態の一覧を作り、すべてデザインします。

画面を開く読み込み中データあり多い・一部だけも考える空(0件)理由ごとの文言+次の操作エラー原因と、やり直しのボタンオフライン見られるもの・回復の表示権限なし隠すか、理由を説明するか
1つの画面が取りうる状態。どれもデザインしておく
状態起きるときデザインで決めること
読み込み中データを取りに行っているスケルトンかスピナーか。すぐ終わるなら何も出さない(一瞬だけ出るとちらつく)
空初めて使う・検索結果が0件・全部消した理由ごとに文言を変える。次にできる操作を出す
一部だけ件数が少ない・画像だけ届いていない1件だけのときの見た目、画像がないときの代わり
多すぎる件数が数千件・文言がとても長いページ送りか、続きを読み込むか。省略のルール
エラー通信の失敗・サーバーの不具合・入力の誤り何が起きたか・どうすればよいか・やり直しのボタン
オフライン電波がない見られるもの・できない操作。回復したときの表示
権限なしログインしていない・閲覧の権限がない隠すか、見せて理由を説明するか

状態の一覧の作り方:画面に出るデータ(一覧・画像・ユーザー名など)を1つずつ挙げ、それぞれについて「まだ届いていない」「ない」「多い」「失敗した」を考えます。ボタンなどの操作にも「押せない」「処理中」「完了」「失敗」があります。表にして、デザイン済みかどうかの欄をつけておくと、エンジニアとの確認にそのまま使えます。

面接ではこう答える

1つの画面にも、読み込み中・空・一部だけ・多すぎる・エラー・オフライン・権限なしといった多くの状態があります。デザインで決めていない状態は、実装の都合で作られがちなので、画面に出るデータを1つずつ挙げて、まだ届いていない・ない・多い・失敗した、の4つを考えて一覧にします。ボタンなどの操作にも、押せない・処理中・完了・失敗があります。この一覧に「デザイン済みか」の欄をつけて、エンジニアとの確認にそのまま使っています。

ひとことで

待ち時間が短ければ何も出さず、数秒ならスケルトン(灰色の仮の枠)かスピナー、長ければ進み具合を出す。スケルトンは表示されたときのずれも減らす。

読み込み中の表示は、待ち時間の長さと何を待っているかで使い分けます。よく引用される目安に、0.1秒(すぐ反応したと感じる)・1秒(考えが途切れない)・10秒(注意が続く)の区切りがあります。

待ち時間の長さで、見せ方を変える(目安)0秒0.1秒1秒10秒すぐ何も出さないスケルトン・スピナー進み具合一瞬だけ表示が出るとちらつく。出すなら少し待ってから出し、出したら短く消さない
待ち時間と見せ方の目安(よく引用される 0.1秒・1秒・10秒の区切り)
見せ方向いているとき注意
何も出さないすぐ終わる(1秒程度まで)一瞬だけ出すとちらついて遅く感じる
スケルトン一覧・カードなど、表示する形が決まっている画面実際のレイアウトと同じ形にする。違うと表示時にずれる
スピナー保存・送信など、形のない処理画面全体を覆わず、押したボタンの中などに出す
進み具合(バー・段階)アップロード・書き出しなど長い処理進み具合が分からないなら、段階(「準備中」「送信中」)を見せる
先に分かる部分だけ出す一部のデータが先に届く届いた順に出し、場所を確保してずれを防ぐ

実装では「少し待ってから出す」「一度出したら短く消さない」といった調整ができます。秒数の目安をデザインの注釈に書いておくと、エンジニアと同じ前提で決められます。

面接ではこう答える

読み込み中の表示は、待ち時間の長さで使い分けます。1秒程度までなら何も出さないほうが、ちらつかずに速く感じられます。数秒かかる画面で、表示する内容の形が決まっているならスケルトンという灰色の仮の枠を出すと、どこに何が出るか先に分かり、表示されたときのずれも減ります。形のない処理の待ちにはスピナー、10秒を超えるような長い処理には進み具合や残りの見込みを出すようにしています。

4.3空の状態

用語★★☆ 重要
ひとことで

データが0件の状態。初めて使う・検索結果が0件・全部終わった、など理由ごとに文言と次の操作を変える。

「空」には理由がいくつかある。理由ごとに文言と次の操作を変える初めて使うまだ何もない何ができる場所かを説明最初の1件を作るボタン結果が0件検索・絞り込み条件を見直す案内条件を外すボタン全部終わった未読0・タスク完了終わったことを伝える次にできること
空の状態は理由ごとにデザインする

データが0件の空の状態は、デザインで忘れられやすい一方、新しいユーザーが最初に見る画面になりがちです。「データがありません」だけでは、ユーザーは次に何をすればよいか分かりません。

理由見分ける条件(実装)デザイン
初めて使うまだ1件も作っていない何ができる場所かの説明・最初の1件を作るボタン・例やテンプレート
検索・絞り込みで0件条件が付いていて結果が0件入れた条件を見せる・条件を外すボタン・つづりの候補
全部終わった未読やタスクが0件になった終わったことを前向きに伝える・次にできること
権限がなくて見えない見る権限がない権限がないことと、誰に頼めばよいか
読み込みに失敗したデータが取れなかった空ではなくエラーとして見せる(0件と区別する)

特に「読み込みに失敗した」を「0件」と同じ見た目にしないことが大事です。データがあるのに「ありません」と出ると、ユーザーは消えてしまったと誤解します。

面接ではこう答える

空の状態は、一覧などのデータが0件のときの画面です。同じ0件でも、初めて使って何もないのか、検索の条件で0件になったのか、タスクを全部終えたのかで、ユーザーに伝えることが違います。初めてなら何ができる場所かと最初の操作、検索なら条件の見直し、完了なら次にできることを出します。実装では理由を見分ける条件が必要なので、どの条件でどの表示かをエンジニアと確かめておきます。

4.4エラーの表示と文言

用語★★☆ 重要
ひとことで

エラーは、何が起きたか・どうすればよいか・やり直しの操作をセットで出す。種類(入力・通信・サーバー・権限)ごとに出す場所と文言を変える。

エラーの表示に入れるもの何が起きたか保存できませんでしたどうすればよいか通信を確かめて再試行次の操作「もう一度」ボタン入力した内容は消さない。エラーの番号や英語のメッセージをそのまま出さない
エラーは3つをセットで伝える

エラーの表示では、「エラーが発生しました」だけでは不十分です。ユーザーが次に何をすればよいかまで伝えます。

種類ユーザーが直せるか出す場所と文言の例
入力の誤り直せる該当の欄のそば。「メールアドレスの形が正しくありません(例:name@example.com)」
通信の失敗直せることが多い部品の中や画面の上部。「通信できませんでした。電波のよい場所でもう一度お試しください」+再試行
サーバーの不具合直せない「時間をおいてお試しください」。状況のお知らせへのリンク
権限・ログイン切れ操作で直せる「もう一度ログインしてください」。ログイン後に元の画面に戻す
他の人と同時に編集判断が要るどちらを残すかを選ばせる。勝手に上書きしない

落とし穴:エラーの文言をデザインで決めていないと、プログラムの中のメッセージ(英語やエラーの番号)がそのまま出ることがあります。どの種類のエラーがあり得るかをエンジニアに一覧にしてもらい、文言と出す場所を決めます。色だけでなくアイコンと文言で伝えるのも忘れずに(アクセシビリティ)。

面接ではこう答える

エラーの表示では、何が起きたか、ユーザーがどうすればよいか、やり直しの操作、の3つをセットで出すようにしています。エラーには、入力の誤り、通信の失敗、サーバーの不具合、権限の不足などの種類があり、ユーザーが直せるものかどうかで文言が変わります。入力の誤りなら該当の欄のそばに、通信の失敗なら画面の上部やその部品の中に出し、入力した内容は消さないようにします。エラーの種類と出す場所の対応をエンジニアと決めておくと、実装で英語のメッセージがそのまま出る事故を防げます。

ひとことで

入力の誤りを知らせるタイミング(入力中・欄を離れたとき・送信時)と、ラベル・必須の表示・誤りの文言をデザインで決める。

フォームは、ユーザーがいちばんつまずきやすい場所の1つです。見た目に加えて、いつ・どこに・何を知らせるかをデザインします。

検証のタイミング:早すぎても遅すぎても使いにくい入力中(1文字ごと)途中で「誤り」と出て邪魔になりやすい欄を離れたとき多くの欄で基本にしやすい送信したとき全部まとめて。最初の誤りの欄へ移動直している間誤りが直ったらすぐ消す
入力の検証のタイミング(よく使われる組み合わせ)
決めることよくある形
ラベル入力欄の外(上)に常に見せる。入力すると消える案内文(プレースホルダー)だけにしない
必須・任意必須の印か「任意」の表示のどちらかにそろえ、意味を説明する
入力の形の例「例:090-1234-5678」を先に見せる。ハイフンの有無はどちらでも受け付けるとよい
誤りの文言欄のそばに、直し方が分かる文で。色だけでなくアイコンも
送信ボタン押せない状態にして理由を隠すより、押したら誤りを示すほうが分かりやすいことが多い
入力した内容誤りや通信の失敗で消さない

検証の一部はブラウザやアプリの画面で先に行い、最終的な確認はサーバーで行います(画面の確認はすり抜けられるため)。「メールアドレスがすでに使われている」のようにサーバーに聞かないと分からない誤りもあるので、どれが送信後に分かるかをエンジニアと確かめます。

面接ではこう答える

フォームの検証は、いつ誤りを知らせるかが使いやすさを大きく左右します。1文字ごとに知らせると入力の途中で邪魔になるので、欄を離れたときに知らせ、送信時にはまとめて確かめて最初の誤りの欄へ移動する、という組み合わせがよく使われます。誤りを直している間は、直った時点ですぐ消します。ラベルは入力欄の外に常に見せ、必須かどうか、入力の形の例も先に示しておくと、そもそもの誤りが減ります。

ひとことで

入力欄に種類を指定すると、スマホで合ったキーボード(数字・メールなど)が出て、住所やワンタイムコードの自動入力も効く。

スマホでは、入力欄の種類によって出るキーボードが変わります。種類を正しく指定すると、入力が速くなり、誤りも減ります。デザインでは、各入力欄に何を入れる欄かを注釈で書いておきます。

入れるもの出るキーボード・効く機能実装の指定の例
メールアドレス@ のあるキーボードtype="email"・autocomplete="email"
電話番号電話番号のキーボードtype="tel"・autocomplete="tel"
数字だけ(暗証番号・郵便番号)数字のキーボードinputmode="numeric"
金額(小数あり)小数点のある数字のキーボードinputmode="decimal"
SMS で届く確認コード届いたコードを候補に出すautocomplete="one-time-code"
新しいパスワード強いパスワードの提案・保存autocomplete="new-password"
住所・名前保存した情報の自動入力autocomplete="postal-code" など

自動入力が効くようにするには、入力欄を細かく分けすぎない(郵便番号を3桁と4桁の2つの欄に分けない、など)ことも大事です。分けると自動入力やコピー&ペーストがうまく働かないことがあります。

面接ではこう答える

入力欄には、メールアドレス・電話番号・数字などの種類を指定でき、スマホではそれに合ったキーボードが出ます。さらに autocomplete という指定で、名前や住所、パスワード、SMS で届くワンタイムコードなどを OS やブラウザが自動で入れられるようになります。デザインの段階で各入力欄が何の情報かを注釈に書いておくと、エンジニアが正しい指定を選べ、入力の手間と誤りが大きく減ります。

ひとことで

サーバーの返事を待たずに、成功したものとして先に画面を変える作り方。失敗したら元に戻す表示が必要。

楽観的 UI(オプティミスティック UI)は、サーバーの返事を待たずに、成功したものとして先に画面を変える作り方です。「いいね」を押した瞬間にハートが赤くなるのが代表例で、操作がとても軽く感じられます。ただし失敗したときに元に戻す表示(ハートを戻して「保存できませんでした」と出す)を必ずデザインします。送金や購入のように、失敗すると困る・取り消せない操作には使わず、処理中であることをはっきり見せます。

ユーザーが待つ時間の違いふつう楽観的 UI押すサーバーの返事を待つ(スピナー)反映押すすぐ反映成功:そのまま失敗:元に戻して知らせる送金・購入など、失敗すると困る操作には使わず、処理中をはっきり見せる
楽観的 UI は先に反映し、失敗したら元に戻す
向いている操作向いていない操作
いいね・お気に入り・既読送金・購入・予約の確定
並べ替え・チェックを付ける削除(元に戻せないもの)
メッセージの送信(送信中の印つき)他の人と同時に編集するもの(ぶつかる可能性が高い)

メッセージの送信のように、先に表示しつつ「送信中」「失敗・再送」の小さな印を付ける中間の形もあります。どの操作を楽観的にするかは、失敗の起きやすさと、失敗したときの困り具合でエンジニアと決めます。

面接ではこう答える

楽観的 UI は、サーバーの返事を待たずに、成功したものとして先に画面を変える作り方です。「いいね」を押した瞬間にハートが赤くなるのが代表例で、操作がとても軽く感じられます。ただし通信に失敗することもあるので、元に戻して「保存できませんでした」と伝える表示を必ずデザインします。送金や購入のように、失敗すると困る、取り消せない操作には使わず、処理中であることをはっきり見せます。

ひとことで

電波がない・弱いときに、見られるもの・できる操作・回復したときの表示をデザインで決める。

電波がないときに「何ができるか」を決めるオンラインふつうに使える通信が切れるお知らせを出すオフライン保存済みを見られる回復ためた操作を送る回復したときに、他の端末での変更とぶつかったらどうするかも決めておく
オフラインの状態の移り変わり

通信が「ない」だけでなく、「とても遅い」「途中で切れる」も含めて考えます。どこまで対応するかで作りが大きく変わるので、最初にエンジニアと範囲を決めます。

対応の段階できることデザインで決めること
お知らせだけオフラインであることを伝えるお知らせの出し方・回復したときの表示
見るだけできる前に読み込んだ内容を見られるいつの内容かの表示・できない操作の見せ方
操作をためるオフラインでも操作を受け付け、回復後に送る送信待ちの印・失敗したときの再送・ぶつかったときの選択

通信が遅いときは、読み込みの表示が長く続きます。開発者ツールで回線を遅くして、デザインした読み込み中の表示やタイムアウトのエラーがどう見えるかを一度確かめておくと安心です。

アプリエンジニア向け:オフラインファーストと同期

面接ではこう答える

スマホは、地下や移動中に電波がなくなったり、とても遅くなったりします。オフラインのときに何が見られて、どの操作ができて、できない操作はどう伝えるかをデザインで決めておきます。アプリによっては、オフラインでも操作を受け付けてためておき、回復したら送る作り方もあり、その場合は送信待ちの印や、他の端末の変更とぶつかったときの扱いも必要です。どこまでオフラインに対応するかは工数が大きく変わるので、早めにエンジニアと決めます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • 1つの画面には、読み込み中・空・エラー・オフラインなど多くの状態がある。全部をデザインする
  • 待ち時間の長さで、何も出さない・スケルトン・進み具合の表示を使い分ける
  • エラーは「何が起きたか・どうすればよいか・やり直し」をセットで出す
  • 画面の状態の洗い出し:読み込み中・空・エラー・オフライン・権限なしなど、画面には多くの状態がある。全部をデザインする。
  • 読み込みの見せ方(スケルトン・スピナー・進み具合):待ち時間が短ければ何も出さず、数秒ならスケルトン(灰色の仮の枠)かスピナー、長ければ進み具合を出す。スケルトンは表示されたときのずれも減らす。
  • 空の状態:データが0件の状態。初めて使う・検索結果が0件・全部終わった、など理由ごとに文言と次の操作を変える。
  • エラーの表示と文言:エラーは、何が起きたか・どうすればよいか・やり直しの操作をセットで出す。種類(入力・通信・サーバー・権限)ごとに出す場所と文言を変える。
  • 入力フォームと検証のタイミング:入力の誤りを知らせるタイミング(入力中・欄を離れたとき・送信時)と、ラベル・必須の表示・誤りの文言をデザインで決める。
  • 入力欄の種類とキーボード(inputmode・autocomplete):入力欄に種類を指定すると、スマホで合ったキーボード(数字・メールなど)が出て、住所やワンタイムコードの自動入力も効く。
  • 楽観的 UI(先に画面を変える):サーバーの返事を待たずに、成功したものとして先に画面を変える作り方。失敗したら元に戻す表示が必要。
  • オフラインと通信の遅さ:電波がない・弱いときに、見られるもの・できる操作・回復したときの表示をデザインで決める。

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1読み込み中の表示に、スケルトンとスピナーのどちらを使いますか?

模範回答

表示する内容の形が決まっていて、少し時間がかかる画面にはスケルトン(灰色の仮の枠)を使うことが多いです。どこに何が出るかが先に分かり、表示されたときのずれも少なくなります。一方、ボタンを押した後の保存のように、形のない処理の待ちにはスピナーやボタンの中の「処理中」の表示を使います。

どちらの場合も、すぐ終わる処理では何も出さないほうがよいことがあります。一瞬だけ表示がちらつくと、かえって遅く感じるからです。何秒くらいから出すかはエンジニアと決め、とても長い処理は進み具合や「あとで通知します」を見せます。

深掘りされたら

  • 読み込みが失敗したときの表示は、どうデザインしますか?

見られているポイント状態ごとの使い分けとちらつきへの配慮

Q2エラーメッセージをデザインするとき、何に気をつけていますか?

模範回答

何が起きたか、どうすればよいか、やり直しの操作の3つをセットで出すようにしています。そのうえで、エラーの種類によって出す場所と文言を変えます。入力の誤りなら該当の欄のそばに直し方を、通信の失敗なら再試行のボタンを、サーバーの不具合のようにユーザーが直せないものは時間をおくよう案内します。

あわせて、入力した内容は消さないこと、色だけでなくアイコンと文言で伝えることも決めています。デザインで決めていないと、プログラムのメッセージがそのまま出ることがあるので、あり得るエラーの一覧をエンジニアにもらってから文言を作ります。

深掘りされたら

  • サーバーの不具合のとき、どこまで詳しく伝えますか?
  • エラーの番号を画面に出すべきですか?

見られているポイントユーザーが次の行動を取れるか、エラーの種類ごとに考えているか

Q3フォームの入力の誤りは、どのタイミングで知らせますか?

模範回答

基本は、欄を離れたときに知らせ、送信時にもまとめて確かめて最初の誤りの欄に移動する、という組み合わせにしています。1文字ごとに知らせると、入力の途中で「誤り」と出て邪魔になるからです。一方で、誤りを直している間は、直った時点ですぐに表示を消します。

そもそも誤りを減らす工夫もします。ラベルを常に見せる、入力の形の例を先に示す、ハイフンの有無などはどちらでも受け付けてもらう、入力欄の種類を指定して合ったキーボードを出す、といったことです。メールアドレスの重複のようにサーバーに聞かないと分からない誤りは、送信後の表示も決めておきます。

深掘りされたら

  • 送信ボタンを押せない状態にするのはどうですか?

見られているポイントタイミングの使い分けと、誤りを減らす工夫の両方

Q4楽観的 UI を使わないほうがよいのはどんなときですか?

模範回答

失敗すると困る操作や、取り消せない操作です。例えば送金・購入・予約の確定は、先に「完了」と見せてしまうと、失敗したときにユーザーが誤解したまま進んでしまいます。こうした操作は、処理中であることをはっきり見せ、結果が返ってから完了を伝えます。

逆に、いいねやお気に入りのように、失敗しても困り具合が小さく、元に戻しやすい操作には向いています。その場合も、失敗したら元に戻して「保存できませんでした」と伝える表示は必ずデザインします。

深掘りされたら

  • メッセージの送信はどちらに入りますか?

見られているポイント失敗の起きやすさと影響で判断できるか