アクセシビリティ — 基礎、視覚障害者向けVoiceOverとTalkBack

著者: IT Sectr 公開日: 2026-02-26 読了時間: 9 分

Accessibility (a11y) — 障がいを持つ人々がモバイルアプリケーションを使いやすくすること。スクリーンリーダー(iOSのVoiceOver、AndroidのTalkBack)、テキストの拡大(Dynamic Type)、十分な色のコントラスト(WCAG 2.1レベルAA)、視覚なしでのナビゲーション、ジェスチャーの代替手段などが含まれます。WHO(2023年)によると、13億人以上(人口の16%)が何らかの障がいを抱えて生活しています。アクセシビリティはオプションではなく、必要不可欠です。詳細はAppleの公式アクセシビリティドキュメントをご覧ください。

主要ポイント

  • Accessibility — 障がいを持つ人々(視覚、聴覚、運動)のためのアプリの使いやすさ
  • VoiceOver — iOSおよびmacOSでインターフェース要素を音声読み上げするAppleのスクリーンリーダー
  • TalkBack — 視覚なしでのジェスチャー操作が可能なAndroid向けGoogleのスクリーンリーダー
  • WCAG 2.1 — 国際的なアクセシビリティ標準:コントラスト4.5:1、タッチ領域サイズ44×44pt
  • contentDescription — TalkBackが読み上げる要素を説明するAndroid属性

モバイルアプリのアクセシビリティ(a11y)とは?

Accessibility(略称a11y — 「a」と「y」の間の11文字)— 視覚、聴覚、運動、認知に障がいを持つ人々が使用できるアプリケーションを開発する実践です。モバイル開発において、アクセシビリティは4つの主要なシナリオをカバーします。視覚障害者(スクリーンリーダー)、弱視者(拡大、コントラスト)、聴覚障害者(字幕、音の視覚的代替手段)、運動機能が制限されたユーザー(音声コントロール、Switch Control、大きなタッチ領域)です。

法的要件 — 多くの国では、アクセシビリティは法律で義務付けられています。米国:Section 508およびADA。EU:European Accessibility Act(2025年)。英国:Equality Act 2010。アクセシビリティ対応がない場合、アプリは訴訟の対象になる可能性があります。2023年の米国では、アクセスできないデジタル製品に関して4,000件以上の訴訟が提起されました。AppleとGoogleはアプリ審査時にアクセシビリティをチェックします。App Store Review Guidelines(4.2)およびGoogle Play Storeは最低限のアクセシビリティ対応を要求しています。

ビジネス上の根拠 — アクセシビリティはユーザー層を拡大します。Return on Disability(2021年)によると、障がい者による年間可処分所得は13兆ドルに上ります。アクセシブルなアプリは検索でのランキングも向上し(セマンティックHTML、altテキスト)、ユーザー評価が高く、UXに関するレビューも少なくなります。IT Sectrでは、全プロジェクトの完了条件にアクセシビリティを含めています。これは品質基準であり、オプションの改善項目ではありません。

iOSのアクセシビリティ:VoiceOverとUIAccessibility

VoiceOver — iOS、iPadOS、macOSに組み込まれているAppleのスクリーンリーダー。ユーザーが画面上で指をドラッグすると、VoiceOverが指の下にある要素の名前を読み上げます。ダブルタップで要素をアクティブにします。VoiceOverは40種類以上のジェスチャーをサポートしています。3本指スワイプ(スクロール)、2本指ダブルタップ(停止)、Zジェスチャー(戻る)などです。開発者はUIAccessibilityプロトコルとaccessibilityLabel、accessibilityTraits、accessibilityHintプロパティを通じて、VoiceOverが何をどのように読み上げるかを制御します。

swift
class CustomButton: UIButton {

    override var isAccessibilityElement: Bool {
        get { return true }
        set {}
    }

    // accessibilityLabelのオーバーライド
    override var accessibilityLabel: String? {
        get { return "フォーム送信ボタン" }
        set {}
    }

    // accessibilityHintのオーバーライド
    override var accessibilityHint: String? {
        get { return "ダブルタップしてデータを送信" }
        set {}
    }

    // accessibilityTraitsのオーバーライド
    override var accessibilityTraits: UIAccessibilityTraits {
        get { return .button }
        set {}
    }
}

// Dynamic Type — テキストの拡大縮小
titleLabel.font = UIFontMetrics.default.scaledFont(
    for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true

ダイナミックタイポグラフィ — iOSのDynamic Typeを使用すると、ユーザーはテキストサイズ(XSからXXXL)を選択できます。開発者は自動スケーリングにUIFontMetrics.scaledFontを使用します。テキストはすべてのサイズで正しく表示される必要があります。行が切り取られず、ボタンはテキストに比例して拡大する必要があります。UITableViewはテキストサイズの変更に応じてセルの高さを自動的に更新します。Dynamic Typeを無視することは、弱視のユーザーにとってアプリを利用不可能にすることを意味します。

SwiftUIでのアクセシビリティ

SwiftUIはアクセシビリティ修飾子を提供します:.accessibilityLabel()、.accessibilityHint()、.accessibilityAddTraits()、.accessibilitySortPriority()。デフォルトでは、すべての標準SwiftUI要素(Text、Button、Image)は自動ラベル付きのアクセシビリティ要素です。カスタムViewの場合は、.accessibilityElement(children: .combine)を使用して子要素を1つに結合します。SwiftUIはDynamic TypeとVoiceOverを自動的にサポートします。

swift
VStack {
    Image(systemName: "trash")
        .accessibilityLabel(Text("項目を削除"))
    Text("ゴミ箱")
        .font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("選択した項目を完全に削除します"))

Androidのアクセシビリティ:TalkBackとcontentDescription

TalkBack — Googleのスクリーンリーダーで、ほとんどのAndroidデバイスにプリインストールされています(Android 5+のすべてのバージョンでGoogle Playから入手可能)。TalkBackはVoiceOverと同じジェスチャーを使用します。ナビゲーションはスワイプ、アクティブ化はダブルタップです。開発者はXMLのandroid:contentDescription属性またはコード内のsetContentDescription()を使用して要素の説明を設定します。ImageViewではcontentDescriptionが必須です。これがないと、TalkBackは「ラベルなし」と読み上げるか、ファイル名を読み上げます。

kotlin
// ImageViewのXML: contentDescription
<ImageView
    android:id="@+id/iconDelete"
    android:src="@drawable/ic_delete"
    android:contentDescription="@string/delete_button_desc"
    android:focusable="true"
    android:clickable="true" />

// Kotlin: プログラムによる割り当て
iconDelete.contentDescription = getString(R.string.delete_button_desc)

// Accessibility Delegate(カスタム)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfo
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "削除ボタン"
        info.contentDescription = "選択した項目を削除"
        info.className = Button::class.java.name
    }
}

// 動的更新のためのLive Regions
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE

Live Regions — フォーカスなしでコンテンツの変更をTalkBackに通知するAndroidの仕組み。android:accessibilityLiveRegion属性は3つの値を受け入れます:none(通知なし)、polite(現在の読み上げの後に通知)、assertive(即時通知)。読み込み状況の更新にはpolite、重要なエラーにはassertiveを使用します。assertiveの過剰使用はユーザーにとって混乱を招きます。TalkBackが現在の操作を常に中断することになります。

Accessibility Scanner

Accessibility Scanner — ソースコードにアクセスせずにAndroidアプリのアクセシビリティをテストするためのGoogleの無料アプリ。スキャナーは以下をチェックします:テキストのコントラスト、タッチ領域のサイズ(Androidアクセシビリティガイドラインに従い最小48×48dp)、ImageViewのcontentDescription、正しい要素階層。自動テストには、EspressoのAccessibilityChecksを使用します。これらはCI/CDに統合され、ビルドごとにアクセシビリティをチェックします。

WCAG 2.1:コントラスト、サイズ、タッチ領域

WCAG 2.1(Web Content Accessibility Guidelines)— W3Cが策定した国際的なアクセシビリティ標準。バージョン2.1(2018年)には、モバイルアプリケーション向けの13の追加基準が含まれています。適合レベル:A(最小)、AA(ほとんどの組織で必須)、AAA(最大)。AppleとGoogleは、アプリ公開の最小基準としてレベルAAを推奨しています。WCAG 2.2は2023年に公開され、フォーカスと入力に関する改良が加えられました。

主要基準 モバイル開発向け:テキストコントラストは最低4.5:1(AA)または7:1(AAA)、タッチ領域サイズは最低44×44pt(iOS)または48×48dp(Android)、機能を失わずに横向きと縦向きの両方に対応、アニメーションの無効化(prefers-reduced-motion)、マルチメディアのキャプション、音声コントロールとの互換性(iOSのVoice Control、AndroidのVoice Access)。

WCAG 2.1基準レベルiOS要件Android要件
1.4.3 コントラスト(テキスト)AA標準4.5:1、大文字3:1標準4.5:1、大文字3:1
1.4.11 コントラスト(非テキスト)AAアイコン、枠線3:1アイコン、枠線3:1
2.5.5 ターゲットサイズAAA44×44pt48×48dp
2.3.3 アニメーションAAAprefers-reduced-motionandroid:animateLayoutChanges
4.1.2 名前、役割、値AaccessibilityLabel、traitscontentDescription、role

コントラストチェックツール — Colour Contrast Analyser(TPGI)、WebAIM Contrast Checker、Stark(Figma)、Accessibility Inspector(Xcode)。IT Sectrでは、デザイン段階(Figma + Stark)と開発段階(Accessibility Inspector / Accessibility Scanner)でコントラストをチェックしています。18pt(14pt bold)未満のすべてのテキストの最小要件は4.5:1です。ロゴや装飾要素にはコントラストは必要ありません。

アクセシビリティテスト:ツールとチェックリスト

iOSテスト — XcodeのAccessibility Inspector(Xcode → Open Developer Tool → Accessibility Inspector)は、各要素のラベル、traits、hintをチェックします。VoiceOverは設定から、またはアクセシビリティショートカット(ボタンのトリプルクリック)で有効にできます。自動テストには、XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement)を使用したXCUITestを使用します。AppleはVoiceOverを有効にしてすべてのアプリ画面をテストすることを推奨しています。

Androidテスト — Accessibility Scanner(Play Store)は、コントラスト、タッチ領域のサイズ、contentDescriptionをチェックします。自動化には:Espresso AccessibilityChecks(インポート:androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1')。Googleは次のチェックリストを推奨しています:すべてのImageViewにcontentDescriptionがある、タッチ領域が48×48dp以上ある、テキストが200%に拡大しても切り取られない、すべての要素がTalkBackのスワイプで到達可能である。

IT Sectrチェックリスト — リリース前に以下を確認します:(1)VoiceOver/TalkBackがすべての要素を正しく読み上げる、(2)テキストが機能を失わずに最大サイズに拡大できる、(3)すべてのImageViewにcontentDescriptionがある、(4)すべてのテーマでテキストコントラストが4.5:1以上、(5)タッチ領域が44pt/48dp以上、(6)長押しでのみアクセス可能なコンテキストメニューがない、(7)システム設定のReduce Motion / Remove Animationsに対応している。このチェックリストは各スプリントの完了条件に含まれています。

よくある質問

VoiceOverとTalkBackの違いは何ですか?

VoiceOver — iOS、iPadOS、macOS向けAppleのスクリーンリーダー。1本指および複数指のジェスチャー(スワイプ、ダブルタップ)を使用します。TalkBack — 同様のジェスチャーを持つAndroid向けGoogleの同等品。VoiceOverはaccessibilityLabelを読み上げ、TalkBackはcontentDescriptionを読み上げます。どちらも点字ディスプレイと音声コントロールをサポートしています。機能に根本的な違いはありません。

AndroidのcontentDescriptionとは何ですか?

contentDescription — AndroidのView属性で、TalkBackのテキスト説明を設定します。これがないと、TalkBackは「ラベルなし」と言うか、クラス名(ImageView、Button)を読み上げます。XMLではandroid:contentDescription="@string/desc"、コードではview.contentDescription = "テキスト"で設定します。装飾画像にはcontentDescription=@nullを使用します。

アクセシビリティの最低コントラストは?

WCAG 2.1レベルAAによる:標準テキストは4.5:1、大きいテキスト(18ptまたは14pt bold以上)は3:1。レベルAAA:標準は7:1、大きいは4.5:1。両方のテーマ(ライト/ダーク)でコントラストを確認してください。Googleによると、コントラスト違反はモバイルアプリで最も一般的なアクセシビリティ問題です。

iOSでDynamic Typeをサポートする必要がありますか?

はい。AppleはすべてのアプリにDynamic Typeを推奨しています。ユーザーは設定でテキストサイズを指定します。開発者はUIFontMetrics.scaledFontを使用します。フォントは自動的に拡大縮小されます。Dynamic Typeがないと、弱視のユーザーはテキストを読めません。iOSはApp Store審査時にDynamic Typeを自動的にチェックします。

WCAGとは何ですか?

WCAG(Web Content Accessibility Guidelines)— W3Cによる国際的なコンテンツアクセシビリティ標準。バージョン2.1(2018年)にはモバイルアプリ向けの基準が含まれています:コントラスト、タッチ領域サイズ(44×44pt)、スクリーンリーダー対応、ジェスチャーの代替手段、キャプション。レベルAAはApp StoreとGoogle Playで公開するための最低基準です。

まとめ

  • Accessibility — 13億人の障がい者向けアプリの使いやすさ(WHO、2023年)
  • VoiceOver(iOS)とTalkBack(Android) — 視覚障害者向けスクリーンリーダー
  • UIAccessibility — アクセシビリティ要素のラベル、hint、traitsを設定するiOSプロトコル
  • contentDescription — TalkBackに要素を説明するAndroid属性
  • WCAG 2.1 — コントラスト4.5:1、タッチ領域44×44pt、Dynamic Type対応
  • Dynamic Type — UIFontMetrics.scaledFontによるiOSのテキスト拡大
  • テスト — Accessibility Inspector(iOS)、Accessibility Scanner(Android)、Espresso Checks

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください