Essence of“Form Design Patterns”

アクセシビリティの祭典 2020

https://accessible-usable.net

土屋 一彦 (@caztcha)

ウェブサイトの設計や評価といった仕事をしつつ、「Accessible & Usable」(旧名称 : Website Usability Info) にて、ウェブをはじめとするデジタルコンテンツの、ユーザビリティ、アクセシビリティ、情報設計 (IA) に関する話題をマイペースに発信。
HCD-Net 認定 人間中心設計専門家。
ウェブアクセシビリティ基盤委員会 (WAIC) 翻訳ワーキンググループでも活動中。

Form Design Patterns— シンプルでインクルーシブなフォーム制作実践ガイド
ウェブにおいてフォームは、インタラクションの要である。
フォームがあることによって、ユーザーは能動的に自らの意思をシステムに伝えて、それに応じたフィードバックを得ることができるから。
本書は、お仕着せの「ベストプラクティス」集ではなく、フォームの利用シーンにおけるユーザー体験 (UX) までをも見据え、ユーザー調査を基にしたデザイン判断を行なうことを説いている。
そんな中でも、あらゆるフォームに共通して実践できることも多いので、そのエッセンスをご紹介します。

インクルーシブデザインの原則
https://inclusivedesignprinciples.org/ja/
日本語訳 : 植木 真、土屋 一彦

1. 同等の体験を提供する• 代替となるコンテンツ (代替テキスト、トランスクリプト、音声解説、手話など) の提供• ライブリージョンによる通知の提供
2. 状況を考慮する• 屋外でも視認可能な配色 (十分なコントラスト)• 外出中の動画キャプション
3. 一貫性を保つ• プラットフォームとの整合性• 一貫したエディトリアル
• 一貫したページの構造

4. 利用者に制御させる• 無限スクロールの代わりに「もっと見る」ボタン• アニメーション効果やパララックスの停止• 自由なズーム5. 選択肢を提供する• ジェスチャ or タップのみの操作• グラフ or データテーブル
6. コンテンツの優先順位を付ける• タスク / コンテンツ / エディトリアルの優先順位づけ• プログレッシブディスクロージャー (段階的な開示)
7. 価値を付加する• 位置情報やセンサーの活用• セカンドスクリーンや VUI デバイスの併用• パスワード表示オプション、パスワード以外での認証

インクルーシブなフォームの例“Form Design Patterns” のデモより

基本の「登録フォーム」
https://form-design-patterns-ja.herokuapp.com/
examples/registration-form「インクルーシブ」なポイントは？

基本の「登録フォーム」
https://form-design-patterns-ja.herokuapp.com/
examples/registration-form

ラベルは左上に配置。<label> 要素で入力欄と紐付ける。

•ラベルを、入力欄の上に、左寄せで配置する。

入力欄は、いかにも入力できそうな外観に。

•ラベルは、<label> 要素でマークアップし、入力欄と紐付ける。

<inputtype=“email”>•入力欄の <input> 要素には、適切な type 属性を設定する。
•入力欄は、いかにも入力できそうな外観にする (シグニファイア)•ヒントは常に見えるようにする。(「プレースホルダー」として提示しない。)•キーボード操作時、フォーカス位置を視認できるようにする。
•エラー表示。エラーのサマリーと、個別のエラーメッセージ。スクリーンリーダーでも伝わるように。

フォーカス位置を視認できるように。

ヒントは常に見えるように。

スクリーンリーダー (iOS Safari + VoiceOver)でのデモ•入力欄 (メールアドレス、パスワード) にフォーカスが当たると、ラベル (<label> 要素 / ヒントテキストを含む) が同時に読み上げられます。
•(何も入力されていない状態で) [登録する] ボタンを押すと、エラーが表示されます。エラーのサマリーに自動的にフォーカスがあたり、「問題があります」という見出しが読み上げられます。
•個別のエラーへのページ内リンクをタップすると、該当する入力欄がフォーカスされます。紐付いたラベル (<label> 要素 / 個別のエラーメッセージを含む) が同時に読み上げられます。

デモ動画 https://youtu.be/pu4JNOdMwfY

読み上げの字幕オートコンプリート
https://form-design-patterns-ja.herokuapp.com/
examples/autocomplete「インクルーシブ」なポイントは？

オートコンプリート

テキスト入力に応じて、選択肢が自動的に提示される。

https://form-design-patterns-ja.herokuapp.com/
examples/autocomplete•セレクトボックス (<select> 要素) を基に、テキストキーボード操作だけで、選択 / 入力が完結できる。

ボックス (<input type=“text”> ) と選択肢の箇条書き(<ul> / <li> 要素) を加えて UI を拡張。
✓プログレッシブエンハンスメントで、<select> 要
素は隠されているが、拡張された可視 UI での入力情報 (テキストボックスでの選択) が <select>の選択値となる仕組み。
•テキスト入力に応じて、選択肢がインタラクティブに提示される。
•キーボード操作だけで、選択 / 入力が完結できるようにする。
•リアルタイムな状況の変化 (この例では、選択肢の数)が、スクリーンリーダーでも伝わるようにする。

<div class=“visually-hidden” role=“status” aria-live=“polite”>{n個} の到着値候補</div>
選択肢の数の変化が音声でも読み上げられるよう、スクリーンリーダー向けのライブリージョンを設ける。

スクリーンリーダー (iOS Safari + VoiceOver)でのデモ•テキスト入力に応じて、提示される選択肢の数が変わると、そのたびに「●●の到着地候補」という情報が、音声で読み上げられます。
•絞り込まれた選択肢は、Tab キー (iPhone +VoiceOver の場合は右フリック操作) でフォーカスすることができます。

デモ動画 https://youtu.be/TqFY1Lvyuik

読み上げの字幕サイト内検索https://form-design-patterns-ja.herokuapp.com/examples/search-form「インクルーシブ」なポイントは？

サイト内検索https://form-design-patterns-ja.herokuapp.com/examples/search-form

検索機能の開閉状況の変化が、音声でも読み上げられるように、aria-expanded 属性を付ける。

•限られたヘッダーのスペースで、どう検索機能を提示するか？ (悩ましいですね) の一例。
•ラベル、入力欄、ボタンをわかりやすく。
•検索クエリのヒントも表示。
•PC でもスマホでも一貫性のある UI。
•虫眼鏡アイコンを押すと、検索機能が開閉する仕組み。リアルタイムな状況の変化 (この例
では、検索機能が「開いた」「折りたたまれた」) が、スクリーンリーダーでも伝わるようにする。
•検索機能が開いたら、フォーカスを自動的に、入力欄に移動させる。もちろんラベルも同時に読み上げられる。

自動的にフォーカス。

スクリーンリーダー (iOS Safari + VoiceOver)でのデモ•虫眼鏡アイコンにフォーカスが当たると、開閉状況が読み上げられます。「隠されました」•虫眼鏡アイコンを叩くと検索機能が開き、入力欄に自動的にフォーカスが当たります。ラベル (<label>
要素 / ヒントテキストを含む) が同時に読み上げられます。
•フォーカスを虫眼鏡アイコンに戻します。開閉状況が読み上げられます。「拡大」•虫眼鏡アイコンを叩くと検索機能が閉じ、再び開閉状況が読み上げられます。「隠されました」

デモ動画 https://youtu.be/̲UEX5nYdjVo

読み上げの字幕座席選択
https://form-design-patterns-ja.herokuapp.com/
examples/seat-chooser「インクルーシブ」なポイントは？

座席選択
https://form-design-patterns-ja.herokuapp.com/
examples/seat-chooser

チェックボックス状態 (フォーカス / 選択)の可視化はラベル部分に対して適用。

•個々の座席はチェックボックスになっている。
•チェックボックスのグループ全体を <ﬁeldset> で囲み、見出し「座席を選択」は <legend> 要素でマークアップ。
•座席番号 (1A, 1B, 1C, …) は <label> 要素でマークアップし、チェックボックスと紐付ける。
•チェックボックスの <label> をスタイリング。チェックボックス自体は隠し、状態 (フォーカス / 選択) の可視化はラベル部分に対して適用する形。
•<label> 要素の中に、座席番号に加えて、隠しテキス
トとして、「窓側」「通路側」の種別も記載。

<label> 要素の中に、隠しテキストとして、「窓側」「通路側」の種別も記載。

スクリーンリーダー (iOS Safari + VoiceOver)でのデモ•各座席 (実はチェックボックス) に順にフォーカスを当てると、座席名、窓側か通路側かの種別、チェックされているかどうか、が読み上げられます。
•フォーカスされた座席をダブルタップしてチェックを付けると、チェックマークが付いた旨、読み上げられます。

デモ動画 https://youtu.be/6sSq3eVXxaA

読み上げの字幕フィルター (ファセットナビゲーション)
https://form-design-patterns-ja.herokuapp.com/
examples/ﬁlter-form「インクルーシブ」なポイントは？

フィルター (ファセットナビゲーション)

キーボードだけで、一連のフィルターの操作が完結できる。

https://form-design-patterns-ja.herokuapp.com/
examples/ﬁlter-form•フィルターの選択 (チェックの付け外し) を変更するたびに、自動的に絞り込みが実行される。
•キーボードだけで、一連のフィルターの操作が完結できるようにする。
•フィルターの各カテゴリー (ここでは「色」「評価」の開閉状況の変化が、スクリーンリーダーでも伝わるようにする。)•リアルタイムな状況の変化 (この例では、絞り込み結果の「読み込み中」「読み込み完了」) が、スクリーンリーダーでも伝わるようにする。

状況の変化 (絞り込み結果の「読み込み中」「読み込み完了」が音声でも読み上げられるよう、スクリーンリーダー向けのライブリージョンを設ける。

カテゴリーの開閉状況の変化が、音声でも読み上げられるように、aria-expanded属性を付ける。

スクリーンリーダー (iOS Safari + VoiceOver)でのデモ•「絞り込み」ボタンを押して、フィルターを展開します。続いて、フィルターのカテゴリー「色」を展開します。展開前は「隠されました」、展開後は「拡大」と読み上げられます。
•フィルターの設定を変更する (ここでは「緑」を選択します) と、一瞬「読み込み中」と読み上げられ、最終的に「読み込み完了」と読み上げられます。

デモ動画 https://youtu.be/7c3KWgXsN9s

読み上げの字幕

ほかにもいろいろあります…

ぜひ、ご一読ください！

テクニックだけでなく「ユーザーを知る」ことも大事。
“Form Design Patterns” でも、ユーザー調査をもとにデザイン判断することを説いています。

障害当事者をテスターとした、ユーザビリティテスト• この機能、キーボード操作だとリーチできないのか…
• この入力要素、ラベルがスクリーンリーダーで読み上げられないから使えないじゃん…
• スクリーンリーダーだと (シリアルな情報取得なので) 記憶負荷が高すぎて伝わりにくそう…
• 拡大表示したら、何が起こっているのか、わけがわからない…
• このボタン、小さすぎて押すに押せないのか…
• 音が聴こえない状態だと、コンテンツのメッセージが伝わらないな…

ウェブサイトそれぞれ、ユーザー体験を阻む障壁が見つかるはず。

インクルーシブなペルソナ拡張
https://github.com/caztcha/Inclusive-Persona-Extension

contextsolution

視覚障害 (全盲)problem

ウェブ利用時の障壁

解決方法•

目が見えない。視覚的な情報が理解できない。

•

文字情報は画像ではなくテキストで作る。

•

スクリーンリーダーによる音声読み上げ (または点字出力) がないと利用でき•

画像やアイコンに対して、代替テキストを提供する。

ない。

•

映像コンテンツに対して、音声化可能な代替コンテンツ (テキストまたは音声解説)•

自由にポインティング (マウスでのクリックや指でのタップ) ができない。

を提供する。
•

ページの見出し構造やランドマークを適切にマークアップする。

•

キーボード操作だけで過不足なく利用できるようにする。

•

リンクやボタンのラベルを具体的に記述する。

•

フォームの入力要素にはラベル (label 要素) を付ける。

•

テーブル (表) はシンプルな構造にし、見出しセルを th 要素にする。

•

インタラクションに伴う状況の変化がスクリーンリーダーでも伝わるようにする(WAI-ARIA)。

•

勝手に音声を出さない (スクリーンリーダーの音声とぶつかるため)。

ペルソナと紐付けてチームみんなで一緒に考えよう！

動機や課題

動機や課題

動機や課題

達成したいこと (ゴール)

達成したいこと (ゴール)

達成したいこと (ゴール)ウェブサイトへの期待

ウェブサイトへの期待

ウェブサイトへの期待

前提条件前提条件

前提条件

こんなご時世だからこそ。

「ウィズコロナ」(さらには「アフターコロナ」) 時代になり、人や社会との関わりかたが大きく変わりゆく中、コミュニケーションにおけるデジタル情報のアクセシビリティはますます重要に。
受動的な情報消費だけでなく、能動的な情報利用にも、十分なアクセシビリティを。

ご清聴ありがとうございました。