TalkBack—その機能、操作ジェスチャおよびAndroidでの設定

著者: IT Sectr 公開日: 2026-05-15 読了時間: 8 分

TalkBackは、Android用Googleのビルトインスクリーンリーダーで、Android Accessibility Suiteパッケージの一部です。インターフェイス要素を音声で説明し、ジェスチャでデバイスを操作できるようにし、目が見えないユーザーや視覚に障害のあるユーザーがスマートフォン機能を十分に利用できるようにします。Google Accessibility Help (2025)によると、TalkBackは大多数のAndroidデバイスにプリインストールされており、複数の音声エンジンで30言語以上をサポートしています。

まとめ

  • TalkBackは、ジェスチャ操作と音声フィードバックを提供する、Android用Googleのビルトインスクリーンリーダーです
  • アクセシビリティフォーカスは、TalkBackが現在音声説明している要素を黄色い枚で強調表示します
  • ジェスチャには、タッチ(音声説明)、2回タッチ(実行)、3指スワイプがあります
  • 開発者は、contentDescriptionやAccessibilityNodeInfoを通じてアクセシビリティを設定します
  • TalkBackは、Google Assistantやブライッシュディスプレイと連携します

TalkBackとは?

TalkBackは、Googleが開発したAndroid用スクリーンリーダーで、Android Accessibility Suiteの一部です。視覚に障害のあるユーザーに音声フィードバックとジェスチャ操作を提供します。TalkBackは、スマートフォン、タブレット、Smart TV、およびWear OSを実行するウェアラブルデバイスで動作します。

TalkBackは2009年にAndroid 1.6 (Donut)で初めて登場しました。最初は単独のプロジェクトでしたが、Android 4.0 (Ice Cream Sandwich)のリリースによってAndroid Accessibility Suiteの一部になりました—これはSwitch AccessやSelect to Speakを含むサービスのセットです。Android 10以降、TalkBackはGoogle Playサービスを搭載するすべてのデバイスにプリインストールされており、パートナーデバイス—Samsung、Xiaomi、Oppoその他を含みます。

TalkBackは、Google Text-to-Speech、Samsung TTS、サードパーティーのものなど、複数の音声エンジンで30言語以上をサポートしています。日本語の場合、Google TTSが自然な発音と正しいイントネーションを提供します。ユーザーはTalkBack設定で話速、ピッチ、そして音声の性別を調整できます。

TalkBackの仕組み

TalkBackはAccessibilityServiceに基づいて動作します—Androidのシステムメカニズムで、アプリがインターフェイスの状態情報を取得し、プログラムで相互作用できるようにします。TalkBackが有効のとき、すべてのタッチイベントを抱揚し、それらを特別なスクリーンリーダージェスチャに変換します。

アクセシビリティフォーカス

TalkBackの仕組みの中心要素はアクセシビリティフォーカスです。標準のインプットフォーカス(テキストフィールドの強調表示)とは異なり、アクセシビリティフォーカスは要素の周りに黄色い枠で表示され、TalkBackを使用しないユーザーには見えません。アクセシビリティフォーカスが要素に移ると、TalkBackがそのコンテンツ、タイプ、状態を音声説明します。

ユーザーはジェスチャでアクセシビリティフォーカスを移動します:右スワイプ(次の要素)、左スワイプ(前の要素)。要素は、AccessibilityNodeInfoが定める順番で翌ります—これはAndroidが各画面について構築するアクセシビリティツリーです。開発者はaccessibilityTraversalBeforeやaccessibilityTraversalAfterプロパティを通じて順番を制御できます。これは、カスタムレイアウトの複雑な画面で特に重要です。

AccessibilityNodeInfoとアクセシビリティツリー

画面上の各Viewは、アクセシビリティツリーのノードで表されます—AccessibilityNodeInfoオブジェクトです。このオブジェクトには、要素のテキスト(contentDescriptionまたはビューテキスト)、要素のタイプ(ボタン、チェックボックス、入力フィールド)、状態(有効/無効/選択中)、画面上の位置、および使用可能なアクションのリストが含まれます。TalkBackはこのツリーを翌り、各ノードを順番に音声説明します。

Viewにテキストコンテンツがない場合(例えば、説明のないImageView)、TalkBackにとって不可視になります—ユーザーはその存在を知ることができません。この問題を解決するために、開発者はcontentDescriptionを設定します—TalkBackが無音の代わりに読み上げるテキスト説明です。Androidはまた、状態が変わる要素(チェック/アンチェック)のstateDescriptionや、ヒントあり入力フィールドのhintTextもサポートしています。

TalkBackの操作ジェスチャ

TalkBackは、標準のAndroidジェスチャを特別なスクリーンリーダージェスチャに変換します。大亊まわの操作は1指または2指で実行され、3指のジェスチャはグローバルアクションに使用されます。

操作ジェスチャ結果
要素を音声説明1指でタッチ要素の名称とタイプを説明
実行2回タッチボタン押下または移動
次へ右スワイプ次の要素
前へ左スワイプ前の要素
スクロール2指スワイプリストのスクロール
TalkBackメニュー上左スワイプグローバル設定メニュー

上左スワイプ(L字型スワイプ)でTalkBackのグローバルメニューが開き、話速変更、スクリーンカーテン有効、チュートリアル起動、設定開きなどができます。TalkBackは要素のコンテキストメニューもサポートしています:上右スワイプで現在の要素のアクションリスト(例:テキストフィールドの「コピー」、「ペースト」、チャットメッセージの「削除」)が開きます。

モバイル開発におけるTalkBack

Androidは、アクセシビリティ設定のための豊かなAPIを提供しています。基本レベルはcontentDescriptionですが、質の高いTalkBackサポートにはAccessibilityNodeInfo、AccessibilityDelegate、LiveRegionの扱いが必要です。

ContentDescriptionと重要な属性

android:contentDescription属性は、TalkBackに向けて要素のテキスト説明を設定します。ImageView、ImageButton、FloatingActionButton、およびテキストコンテンツのないカスタムViewに必須です。標準要素(TextView、Button)ではcontentDescriptionはオプショナルです—TalkBackが自動的にテキストを読み上げます。

kotlin
val avatarView = ImageView(this)
avatarView.contentDescription = "ユーザーアバター"
avatarView.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_YES

val playButton = ImageButton(this)
playButton.contentDescription = "動画を再生"

val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_NO

importantForAccessibilityフラグで、TalkBackに対する要素の可視性を制御します。NOは要素をアクセシビリティツリーから非表示にします—装飾画像、指示器、カスタム背景に便利です。YESは、テキストがなくても強制的に要素を翌りに含みます。NOの潜用に注意してください:セマンティックに重要な要素を非表示にすると、TalkBackユーザーがアプリを利用できなくなります。

AccessibilityDelegateとカスタムアクション

標準のクリックハンドラーを使用しないカスタムViewでは、AccessibilityDelegateをオーバライドする必要があります—アクセシビリティイベントを処理するクラスです。デリゲートを使うと、カスタム説明や要素タイプ、TalkBackがコンテキストメニューで提示するアクションのリストを設定できます。

kotlin
class CustomButtonDelegate : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfoCompat
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "カスタムボタン"
        info.className = Button::class.java.name
        info.addAction(
            AccessibilityNodeInfoCompat.AccessibilityActionCompat(
                R.id.custom_action, "シェア"
            )
        )
    }

    override fun performAccessibilityAction(
        host: View, action: Int, args: Bundle?
    ): Boolean {
        if (action == R.id.custom_action) {
            shareContent()
            return true
        }
        return super.performAccessibilityAction(host, action, args)
    }
}

例では、デリゲートがTalkBackに要素がボタン(className = Button)であり、TalkBackのコンテキストメニューに「シェア」アクションが表示されることを通知しています。performAccessibilityActionメソッドがこのアクションの実行を処理します。デリゲートがないと、TalkBackはカスタムViewを非インタラクティブな単純領域とみなし、ユーザーは相互作用できません。

TalkBack用のアクセシビリティ設定

完全なTalkBackサポートには、contentDescriptionだけでなく、フォーカス管理、動的更新のためのLiveRegion、スクリーンリーダーを有効にしてのテスト、さまざまなAndroidバージョンへの適応が必要です。

動的コンテンツ用LiveRegion

画面のコンテンツがユーザーの明示的な操作なしに変化したとき(例:新しいメッセージの通知やいいね数の更新)、TalkBackは通知を受ける必要があります。このためにXMLのViewにandroid:accessibilityLiveRegion属性か、コードでsetAccessibilityLiveRegion()メソッドを使用します。politeは現在の音声説明が終了した後に発表され、assertiveは即座に中断します。

kotlin
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_POLITE

// テキストが更新されると、TalkBackが自動的に
// 変更を発表します
statusText.text = "アンナからの新しいメッセージ"

// クリティカルな通知にはassertive
errorBanner.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE

LiveRegionはiOSのUIAccessibility.postに対応するAndroidの機能です。大亊まわの更新(新しいメッセージ、ステータス更新)にはpoliteを使い、assertiveはクリティカルなエラー(決済失敗、コネクション切断)だけに使用します。assertiveの使い過ぎはユーザーエクスペリエンスを悪化させます—TalkBackが精常に音声説明を中断します。

グルーピングとアクセシビリティプロバイダ

複数のViewが1つの論理単位を形成する複雑な画面では、AccessibilityNodeProviderまたはfocusSearchを使用してナビゲーションをオーバライドします。例えば、42セル(6週×7日)のカスタムカレンダーで、ユーザーが次のブロックに移るために42すべてのアイテムをスクロールする必要はありません。開発者はセルを論理ユニットにグルーピングできます:月)→週)→日。

Jetpack Composeでは、.semantics {}修飾子が似たAPIを提供します:contentDescription、liveRegion、stateDescription、disabled、customActions。Composeはまた、子セマンティクスをひとつに結合するmergeDescendantsをサポートしており、View毎にaccessibilityDelegateを手動設定せずに要素をグルーピングできます。

kotlin
Button(
    onClick = { sendMessage() },
    modifier = Modifier.semantics {
        contentDescription("メッセージを送信")
        stateDescription("送信準備完了")
    }
) {
    Icon(Icons.Filled.Send, "送信")
}

TalkBackのテストは、サービスを有効にした物理デバイスまたはエミュレーターを使用して行います。画面を非表示にした状態(Screen Curtain)で主なユーザーシナリオを経由することをお勧めします—これで視覚フィードバックがまったくない状況を再現できます。AndroidはまたAccessibility Scannerを提供しています—アクセシビリティ問題を自動検出するツールで、contentDescriptionのない要素、小さすぎるタッチ範囲、低コントラストを強調表示します。

よくある質問

AndroidでTalkBackを有効にするには?

設定→アクセシビリティ→TalkBack→有効にする。クイック有効には、3秒間両方の音量ボタンを同時に押します。Google Assistantの音声コマンド「TalkBackを有効にして」でも有効にできます。

TalkBackとVoiceOverの違いは?

TalkBackはAndroid用スクリーンリーダー、VoiceOverはiOS用です。TalkBackはAccessibilityServiceと黄色い枠のアクセシビリティフォーカスを使用し、VoiceOverはUIAccessibilityとローターを使用します。ジェスチャやメニューが異なり、TalkBackにはグローバルメニューのL字型スワイプがあります。

アプリをTalkBack対応させるには?

すべてのImageViewやカスタム要素にcontentDescriptionを設定します。装飾要素を非表示にするにはimportantForAccessibilityを使用します。動的更新にはaccessibilityLiveRegionを設定し、Accessibility Scannerで確認します。Composeでは.semantics{}修飾子を使用します。

AccessibilityNodeInfoとは?

アクセシビリティツリーにおけるインターフェイス要素を表すオブジェクトです。テキスト、タイプ、状態、位置、アクションリストを含みます。TalkBackはナビゲーションにこのツリーを使用します。開発者はAccessibilityDelegateまたはXML属性で変更できます。

TalkBackがボタンを読み上げないのはなぜ?

importantForAccessibilityを確認してください—NOに設定されている可能性があります。テキストのない要素にはcontentDescriptionが設定されていることを確認してください。カスタムViewには、onInitializeAccessibilityNodeInfoを使ったAccessibilityDelegateを実装してください。診断にはAccessibility Scannerを使用してください。

まとめ

  • TalkBackは、ジェスチャ操作を備えたAndroid Accessibility Suite内のビルトインAndroidスクリーンリーダー
  • アクセシビリティフォーカスが黄色い枠で画面上の現在音声説明中の要素を示す
  • AccessibilityServiceがタッチイベントを抱揚しスクリーンリーダージェスチャに変換
  • ジェスチャにはタッチ(音声説明)、2回タッチ(実行)、L字型スワイプ(メニュー)
  • 開発はcontentDescription、AccessibilityDelegate、LiveRegion、Composeのsemanticsで
  • 動的更新にはandroid:accessibilityLiveRegionが変更の自動発表に必要
  • テストはAccessibility ScannerとScreen Curtainで質の高いサポートに必須

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

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

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

こちらもお読みください