このスキルは、スクリーンリーダー、スイッチコントロール、キーボードナビゲーションを使用するユーザーを含む、すべてのユーザーにとってデジタルインターフェースが知覚可能・操作可能・理解可能・堅牢(POUR)であることを保証します。WCAG 2.2 達成基準の技術的な実装に焦点を当てています。
aria-label、accessibilityLabel、contentDescription を通じてコンテキストを提供する。機能的な目的を決定します(例:これはボタンか、リンクか、タブか)。カスタムロールに頼る前に、利用可能な最もセマンティックなネイティブ要素を使用します。
Name, Role, Value パターンを使用。aria-live またはライブリージョンを実装。flowchart TD
UI["UI コンポーネント"] --> Platform{プラットフォーム?}
Platform -->|Web| ARIA["WAI-ARIA + HTML5"]
Platform -->|iOS| SwiftUI["アクセシビリティトレイト + ラベル"]
Platform -->|Android| Compose["セマンティクス + コンテンツ説明"]
ARIA --> AT["支援技術(スクリーンリーダー、スイッチ)"]
SwiftUI --> AT
Compose --> AT
| 機能 | Web (HTML/ARIA) | iOS (SwiftUI) | Android (Compose) |
|---|---|---|---|
| プライマリラベル | aria-label / <label> |
.accessibilityLabel() |
contentDescription |
| セカンダリヒント | aria-describedby |
.accessibilityHint() |
Modifier.semantics { stateDescription = ... } |
| アクションロール | role="button" |
.accessibilityAddTraits(.isButton) |
Modifier.semantics { role = Role.Button } |
| ライブ更新 | aria-live="polite" |
.accessibilityLiveRegion(.polite) |
Modifier.semantics { liveRegion = LiveRegionMode.Polite } |
<form role="search">
<label for="search-input" class="sr-only">Search products</label>
<input type="search" id="search-input" placeholder="Search..." />
<button type="submit" aria-label="Submit Search">
<svg aria-hidden="true">...</svg>
</button>
</form>
Button(action: deleteItem) {
Image(systemName: "trash")
}
.accessibilityLabel("Delete item")
.accessibilityHint("Permanently removes this item from your list")
.accessibilityAddTraits(.isButton)
Switch(
checked = isEnabled,
onCheckedChange = { onToggle() },
modifier = Modifier.semantics {
contentDescription = "Enable notifications"
}
)
<div> や <span> をクリックイベントに使用する。Escape キーまたは明示的な閉じるボタンで脱出可能でなければならない(WCAG SC 2.1.2)。Escape キーまたは閉じるボタン)。frontend-patterns
design-system
liquid-glass-design
swiftui-patterns