• Like
Web Componentsのアクセシビリティ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Published

2015年1月25日に開催された「HTML5 Conference」での講演「Web Componentsのアクセシビリティ」で使用した資料です。

2015年1月25日に開催された「HTML5 Conference」での講演「Web Componentsのアクセシビリティ」で使用した資料です。

Published in Internet
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
579
On SlideShare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
2
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Web Componentsでは、1度書いたコンポーネントが再利用されます。なので、コンポーネントのアクセシビリティが、そのアプリなりサイトなりのアクセシビリティに大きく影響してきます。そう、コンポーネントのアクセシビリティが重要です。この時重要になるのは、アクセシビリティが高い、良いコンポーネントを選ぶこと、もしくは、良いコンポーネントを作ることです。
  • Web Componentsでは、1度書いたコンポーネントが再利用されます。なので、コンポーネントのアクセシビリティが、そのアプリなりサイトなりのアクセシビリティに大きく影響してきます。そう、コンポーネントのアクセシビリティが重要です。この時重要になるのは、アクセシビリティが高い、良いコンポーネントを選ぶこと、もしくは、良いコンポーネントを作ることです。
  • もう少し噛み砕いてしゃべると

    もしコンポーネントのアクセシビリティが高ければ

    コンポーネントを使うだけで一定のアクセシビリティを確保します
    一度良いものを作ってしまえば、コンポーネント利用時に頑張る必要がありません。
  • ですが、コンポーネントのアクセシビリティが低ければ、使うだけで全体の質が低下します。既にコンポーネントとして出来上がっているので、コンポーネント利用時になんとかしかアクセシビリティを高める、ことも難しいでしょう。
  • Web Componentsのアクセシビリティと言っていますが、基本的なアクセシビリティの考え方は変わりません。
  • 例えば、GoogleのOsmaniiさんとBoxHallさんが書いているアクセシブルなWeb Componentsという記事を見てみましょう。
  • この内容を見ると、キーボードだけでも使えるか、画像などに代替コンテンツが設定されているか、要素のセマンティクスは大丈夫か、であったり、色だけに依存していないか、動いたり点滅したりするものは、止められるか、といった内容が書かれています。
    これはWeb Componentsに特化した内容というよりは、一般的なアクセシビリティの内容です。
  • このようにアクセシビリティに関して取り組むべき内容がWeb Componentsになったからといって変わるわけではありませんが、取り組む方法、どういう技術をつかってどう実装するか、という点には、Web Componentsなりの特徴がでてきます。
    Web Componentsで特に重要なのは、セマンティクスの指定方法です。Web Componentsを使う場合には、自分で作ったコンポーネントのセマンティクス、意味をユーザーにどうやって届ける方法を押さえておく必要があります。
  • ここで実際の例を見てみましょう。

    これから3つプログレスバーを見ていきます。1つはHTML5のprogress要素をそのまま使った場合、2つ目はPolymerのpaper-progressというコンポーネントを使った場合、3つ目はGaia Componentsのgaia-progressというコンポーネントを使った場合です。
  • このように視覚的には、同じ情報を伝えていても、セマンティクス、意味が伝わっているものと伝わっていないものが存在します。
    この違いは、どこにあるのでしょう?
    そして、どうすれば、良い例のように、Webb Componentsでもセマンティクスを伝えることができるでしょうか。
  • Web Componentsでセマンティクスを指定する場合には、次の2つの技術が鍵になります。
    Custom ElementsとShadow DOMです
  • Custom Elements、これですね。W3Cで標準化が進んでおり、Editor’s DraftはGitHubで公開されています。
  • このCustom Elementsでは、既存要素を拡張したり、独自要素を定義したりすることができます。どちらもregisterElementを使って、カスタムな要素を登録すると、その登録した要素がHTMLやDOMで使えます。拡張した名前、スライドではxxx-yyyになっていますが、-を1回以上含む必要があります(今のところ)。
  • そして、この新しく作ったカスタムな要素にセマンティクスをどのように与えるか、ということですが、これは既存要素を拡張した場合いと、自分で新しく要素を定義し場合で異なります。

    既存要素を拡張した場合には、拡張した要素は、拡張元である既存の要素からセマンティクスを継承します。
    要素を自分で独自に定義する場合には、基本的にはShadow DOMを使うことになるでしょう。

    ではそれぞれを見ていきましょう。

    メモ:Custom Elementsの仕様にはCustom Elementsに直接WAI-ARIAを指定する方法が載っている
  • 既存要素を拡張する場合は、拡張前の要素からセマンティクスが継承されるため、基本的に開発者が何か特別なことを行う必要はありません。
    基本的に、と言っているのは、自分で拡張した要素のセマンティクスが拡張元のセマンティクスからかけ離れている場合には、セマンティクスを変更する必要があると思いますが、そういう場合は、ふつう拡張という方法をとらないでしょう。
    ともあれ、button要素を拡張すると、button要素のセマンティクスが引き継がれます。なので、ボタンとして使っていれば、セマンティクスの問題は起きません。
  • この拡張が使われている例には、Google ChromeのDeveloper Toolsがあります。
    Developer Toolsのフロントエンド部分はHTMLとCSSとJavaScriptで書かれていますが、ここでは既存の要素を拡張したコンポーネントも使われています。
    たとえば、テキストを含むボタンは<button is=“text-button”>、とbutton要素を拡張したものが使われています。

    この要素のボタンとしてのセマンティクスは、支援技術に伝わっています。
  • このように要素を拡張する場合は比較的簡単でしたが、自分で要素を定義する場合は、もう少し複雑です。
    独自要素を定義する場合、ほとんどの場合はShadow DOMを使うと思います。
  • Shadow DOMもW3Cによって標準化が進んでいますね。スライドにはWorking Draftのスクリーンショットを出していますが、こちらもGitHubでEditor’s Draftがでています。
  • Shadow DOMとは、ページのDOMツリーから切り離された、要素独自のDOMツリーを定義するための技術です。
  • このShadow DOMはブラウザーの中でも使われています。例えばGoogle ChromeやSafariのvideo要素のコントロールがShadow DOMを使って実装されているのは、良くしられています。
    HTMLにはvideo要素しか記述されていなくても、ブラウザーは再生ボタンや時間のスライダーなどのUI部品や、キャプションを表示するための領域などを用意しなくてはなりません。ChromeやSafariではこれらはShadow DOMとして実装されています。
  • Shadow DOMは
  • このShadow DOMはブラウザーの中でも使われています。例えばGoogle ChromeやSafariのvideo要素のコントロールがShadow DOMを使って実装されているのは、良くしられています。
    HTMLにはvideo要素しか記述されていなくても、ブラウザーは再生ボタンや時間のスライダーなどのUI部品や、キャプションを表示するための領域などを用意しなくてはなりません。ChromeやSafariではこれらはShadow DOMとして実装されています。
  • 適切な要素を使える場合、例えばプログレスバーならばprogress要素を使えれば、そうしてください。そうすればブラウザーは適切なセマンティクスをユーザーに届けるでしょう。
    プログレスバーの例で、実際にprogress要素を使うことはないと思いますが、例えば、見出しであったりリストであるならば、全部divとspanだけではなく、見出しやリストの要素を使う、という意味です。
  • 実際には、さまざまな制約で適切な要素が使えない、ということもあると思います。
    その場合は、WAI-ARIAを使ってセマンティクスを補うことを考えてみましょう
  • WAI-ARIAもW3Cの仕様で、Editor’s DraftはGitHubで…

Transcript

  • 1. Web Componentsのア クセシビリティ 2015年1月25日 株式会社ミツエーリンクス 黒澤剛志
  • 2. 自己紹介:黒澤 剛志 顧客Webサイトの診断、コンサルティング 社内制作物のアクセシビリティチェック アクセシビリティBlogの執筆 (http://www.mitsue.co.jp/knowledge/blog/a11y/) 2 黒澤 剛志 株式会社ミツエーリンクス アクセシビリティエンジニア
  • 3. 3 http://www.csun.edu/cod/conference/2015/sessions/index.php/public/presentations/view/161
  • 4. Webアクセシビリティ 4
  • 5. Webアクセシビリティとは 特定の環境に依存せず多くの環境からWebを 利用できる 5
  • 6. 多様なデバイス タッチスクリーン キーボードがないデバイス キーボードしかないデバイス 音声入出力 電子ペーパー 6
  • 7. 一時的な制約 屋外で直射日光の下で使う場合(環境光) 音を出せない場合、音が聞こえない場合 けがや状況による制約 7
  • 8. 支援技術 スクリーンリーダー 画面拡大、ズーム機能 ハイコントラストモード 8
  • 9. Webアクセシビリティの3つのポイ ント セマンティクス 様々なデバイス・環境でのインタラクション 代替コンテンツ 9
  • 10. セマンティクス マシン(ブラウザーや支援技術)がセマン ティクスを理解 ユーザーの環境に合わせて情報・機能を提供 10 コンテン ツ ブラウザー ユーザー ブラウザー 支援技術
  • 11. Web Components 11
  • 12. Web Componentsとは ページの構成要素をコンポーネントに コンポーネントを組み合わせてページを構成 コンポーネント単位でカプセル化 12
  • 13. 13 https://www.polymer-project.org/docs/elements/paper-elements.html
  • 14. 14 http://gaia-components.github.io/gaia-components/
  • 15. Web Componentsとア クセシビリティ 15
  • 16. Web Componentsとアクセシビリ ティ コンポーネント…機能や意味を切り出し • 制作者はユーザーに提供したい情報を知っている • ユーザーにきちんと伝えることが重要 16
  • 17. コンポーネントのアクセシビリティ が高ければ 使うだけで一定のアクセシビリティを確保 コンポーネント利用時に頑張る必要がない 17
  • 18. コンポーネントのアクセシビリティ が低ければ 使うだけで全体の質が低下 コンポーネント利用時に頑張る余地がない 18
  • 19. Web Componentsでは… コンポーネントのアクセシビリティが重要 • アクセシビリティの高いコンポーネントを選ぶ • アクセシビリティの高いコンポーネントを作る 19
  • 20. Web Componentsのア クセシビリティ 20
  • 21. Web Componentsのアクセシビリ ティ アクセシビリティの基本は一緒 21
  • 22. https://www.polymer-project.org/articles/accessible-web-components.html 22
  • 23. キーボードだけでも使えるか? 代替コンテンツやセマンティクスは大丈夫か? 色だけに依存してないか? 動いたり点滅したりするものは止められるか? (大意) https://www.polymer-project.org/articles/accessible-web-components.html 23
  • 24. Web Componentsのアクセシビリ ティにおける技術的な特徴 セマンティクスの指定方法 24
  • 25. 例 HTMLネイティブ:<progress> 良くない例:<gaia-progress> 良い例:<paper-progress> 25
  • 26. 視覚的に伝えてる情報は同じでも… マシンがセマンティクスを読み取れる • HTMLネイティブ • 良い例 セマンティクスを読み取れない • 良くない例 26
  • 27. Web Componentsでセマンティクス を指定 Custom Elements Shadow DOM 27
  • 28. Custom Elements http://www.w3.org/TR/custom-elements/ 28
  • 29. Custom Elementsとは 既存要素の拡張 • <button is="xxx-yyy"></button> • document.createElement("button", "xxx-yyy"); 独自要素の定義 • <xxx-yyy></xxx-yyy> • document.createElement("xxx-yyy"); 29
  • 30. Custom Elementsでセマンティクス を指定 既存要素の拡張 • 既存要素のセマンティクスを継承 独自要素の定義 • Shadow DOM 30
  • 31. 既存要素の拡張 セマンティクスは既存要素から継承される 基本的に開発者が何かを行う必要はない <button is="xxx-yyy"> <button> セマンティクス:ボタン セマンティクス:ボタン 31
  • 32. 例:Google ChromeのDeveloper Tools <button is="text-button"> • セマンティクスはbutton要素のまま 32
  • 33. 独自要素の定義 Shadow DOMを使う 33
  • 34. Shadow DOM http://www.w3.org/TR/shadow-dom/ 34
  • 35. Shadow DOMとは ページのDOMツリーとは切り離された 要素独自のDOMツリー(Shadow Tree) • element.createShadowRoot(); 35
  • 36. Shadow DOMの例 36 https://simon.html5.org/presentations/foms-2012/ 動画部分: © Copyright 2006, Blender Foundation / Netherlands Media Art Institute / www.elephantsdream.org
  • 37. Shadow DOMの合成ツリー ページの内容:もともとのDOMとShadow DOMを合成したツリー(合成ツリー) 37 http://www.w3.org/TR/shadow-dom
  • 38. Shadow DOMのセマンティクス ブラウザー:合成ツリーを知っている ブラウザー:支援技術に合成ツリーのセマン ティクスを提供 開発者:合成ツリーにセマンティクスを提供 38
  • 39. 39 https://simon.html5.org/presentations/foms-2012/ 動画部分: © Copyright 2006, Blender Foundation / Netherlands Media Art Institute / www.elephantsdream.org Shadow DOMの例
  • 40. Shadow DOMでセマンティクスを指 定 適切なHTML要素を使えるのであれば、その要 素を利用 適切なHTML要素が使えなければ、WAI-ARIA で補足 40
  • 41. 適切なHTML要素を使える場合 41
  • 42. 適切なHTML要素が使えない場合 WAI-ARIAを利用 42
  • 43. WAI-ARIA 43 http://momdo.github.io/wai-aria/
  • 44. WAI-ARIAとは WAI: Web Accessibility Initiative • W3C WAIが標準化 ARIA: Accessible Rich Internet Applications • Webアプリケーションをよりアクセシブルに 44
  • 45. WAI-ARIAのセマンティクス ロール:role属性 • 要素の種類 • ≒HTMLの要素型 ステート・プロパティ:aria-*属性 • 要素の状態や性質 • ≒HTMLの属性 45
  • 46. 例:プログレスバー ロール: • progressbar プロパティ: • aria-valuemin:最小値 • aria-valuemax:最大値 • aria-valuenow:進捗を表す数値 • aria-valuetext:進捗を表すテキスト 46
  • 47. http://momdo.github.io/wai-aria/roles#progressbar 47
  • 48. 例:プログレスバー:マークアップ 48 <div role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"></div>
  • 49. 例:プログレスバー:更新時 値が変わったとき • aria-valuenowを更新 進捗率が不明な場合 • aria-valuenow属性を指定しない 49
  • 50. 例:プログレスバー:更新したマー クアップ 50 <div role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50"></div>
  • 51. 良い例 51
  • 52. 良くない例 52
  • 53. 良くない例を修正した例 53
  • 54. 良くない例を修正した例 54 良くない例(修正済):<gaia-progress>
  • 55. まとめ 55
  • 56. Web Componentsとアクセシビリ ティ コンポーネント単位でアクセシビリティを確 保しやすくなる可能性 アクセシビリティの品質を維持・管理しやす くなる可能性 56
  • 57. Web Componentsのアクセシビリ ティ 本質的にはWeb Componentsを使わない場合 と同じ Custom ElementsやShadow DOMを使用する 際は、セマンティクスをお忘れなく 57
  • 58. Web Componentsのアクセシビリ ティ? Web Componentsでアクセシビリティ! 58
  • 59. アンケートのお願い http://bit.ly/html5C201501 59