Mac アプリのアクセシビリティ。WWDC25:Evaluate your app for Accessibility Nutrition Labels でも実演されていたように、VoiceOver 操作を実演しながら、実装による変化を説明してくれるのでとてもわかりやすい。ホバー操作のアクセシビリティは盲点だった。
0:00 – Welcome
- アクセシビリティは誰もがアプリを体験し愛することを可能にする
- Mac アプリ特有の特徴:キーボード・マウスインタラクション中心、密度の高い UI 、強力なマルチタスキング
- Mac 固有の品質が重要なアクセシビリティ考慮事項をもたらす
- 主要な要素:レイアウトの表現、ナビゲーションの加速、インタラクションのアクセシビリティ向上
0:44 – Layout
- アクセシビリティ要素の基本概念:
- Mac アプリは多くのスペースでコントロールとコンテンツを表示
- 視覚的なレイアウトと同様に、アクセシビリティ技術への伝達方法も重要
- SwiftUI は個々のビューをアクセシビリティ要素として伝達、アクセシビリティ技術がアプリを理解・操作するために必要な情報
- VoiceOver によるテスト:
- VoiceOver は様々な視覚レベルの人々がアプリを使用できるスクリーンリーダー、インターフェースを音声として聞いたり、点字として感じることが可能
- VoiceOver でのテストはアプリのアクセシビリティをテストする優れた方法
- Voice Control や Switch Control など他のアクセシビリティ技術との良好な体験への道
- コンテナによるナビゲーション最適化:
- Mac では VoiceOver は主にキーボードショートカットで制御
- 画面上の次・前の要素への移動ショートカット
- 一度に一つの要素ずつ VoiceOver フォーカスを移動して説明を聞く
- SwiftUI は関連アクセシビリティ要素をコンテナアクセシビリティ要素にグループ化可能
- Mac 特有の階層構造:
- Mac では VoiceOver はデフォルトで関連要素をコンテナにグループ化、コンテナごとを移動しナビゲーションを高速化
- Mac のアクセシビリティは iPhone や iPad とは異なり、コンテナがネストされたコンテナを含むことが多く、ツリー構造を生成
- 入れ子のコンテナレベルが多くなりすぎないよう注意
.accessibilityElement(children:)modifier の活用:.contain: ビューをアクセシビリティコンテナとして表現、サブビューがその中のアクセシビリティ要素.combine: ビューとサブビューを一つのアクセシビリティ要素として表現、すべての属性とアクションをマージ.ignore: ビューを一つのアクセシビリティ要素として表現、サブビューを完全に無視
- 要素の順序調整:
.accessibilitySortPriority(_:)modifier を使用してアクセシビリティ要素の順序を変更- デフォルトのソート優先度は 0、同じ優先度のビューは視覚的位置に基づいてソート
- 例:Book Title を Book Author より先に読み上げるため、高い優先度を設定
7:48 – Navigation
- Rotor によるナビゲーション加速:
- VoiceOver ユーザーはすべてのページをナビゲートする必要がある
- Rotor によりビューやテキスト範囲のコレクションを定義し、それらの間を迅速に移動可能にする
.accessibilityRouter(_:)modifier
.accessibilityDefaultFocusmodifier:- macOS と iOS 26 で、VoiceOver などのアクセシビリティ技術に初期フォーカスを提案可能
- 新しいシーンが表示されるとき、SwiftUI はこのモディファイアを持つビューにフォーカスするよう提案
9:52 – Interaction
- ホバーインタラクションの課題:
- ホバーによって出現する操作トリガー(ボタン)
- VoiceOver ユーザーはポインターを動かさないためボタンにアクセス不可
- ポインターのホバーやトラックパッドジェスチャーを必要とするインタラクションは全員にアクセシブルではない
.accessibilityAction(named:)modifier- ビューにアクセシビリティアクションを追加、VoiceOver がアクションメニューを読み上げて選択可能
- Switch Control や Voice Control などの他のアクセシビリティ技術もこれらのアクションに依存
- ホバーによって出現する操作トリガー(ボタン)
- キーボードショートカットの重要性:
- アプリの一般的なタスクにキーボードショートカットを追加
- パワーユーザー機能であるだけでなく、アクセシビリティにも大きく貢献
- マウスを使用できない人にとって特に重要
- カスタムコントロールの考慮事項:
- 独自のカスタムコントロールを作成する場合、他のコントロールが組み込みで持つアクセシビリティ情報を持たない可能性
- SwiftUI Accessibility: Beyond the basics(WWDC 2021)を参照