スクリーンリーダーは、テキストや画像コンテンツを音声や点字出力として表示する支援技術(AT)[ 1 ]の一種です。スクリーンリーダーは、視覚障害者にとって不可欠であり[ 2 ] 、視覚障害のある人[ 2 ] 、読み書きができない人、学習障害のある人[ 3 ]にも役立ちます。スクリーンリーダーは、テキスト読み上げ[ 4 ]、イヤーコン[ 5 ]、点字デバイス[ 2 ]などの非視覚的な手段を介して、正常な視力を持つ人がディスプレイ上で見ているものをユーザーに伝えようとするソフトウェアアプリケーションです。スクリーンリーダーは、専用のアクセシビリティAPIとのやり取り、さまざまなオペレーティングシステム機能(プロセス間通信やユーザーインターフェイスプロパティのクエリなど)の使用、フック技術の採用など、さまざまな技術を適用してこれを実現します。[ 6 ]
Microsoft Windowsオペレーティングシステムには、 Windows 2000以降、 Microsoft Narratorスクリーンリーダーが搭載されていますが、 Freedom Scientificの市販のJAWSスクリーンリーダーやZoomTextスクリーン拡大鏡、 NV Access の無料オープンソーススクリーンリーダーNVDAなど、別の製品の方がそのオペレーティングシステムでより人気があります。[ 7 ] Apple Inc.のmacOS、iOS、tvOSにはVoiceOver が内蔵スクリーンリーダーとして含まれており、 GoogleのAndroidにはTalkback スクリーンリーダーが提供され、 ChromeOSではChromeVox を使用できます。[ 8 ]同様に、Amazon の Android ベースのデバイスには VoiceView スクリーンリーダーが提供されています。LinuxやUnix ライクなシステムには、 SpeakupやOrcaなどの無料オープンソーススクリーンリーダーもあります。
1978 年頃、IBM ローリーの Al Overby は、 IBM 3270 端末用の音声端末のプロトタイプである SAID (Synthetic Audio Interface Driver の略) を開発しました。[ 9 ] SAID は、ディスプレイの ASCII 値をストリームとして読み取り、スーツケースほどの大きさの大きな音声トラックシンセサイザーを通して音声を出力し、その費用は約 10,000 ドルでした。[ 10 ]盲目の研究数学者である Jesse Wright 博士と、かつてミシガン大学で彼の大学院生だったJim Thatcher は、IBM で数学者として働き、これを盲人が使用できる IBM の社内ツールとして改良しました。1981 年に初期のIBM パーソナルコンピュータ (PC)がリリースされた後、Thatcher と Wright は、PC-SAID ( Personal Computer Synthetic Audio Interface Driver )と呼ばれる SAID に相当するソフトウェアを開発しました。これは 1984 年に IBM Screen Reader と改名され、リリースされました。これが、この種の支援技術の一般的な名称となりました。 [ 10 ]
MS-DOSなどの初期のオペレーティングシステムでは、コマンドラインインターフェース(CLI )が採用されており、画面表示はメモリ内の画面バッファに直接マッピングされる文字とカーソル位置で構成されていました。入力はキーボードで行われました。したがって、これらの情報はすべて、システム内の情報フローをフックして画面バッファを読み取るか、標準のハードウェア出力ソケット[ 11 ]を使用して結果をユーザーに伝えることによって、システムから取得することができました。
1980年代、バーミンガム大学の視覚障害者教育研究センター(RCEVH)は、 BBC MicroとNEC Portable用のスクリーンリーダーを開発した。 [ 12 ] [ 13 ]
グラフィカルユーザーインターフェース(GUI )の登場により、状況はより複雑になった。GUIでは、文字やグラフィックが画面上の特定の位置に描画されるため、ディスプレイのグラフィックコンテンツを純粋にテキストで表現することはできない。そのため、スクリーンリーダーは、オペレーティングシステムからメッセージを収集し、それらを使用して「オフスクリーンモデル」、つまり必要なテキストコンテンツが格納されているディスプレイの表現を構築するという、新しい低レベルの技術を採用せざるを得なくなった。[ 14 ]
例えば、オペレーティングシステムはコマンドボタンとそのキャプションを描画するためのメッセージを送信する場合があります。これらのメッセージは傍受され、オフスクリーンモデルの構築に使用されます。ユーザーは画面上で使用可能なコントロール(ボタンなど)を切り替えることができ、キャプションとコントロールの内容は音声で読み上げられたり、リフレッシュ可能な点字ディスプレイに表示されたりします。
スクリーンリーダーは、メニュー、コントロール、その他の視覚的な構成要素に関する情報を伝えることで、視覚障害のあるユーザーがこれらの構成要素を操作できるようにすることもできます。しかし、画面外モデルを維持することは技術的に大きな課題であり、低レベルのメッセージをフックすることと正確なモデルを維持することはどちらも困難な作業です。
オペレーティングシステムとアプリケーションの設計者は、スクリーンリーダーがオフスクリーンモデルを維持することなくディスプレイコンテンツにアクセスできるようにすることで、これらの問題に対処しようとしてきました。これには、API を介してアクセスできる、画面に表示されている内容の代替的でアクセシブルな表現の提供が含まれます。既存のAPIには、次のものがあります。
スクリーンリーダーは、オペレーティングシステムやアプリケーションに現在表示されている内容を問い合わせ、表示内容が変更されたときに更新情報を受け取ることができます。たとえば、スクリーンリーダーは、現在フォーカスがボタンにあること、そしてそのボタンのキャプションをユーザーに伝える必要があることを知ることができます。この方法はスクリーンリーダーの開発者にとって非常に簡単ですが、アプリケーションがアクセシビリティAPIに準拠していない場合は機能しません。アクセシビリティAPIが不十分な場合の1つのアプローチは、利用可能なオペレーティングシステムメッセージとアプリケーションオブジェクトモデルを使用してアクセシビリティAPIを補完することです。
スクリーンリーダーは、本質的にアクセス不可能なコンテンツを除き、すべての表示コンテンツにアクセスできると想定されます。ウェブブラウザ、ワープロソフト、アイコンやウィンドウ、メールプログラムなどは、スクリーンリーダーユーザーが問題なく使用しているアプリケーションのほんの一例です。しかし、一部のユーザーによると、スクリーンリーダーの使用はGUIの使用よりもはるかに難しく、多くのアプリケーションは、アプリケーションの性質(アニメーションなど)やプラットフォームのアクセシビリティ基準への不準拠に起因する特有の問題を抱えています。
ほとんどのスクリーンリーダーでは、句読点のほとんどを読み上げるか、無視するかをユーザーが選択できます。一部のスクリーンリーダーは、スクリプトを使用して特定のアプリケーションに合わせてカスタマイズできます。スクリプトの利点の1つは、カスタマイズをユーザー間で共有できるため、すべての人にとってアクセシビリティが向上することです。たとえば、 JAWSには活発なスクリプト共有コミュニティがあります。[ 18 ]
冗長性は、視覚障害のあるコンピュータユーザーをサポートするスクリーンリーダーソフトウェアの機能です。音声冗長性コントロールを使用すると、ユーザーは聞きたい音声フィードバックの量を選択できます。具体的には、冗長性設定により、ユーザーはコンピュータ画面に表示されるウェブページのメンタルモデルを構築できます。冗長性設定に基づいて、スクリーンリーダープログラムは、フレームやテーブルの開始と終了、テキストにグラフィックが挿入された場所、ドキュメントにリストが表示される場所など、特定の書式変更をユーザーに通知します。冗長性設定は、リスト、テーブル、領域などの要素の説明レベルを制御することもできます。[ 19 ]たとえば、JAWSは、低、中、高のウェブ冗長性プリセットレベルを提供します。高ウェブ冗長性レベルでは、ウェブページのコンテンツに関する詳細情報が提供されます。[ 20 ]
スクリーンリーダーの中には、コンテンツの言語がメタデータにエンコードされている場合、複数の言語のテキストを読み上げることができるものもあります。[ 21 ]