Slide 1

Slide 1 text

チームで開発する際に アクセシビリティを保つ施策 azukiazusa

Slide 2

Slide 2 text

自己紹介 ● Web アプリケーションエンジニア ● Web フロントエンドが得意 ● https://azukiazusa.dev ● 趣味 ○ 読書 ○ 麻雀 ○ ポーカー azukiazusa

Slide 3

Slide 3 text

ソフトウェア開発でアクセシビリティに 取り組むためには?

Slide 4

Slide 4 text

まずは個人の小さな改善から始める ● プロジェクト外の時間を使い、小さな改善から進めて、 成果をアピールする ○ onclick がついてる要素を にする ○ 要素の alt 属性を設定する ○ フォーカスリングが表示されるようにする ● 画面をキーボードのみで操作できるか試してみるとよい ● 数行の小さなコードの修正でも、大きな改善となる

Slide 5

Slide 5 text

個人の取り組みだけでは限界がある ● コンストラクト比や UI 設計の問題はデザイナーを巻き込 む必要がある ● 大きなチームだと、一人ですべての機能のコードをレ ビューするのは難しい ● 自分がチームを異動した後でも、アクセシブルな開発が 進められるようにしたい

Slide 6

Slide 6 text

アクセシビリティを高めていくには、 チームの協力が不可欠

Slide 7

Slide 7 text

アクセシビリティに興味を持つ人を増や していく

Slide 8

Slide 8 text

● 改善をアピールすると、興味を持つ人が増えたり、アク セシビリティの話題が徐々に増えていく ● 改善をアピールするには、スプリントレビューの時間が 効果的 ○ キーボードだけで操作できるようになった様子をデモ するなど 個人の活動からチームに広げる

Slide 9

Slide 9 text

開発チーム全体でアクセシビリティを 意識する状態が望ましい

Slide 10

Slide 10 text

とはいえ... ● WCAG *1や解説書を読んで理解し実践する、といったこ とを開発チーム全体に求めるのは難しい *1 ウェブアクセシビリティに関する世界的な基準にもなっているガイドライン

Slide 11

Slide 11 text

特に意識せずとも アクセシビリティを保てるようにする

Slide 12

Slide 12 text

チーム開発でアクセシビリティを保つ施 策 1. 機械的な方法でコードをチェックする 2. デザインシステムを整備する

Slide 13

Slide 13 text

機械的な方法でチェックする ● ESLint や Markuplint といったリンターにより、静的に アクセシビリティに問題があるコードをチェック ● @axe-core/playwright でブラウザを立ち上げてテストを 実行する ● CI/CD に組み込むことで、アクセシビリティを担保でき る

Slide 14

Slide 14 text

ESLint ● alt 属性のない 要素や、間違った aria-* 属性を 使っている箇所を検出してくれる ● 即座にフィードバックを得ることができる ● なぜ検出されたエラーを修正する必要があるのか、と いった会話からアクセシビリティへの興味を広げられる こともあった

Slide 15

Slide 15 text

それぞれのフレームワークに対応したプ ラグイン ● React → eslint-plugin-jsx-a11y ● Vue.js → eslint-plugin-vuejs-accessibility ● Angular → @angular/eslint ● Svelte → コンパイラが警告してくれる

Slide 16

Slide 16 text

Markuplint ● HTML Standard や WAI-ARIA などの仕様を踏まえた上 でHTML の構文エラーを検出してくれる ○ 許可されていない子要素 ■ の子要素にインタラクティブな要素は 許可されていない ○ 要素にアクセシブルな名前が必要

Slide 17

Slide 17 text

● axe-core はアクセシビリティ検証ツールのコアエンジン で、様々なツールと連携できる ○ Chrome の Devtools など ● @axe-core/playwright はブラウザを立ち上げて自動テス トを実行する @axe-core/playwright

Slide 18

Slide 18 text

● 静的な解析では検証できない問題を検出できる ○ コンストラクト比 ● ページ全体の単位でチェックできる ○ id 属性の重複 ○ 見出し要素のスキップがないか @axe-core/playwright

Slide 19

Slide 19 text

● 機械的なチェックですべての問題に取り組めるわけでは ない ○ 画像の代替テキスト設定されていないことはわかる が、が適切な文章かどうかまではわからない ● よりアクセシビリティを高めたいのであれば、実際に支 援技術を使ってテストするといった人の手によるチェッ クが不可欠 機械的なチェックの注意点

Slide 20

Slide 20 text

デザインシステムの整備

Slide 21

Slide 21 text

● デザインに関することを体系化・構造化したもの ○ デザイン原則 ○ スタイルガイド ○ コンポーネントライブラリ ● プロダクトのデザインの一貫性を保つための、ドキュメ ントや部品・ガイドラインから構成されている デザインシステムとは

Slide 22

Slide 22 text

● 色の組み合わせとコンストラクト比・フォントサイズを あらかじめ定義しておく ● アクセシビリティが考慮されたコンポーネントライブラ リを使い回す デザインシステムとアクセシビリティの 関係

Slide 23

Slide 23 text

● タブやモーダルといった複雑な UI は、アクセシビリティ 上求められていることが多い ○ 適切な role, aria-* 属性を設定し、キーボード操作を 提供する ● ``、`` のような形で使えようにすること で、実装の詳細を隠蔽できる コンポーネントライブラリ

Slide 24

Slide 24 text

あなたの脳は同時に 7 つのことしか記憶で きません。コードベースのアーキテク チャーを設計するときは、これを考慮に入 れるのが良い考えです。 短期記憶はチャンクで数える。それぞれの 項目が長期記憶にあるもっと大きな情報を 示すラベルになりえるからである 。 抽象化とは無関係なことを排除し、本質的 なことを増幅するものである [60]。

Slide 25

Slide 25 text

● 画面を実装しているときに、各 UI パーツのアクセシビリ ティの詳細な実装を頭の隅においておける ○ コンポーネントを使っていればアクセシブルに ● role や aria-* 属性がコンポーネントの外に漏れないよう なインターフェースが望ましい コンポーネントライブラリによるアクセ シビリティ実装の抽象化

Slide 26

Slide 26 text

● ヘッドレス UI ライブラリを使うのがおすすめ ○ Headless UI ○ Radix UI ○ Ark UI ○ React Aria コンポーネントライブラリの実装

Slide 27

Slide 27 text

● 想定された使い方がされない・そもそも認知されておら ず使ってもらえない ● ドキュメントを整備して使いやすい状態を保つ ● 定期的に周知を行う コンポーネント仕様のドキュメント化

Slide 28

Slide 28 text

公開されているデザインシステム を参考にしよう

Slide 29

Slide 29 text

デジタル庁

Slide 30

Slide 30 text

SmartHR

Slide 31

Slide 31 text

freee “vibes”

Slide 32

Slide 32 text

● はじめは個人の活動から始めて、徐々にアクセシビリティ に興味を持ってもらう ● 普段の開発でアクセシビリティを保てるような施策を紹介 した ○ 機械的なコードのチェック ○ デザインシステムの整備 まとめ