Mac OS X アプリケーションフレームワークCocoaのアクセシビリティ

なかおけいすけ
2010年1月30日
Mac OS Accessibility 勉強会

概要

VoiceOverや点字ディスプレイなどのアクセシビリティ支援技術は、どのようにしてソフトウェアから情報を得ているのでしょうか。Mac OS Xアプリケーション環境であるCocoaが持つ支援技術と協調する仕組みを、開発者の視点から紹介します。

自己紹介

  • 名前:なかおけいすけ
  • 職業:研究者
  • blog:http://www.argv.org/~chome/blog/noisefactory/
  • twitter:@jm6xxu
  • Accessibilityに関しては素人です
  • プログラミングは時々やりますが、Objective-Cは書けません

Agenda

  • Cocoaの概要
  • CocoaのAccessibilityモデル
  • Accessibility Object
  • まとめ

What's Cocoa?

  • この発表のタイトルを見ると、Cocoaがアプリケーションフレームワークのように見えますが、違います。
  • Cocoaは、アプリケーション環境です。
  • アプリケーション環境は以下のものから構成されます。
    • オブジェクト指向ライブラリ
    • ランタイム
  • この発表では、オブジェクト指向ライブラリについて話します。

Assistive Applicationの逡巡

  • VoiceOverのような支援アプリ(Assistive Application)は、GUIの要素にアクセスして、ユーザインターフェースの全てを知らなければならない
  • アプリケーションが提供する全ての機能を実現しなければならない
  • しかし、アプリケーションによって、ユーザインターフェースは異なる

オブジェクト指向とは?

  • Cocoaアプリは、オブジェクト指向プログラミング言語Objective-Cでプログラムされることが暗黙の了解
  • オブジェクト指向とは、属性(Attribute)と振る舞い(Behavior)を持ったオブジェクトが、メッセージをやりとり(Message Passing)することで機能を実現するという考え方
  • アプリ自体もオブジェクト

Accessibility Object

  • ならば、アプリケーションを構成するオブジェクトが、支援技術と通信できればよい。
  • そこで支援技術に都合のいい共通の属性とアクションを持ったオブジェクトでアプリケーションを作れば良い
  • その「支援技術に都合のいい共通の属性とアクションを持ったオブジェクト」をAccessibility Objectと呼ぶ
  • CocoaのWindow、ボタン、テキストボックス、メニューなどGUIの要素は全て最初からAccessibility Objectである。

Accessibility Object階層

  • GUI要素には関係性がある
  • 同じボタンでも、Aというウインドウの中にあるボタンと、Bというウインドウにあるボタンは別。
  • よってアプリケーションを頂点とする階層構造で、オブジェクト間の関係性を表現する。
  • 例えば、アプリケーションはWindow-AとWindow-Bとメニューを持ち、Window-AにボタンAが、Window-BにボタンBがある。
  • Assistive Applicationは、この階層構造の上から順に探していく

Accessibility Objectの属性

  • Accessibility Objectは、多くの属性を持つことができる。必須の属性は以下の通り。
  • 役割に関する属性 ( The Role and Role Description Attributes)
  • オブジェクトの説明 (The Description Attributes)
  • タイトル (The Title Attributes)
  • 他のオブヘクトとの関連性 (Relationship Attributes)
  • 値 (Values Attributes)

Accessibility ObjectのAction

  • Accessibility Objectがサポートしているアクションは7つある (AXActionConstants.h)
    • Press
    • Increment
    • Decrement
    • Confirm
    • Cancel
    • Raise
    • ShowMenu

Accessibility Objectとの通信

  • VoiceOverなどの支援アプリとAccessibility Objectの通信は2種類ある
    • Message: 支援アプリからAccessibility Objectへの通信
    • サポートしている属性の取得
    • 値の取得
    • アクションの呼び出しなど
  • Notification: Accessibility Objectから支援アプリへの通信
    • 値が変わった
    • 廃棄された
    • キーボードフォーカスが変わった

Accessibility Objectの作り方

  • Accessibility Objectを作るには、NSAccessibility プロトコルを実装すればよい
  • ここでいうプロトコルは、Javaでいうinterface
  • すべてのオブジェクトの親クラスであるNSObjectは、NSAccessibilityを実装できると宣言されている。
  • すなわち全てのオブジェクトはAccessibility Objectになれる

まとめ

  • VoiceOverといった支援アプリは、GUIの要素の全てを取得し、実行しているアプリケーションの全ての機能を実現しなければならない
  • しかしアプリケーションのGUIはそれぞれ異なる
  • そもそもCocoaアプリはオブジェクト指向で、できているはずなので、支援アプリに都合のいいインターフェースを実装させればうまくいく
  • ということでAccessibility Objectを定義し
  • Accessibility Objectと通信することで支援アプリはGUIのすべての情報を得ている。

もう少し考えてみると

  • 視力のある人がGUIでやっていることは、Objectの属性を変えたり、取得したり、振る舞いを呼び出したりしているだけ
  • 現在の支援技術は、GUIをどうやって音にかえるかということをがんばっている(ように見える)
  • では、Visually Impairedな人々もObjectの属性や振る舞いを呼び出せれば良いのでは?
  • これを実現するにはOSやコンパイラの支援が必要だろう
  • Appleさんに期待。

参考文献

  • Cocoa Fundamentals Guide
  • Accessibility Overview
  • Accessibility Programming Guides for Cocoa
  • NSAccessibility Protocol Reference
  • Accessibility (ApplicationServices/HIServices) Reference