スマホのアクセシビリティ

2013年度の卒論用に,スマホのアクセシビリティを卒論で扱う学生が知っておくべき事をまとめました.このサイト自体が,スマホで良く用いられるjQuery Mobileの枠組みで作成されていますので,PC,タブレット,スマホ(とスクリーンリーダの組み合わせ)など色々な環境で閲覧してみてください.また,jQuery Mobile(のアクセシビリティ)を調べる際の素材にしてください.

© Takayuki Watanabe (最終更新: 17/04/13 17:49 )

技術仕様

Home

HTML5, CSS3, JavaScript

モバイルサイトで使われている基本技術は,HTML5とCSS3にJavaScriptを組み合わせたものです.単なるサイトを越えたウェブアプリケーション(WebApp)も同じ技術で作られています.

HTML5とCSS3

略(書籍などで調べてください)

JavaScript

略(書籍などで調べてください)

JS Library: jQuery

略(書籍などで調べてください)

Ajax

略(書籍などで調べてください)

jQuery Mobile

詳細は別ページ「jQuery Mobile」参照

WAI-ARIA

ARIAはAccessible Rich Internet Applicationの略です.つまりRIAは,いわゆる動的なウェブのこと.それまでの静的なウェブ,つまり,リンクをクリックするかフォームを提出するかしなければページ遷移しないしページの一部の内容が変わることも(基本的に)ないウェブとは異なり,JavaScriptやAjaxなどの技術を使って,ページの一部だけが変更されたり,リンクやフォーム要素のクリック以外でもページを操作できたりするウェブを指しています.

W3C/WAI(Web Accessibility Initiative)で,いかにしてRIAのアクセシビリティを確保するかが検討されました.その成果がWAI-ARIAという技術仕様で,2011年1月にW3Cの勧告候補になりました(未だ勧告になっていないことに驚いた).W3CサイトのWAI-ARIA Overviewに豊富な情報があります(Technical Solutionsセクションは必読).

このセクションの最後に書いてあるWAI-ARIAがWeb制作者に提供する機能のまとめを引用します:

  • Roles to describe the type of widget presented, such as "menu," "treeitem," "slider," and "progressmeter"
    (メニューや木構造やスライダーや進捗バーなどのウィジェットの種類を示すrole)
  • Roles to describe the structure of the Web page, such as headings, regions, and tables (grids)
    (ヘッダーや領域やテーブル(グリッド)などのページの構造を示すrole)
  • Properties to describe the state widgets are in, such as "checked" for a check box, or "haspopup" for a menu.
    (チェックボックスがチェック済みやメニューがポップアップされているなどのウィジェットの今の状態を示すproperty)
  • Properties to define live regions of a page that are likely to get updates (such as stock quotes), as well as an interruption policy for those updates—for example, critical updates may be presented in an alert dialog box, and incidental updates occur within the page (刻々と変わる株価表示などのlive regionを定義するproperty.live regionが変化したときに重要度によってその変化を通知する方針.)
  • Properties for drag-and-drop that describe drag sources and drop targets
    (ドラッグ&ドロップに対応するためのドラッグ操作のソースとターゲットを示すproperty)
  • A way to provide keyboard navigation for the Web objects and events, such as those mentioned above
    (上記に述べたイベントやWebオブジェクトをキーボードでナビゲーションする方法)

tab index

WAI-ARIAそのものではありませんが,ナビゲーションを容易にする方法の一つがtab indexです.ウェブページでタブキーを押すと,リンク要素とフォーム要素を次々とたどっていくことができます.HTML5などでは,tabindex属性を用いることで,任意の要素をタブキーでナビゲーションできるようになります.また,その順番も指定できます.さらに,ツリー表示で子要素が閉じているときに+キーを押せば子要素(ツリー)が開いたり-キーを押すと閉じたりといった操作をできるように指定できます.WAI-ARIAでも,tabindexを用いて重要なコンテンツをナビゲーションできるようにすることを求めています.

role

上記の引用でも分るようにWAI-ARIAでは(そのコンテンツでのウィジェットの種類や役割や構造を示す)role属性と(コンテンツの性質や状態を示す)property属性及びstate属性を用いて,アクセシビリティ確保に必要な情報をUA(ブラウザやスクリーンリーダなど)に提供します.詳細はWAI-ARIA参照.

Live Region

Live regionを用いることでページの変化をUA(User Agent,つまりブラウザやスクリーンリーダなど)に通知し,その処理方法を決めることができます.Live Regionを使わない場合,株価が変わったりメニューが開いたりといったコンテンツ内の変化をスクリーンリーダが気づかないか或いは気づいてもページの最初からページ全体を読みあげるといったことになっていました.しかし制作者がLive Regionを用いていてスクリーンリーダがLive Regionに対応している場合,Live regionを付けた領域内の変化に対して,aria-live属性を指定して通知方法(off, polite, asssertive)を選ぶことができます.

参考:Jucy Studioの最近の記事:WAI-ARIA Live Regions Updated

Live regionの実装例

jQuery Mobile

Home

特徴

レスポンシブルWebデザイン(responsible web design):簡単に言えば,画面幅などユーザの利用環境に合わせてデザインを最適化すること.画面幅が広いPCブラウザ用,画面幅が狭いスマホ用と別々にサイトを制作するのではなく,画面幅が広いときでも狭いときでも見やすいように(CSSを用いて)一つのサイト(ページ)をデザインすること.jQuery Mobileもこの方針で作成されている.

プログレッシブ・エンハンスメント(peogressive enhancement):最新のHTML5やCSS3やJavaScript等をサポートしている高機能な環境ではリッチなインタラクションと見栄えの良い表示を提供すると同時に,そのような機能を持たない(古い)環境でもページのコンテンツや基本機能が問題なく提供されるデザイン方針.jQuery Mobileもこの方針で作成されている.

1個のhtmlファイル内の<div data-role="page">が1ページになる.同じhtmlファイル内に複数のページが置かれる.ページの概念が今までと違うことに注意.ページ間ナビゲーション用のメカニズムも持っている.タブ表示がサポートされなかったのもこれに関係あるのではないかと思う.

a要素も特殊な意味を持つので注意が必要.詳しくは下記「UI component」参照(注:アンカーが使えない.)

横幅が狭いスマホを考慮して,長い文字列を省略表示,navbarに6つ以上項目があると複数列で表示などの工夫がある.

縦スクロールを避けるためにdiv要素を折りたたみ・展開表示可能

タッチ操作に最適化されている.a要素を画面幅一杯のボタン風に表示してクリックできる領域を広げている.アイコンの大きさや(画面幅に応じて幅が変わる)ボタンの最小横幅,リンク領域の高さなどにもそれが表れている.

参考

デモ

本家のjQuery Mobileデモページ.jQuery Mobileがどういう物かよく分る.

UI component

jQuery MobileのUI要素を下記にまとめます.(要素毎にアクセシビリティを吟味すると良いと思う)

  • Toolbar components
  • header(ページ上部にある構成要素)
  • footer(ページ下部にある構成要素)
  • Formatting components
  • collapsible content(このサイトでもあちこちで使っています)
  • accordion(このページだけ他のページとは異なりaccrodion表示をしています)
  • Columns (layout grids)
  • Button components
  • 単なるa要素がクリックされやすくするためにボタン風に表示される.それ以外にもbutton要素,input要素,data-roleで指定した要素がボタンになる.
  • ボタンにアイコンを付けることができる.
  • List components
  • このサイトでもわかるようにリスト要素の表示も特殊.(olもデフォルトでは番号がつかない)
  • a要素を含むリストはこのように(右端にアイコン付加)表示される.これはキーボードナビゲーションも容易にしているはず.
  • ネストされたリストの例
    • ネストされたリストの親li要素を選択すると,何と子ul要素は別ページに表示される.
    • (jQuery Mobileがページ表示の履歴を管理しているので)ブラウザの元に戻る機能で元に戻ることができる.
  • split buttonを持つリスト(一行に2つの機能,action,を付与)
  • li要素の強調

    見出し要素をli要素の中に入れるとその要素は強調表示される
  • li要素の中にp要素を入れるとその要素は弱めて表示される

  • 単なるol要素には番号がつかないがinteractiveなol要素は番号付きで表示される
    1. a要素を持つinteractiveなリスト
    2. a要素を持つinteractiveなリスト
    3. a要素を持つinteractiveなリスト
  • li要素には2種類の画像を付与できる.iconとthumbnail(たとえばTwitterのロゴがあるインタラクティブなli要素をクリックするとTwitterのサイトにジャンプ).
  • これ以外にも aside contentとか,li内の見出し要素でタイトル表示をしてそれ以外の要素が説明になるとか,count bubble表示とか,...いろいろある.
  • このリストの先頭にあるように,リスト要素内の検索機能を簡単に付与できる.多数の子要素から目的のli要素をインタラクティブに簡単に探し出せる.すごい機能だ!
  • Form components
  • FormにAjaxが組み合わされる
  • 下記にformの例を示します.
  • 後日 例を作るべし:

    これ以外にも複数選択など多数の便利な機能が用意されている.

上記リストはjQuery Mobile特有のli要素の使い方も示しています.一行目のToolbar componentsは画面表示ではその下の2行の見出しに見えますが,マークアップでは下2行と同じレベルにあるli要素です.この行にはdata-role="list-divider"という属性が付与されているので,見かけ上見出しに見えているだけ.これはアクセシビリティ問題を起こしそうな気がします.

Form要素の例

スマホで表示すると,会社名は通常のテキスト入力IMEになるが,電子メールや電話番号や誕生日はそれぞれに適した入力メソッドが表示されるのが分る(HTML5の機能).

スライダーの例(アクセシビリティを確認したい)

フリップトグル スイッチの例(アクセシビリティを確認したい)

僕は未だに画面表示からこのトグルスイッチの状態(ONかOFFか)を読み取ることができない.

スマートフォン

Home

スマホの種類

  • ガラケー,フィチャーフォン
  • スマートフォン(定義が必要)
    • iPhone
    • Android
    • WindowsPhone
    • WebOS
    • Symbian
    • BlackBerry
    • etc
  • タブレット

スマホのガイドライン

日本語限定 UI、UXガイドラインとその他まとめ

特に大事:iOS ヒューマン インターフェイス ガイドライン(PDF)(英語版の方が版が新しい)

スマホのA11y機能

iOS:VoiceOver

iOS4以上はWAI-ARIA対応と称している

Android:Talkback

スマホ用ページをPCで表示して調査する方法

  • Chrome:各種プラットホームをChromeでシミュレート
  • iOS simulator:Mac版SafariでiOSをシミュレート
  • Opera Mobile emulator:各種プラットフォームをOpera Mobileでエミュレート?

アクセシビリティ

Home

Webアクセシビリティやその評価方法の基本は,『Webアクセシビリティ~ 標準準拠でアクセシブルなサイトを構築/管理するための考え方と実践~』の1章や「簡単ユニバーサル・ウェブ」のウェブのアクセシビリティ参照.下記にはキーワードだけ書いておきます.

WCAG 2.0 (JIS X 8341-3)

Webアクセシビリティ基盤委員会の資料など参照

A11y評価

ヒューリスティック

スクリーンリーダを用いて評価.視覚で取得できる全ての情報が音声でも表示されるか,画面を見ずに音声で聞いただけで理解・記憶できるか,キーボードやタッチ(ジェスチャ)だけで操作できるかをチェック.

チェックリスト

自動評価ツール

miChecker:JSが生成したHTMLではなくて元HTMLを評価することに注意.でもjQuery Mobileはプログレッシブエンハンスメントで作成されているので問題ないかも.或いは,JSやCSS3が使えるが故の問題が生じているかも.

WebAIM:使えるかも.要確認

ページのデバッグ

参考サイト

Firefox:開発ツール,Firebug

Chrome:開発ツール

IE:開発ツール

卒論テーマ

Home

スマホのアクセシビリティに関連した卒論では下記などが取り扱う題材になるのではないかと思います.

スマホ用の最新A11y機能まとめ

  • iPhoneのVoiceOver
  • AndroidのTalkBack(とFirefox)

全盲のスマホユーザへのインタビュー

  • タッチインタフェースの利点:画面の場所に直接アクセス
  • 画面サイズが小さくても関係ない,サイズが小さいので情報量が少なくわかりやすい
  • キーボードを使えない欠点,ジェスチャでの代替の可能性
  • 他に何があったっけ??

スマホサイトのヒューリスティックなA11y問題発見

4年生がVoiceOverやTalkBackなどを用いてスマホサイトのアクセシビリティ問題を発見.PCでチェックしたりソースを確認したりすることも含む.

jQuery Mobile UIのA11y問題発見

jQuery Mobileの仕様を眺めていて下記にA11y問題がある可能性があると思いました.(注:改良されているかもしれないので,最新版のjQuery Mobileで確認すべし)

  • altや実態文字がない画像
  • メニューの開閉など状態変化の通知
  • formのplaceholderを読むか,グレイアウトされたplaceholderとわかるか
  • 画面幅が短いときに省略表示される文字を全部音声表示するか
  • 区切りli要素をそれと分かるように読み上げるか
  • li要素内に見出し要素を入れると強調表示されるが,強調であるとかli要素内のタイトルであるとかわかるのか
  • li要素の使われ方は要注意かも
  • form要素も要チェック.複数選択などをチェックすべし.
  • そのほか,画面表示だと違いが分かるものが音声表示でも分かるか
  • キーボード操作できることが基本だったけど,スマホにはキーボードがない
  • HTML5の機能:スライダー,flip toggle switch, date入力など
  • Ajax関連でも何かあるかも
  • WAI-ARIA対応度:
    • Live Region
      • jQuery UI 1.9 Beta:
        Autocomplete accessibility updates: We’re now using a live-region to guide screenreader users when using autocomplete, making the widget a lot more accessible.
        と書かれている.
      • 本家のjQuery Mobileデモページで使用しているjQuery Mobile 1.2.1はjQuery 1.7.1がベース.
      • 2013年8月27日の最新版はjQuery Mobile 1.3.2でjQuery 1.9.1がベース.ということは,これを使えば良い? このサイトはこれを使用.
    • メニューの開閉はWAI-ARIAの他の仕様で指定できる.それを行っているか?
    • 上記以外でも,WAI-ARIAのどこに対応しているのか確認

ガイドラインやチェックツールの妥当性

今のスマホ全盛時代でも下記ガイドラインやチェックツールは妥当なのかを検討する.

  • MobileOK
  • WCAG 2.0 (JIS X 8341-3:2010)