スクリーンリーダー NVDA の
開発と Python 3 移行
西本 卓也
@nishimotz / @24motz
NVDA日本語チーム / 株式会社シュアルタ
1
NVDA: Non-Visual Desktop Access
• オープンソースの Windows 対応スクリーンリーダー
• オーストラリアの NPO と世界のコミュニティ
• 3ヶ月ごとにリリース、新しい技術や環境への対応
• アドオン(プラグイン)による拡張性
• Python (2.7 → 3.7) & C++ で実装されている
• NVDA日本語チーム : www.nvda.jp
• 日本語版 (fork) の配布(日本語音声、日本語点訳など追加)
• 本家版の開発と翻訳
• FocusHighlight アドオン
• イベント開催
2
3
■ 1文字ナビゲーション
(Shift+で逆方向)
H : 見出し(1~6も可)
L : リスト
I : リスト項目
T : テーブル
K : リンク
N : リンクのないテキスト
F : フォームフィールド
U : 未訪問リンク
V : 訪問済みリンク
E : エディットフィールド
B : ボタン
X : チェックボックス
C : コンボボックス
R : ラジオボタン
M : フレーム
G : 画像
D : ランドマーク
O : 埋め込みオブジェクト
■ NVDA+F7 : 要素リスト
(閲覧・実行・検索)
リンク / 見出し
フォームフィールド
ボタン / ランドマーク
(Webブラウザの場合)
■ FocusHighlight アドオン
▼ フォーカスとナビゲーターオブジェクトが分離
ナビゲーターオブジェクト : 緑の細い一点鎖点
フォーカスモード : 青の太い点線
フォーカス : 赤の太い実線
フォーカス : 赤の細い実線
フォーカスモード
コンテンツ
ブラウザ
コンテンツ
ブラウザ
キ ー 入 力
NVDA
ブラウズモード
NVDA日本語チーム
www.nvda.jp
NVDA
Cheat Sheet
自動切替または
NVDA+スペース
NVDAがブラウザを制御
▼ 矢印キーでブラウズ
(NVDA+V : 画面レイアウト)
▼ 見出しジャンプ ▼ 要素リスト
Tab / スペース / Enter などはフォーカスモードと同じ
Internet Explorer / Edge
Firefox / Chrome
Word / Excel / Outlook
Acrobat Reader / Kindle for PC
NVDA+N : NVDAメニュー
NVDA+Q : NVDAの終了
NVDA+1 : 入力ヘルプ
NVDA+Enter : 既定アクション実行
■ Windows 操作(フォーカス)
矢印キー : 移動(Shift+で範囲選択)
Tab / Shift+Tab : フォーカス移動
F6 / Shift+F6 : ペイン移動
Enter : 項目選択や実行など
スペース : ボタンを押すなど
Shift+F10 : メニューキー
Alt+ : コンボボックス展開
■ 書式とドキュメント情報 (NVDA設定で不要な報告をチェックなしに)
▼ フォント
フォント名
フォントサイズ
フォント属性
強調
スタイル
色
▼ ドキュメント情報
コメント
校閲者による更新
スペルミス
▼ 要素
見出し
リンク
リスト
引用
カンマ / Shift+カンマ
コンテナ要素の直後・先頭に移動
■ NVDA制御キー
(2回押すと元のキーの機能)
Insertキー
CapsLock(英語キーボード)
NVDA+テンキー(デスクトップ配列)
次のレビューモード 親の要素
前の要素 現在の要素 次の要素
前のレビューモード 子の要素
前の行 現在の行 次の行
前の単語 現在の単語 次の単語
前の文字 現在の文字 次の文字
テンキー(デスクトップ配列)
NVDA+Tab : フォーカス
NVDA+T : タイトル
NVDA+D : 詳細説明
NVDA+F : 書式とドキュメント情報
 Shift+ピリオド 
Ctrl+ Ctrl+ピリオド Ctrl+
 ピリオド 
NVDA+(ラップトップ配列)
←
NVDA+(ラップトップ配列)
PageUp Shift+
Shift+ Shift+O Shift+
PageDown Shift+
←
NVDA+M : マウスカーソル
NVDA+U : プログレス
NVDA+P : 記号
Esc
▼ nvdajp
無変換キー
変換キー(オプション)
Esc(オプション)
■ オブジェクトナビゲーション
ブラウザとコンテンツを操作
▼ ページと間隔
ページ番号
行番号
行インデント
段落インデント
行間
配置
■ レビューカーソル
■ テーブル内の移動
Ctrl+Alt+矢印キー
▼ テーブル情報
テーブル
行と列の見出し
セル番地
セルの罫線
Ctrl+Alt+N : NVDA起動
ランドマーク
フレーム
クリック可能
■ 声や音を止める
▼ 設定 > 音声 > エンジンなし
▼ ツール > スピーチビューアー
▼ 読み上げ Ctrl : 停止 / Shift : 一時停止
■ 報告
デスクトップ配列 NVDA+ : 行の報告
ラップトップ配列 NVDA+L : 行の報告
■ キャレット NVDA+ : 下に進む
NVDA+A : 下に進む
NVDA+B : 現在のウィンドウに含まれるオブジェクトの読み上げ
ガシャ
ポン
4
NVDA日本語版のユーザ数
日本の視覚障害者にとってのNVDA
• 家庭でも職場でも無料
• 助成金でスクリーンリーダーを買うと仕事に使えない
• サブのスクリーンリーダーとして
• メインのスクリーンリーダーに足りない機能・性能を補う
• USBメモリに入れて持ち運べる
• スマートフォンがメイン、PCがサブになっていく
• 頻繁にバージョンアップする OS やアプリを追いかける
• バージョンアップにお金がかからない
• バージョンアップに時間がかからない
• ナレーター (Windows 標準スクリーンリーダー) も急成長中
5
技術者がNVDAで検証する意義
• 開発者も利用者も無料
• チェックツールでなく実際の支援技術で試せる
• サードパーティのライブラリやフレームワーク
• 動的なコンテンツ
• 他のスクリーンリーダーに対応させる準備になる
• 標準化を推進
• 企業での実践例が続々
• Japan Accessibility Conference Vol.2(2019年7月)
6
サイトワールド2019「NVDA 相談会」
11月1日(金曜) 13:30~16:00
すみだ産業会館サンライズホール(錦糸町)
視覚に障害がある人でも使えるように取り組んでおられるクラウドサービスとして
kintone、クラウドサイン、Chatwork、freee
の皆様をお招きします。新しい楽しみ方や働き方に役立つクラウドサービスを、
最新のWindowsと無料のスクリーンリーダーNVDAで
活用していただくために、NVDA日本語チームは
サービス事業者とユーザーが集まる意見交換の場を作ります。
7
2019年のNVDA開発
• 通常なら2月末、5月末、8月末、11月末がリリース目標
• 今年はリリースに多く時間をかけている
• 2019.1
• アドオン開発者に対応を促す仕様の導入
• 開発者スクラッチパッド(高度な機能)
• 2019.3 で非互換の変更
• 音声エンジンの新しい仕様への移行
• 通称 Speech Refactor
• Python 2.7 から 3.7 への移行
8
Python 3 移行
• 2015年(NVDA 2015.1)
• GUI フレームワーク wxPython を 2 から 3 に更新
• 2017年7月
• wxPython 4 alpha が Python 3 に対応、だがなかなか安定せず
• 2018年秋
• NVDA 2018.3 で wxPython 4.0.3 にやっと移行
• Python 3 対応 Pull Request 作成と(一部)six 導入が進む
• 2019年5月
• py2exe が Python 3.7 で動作、2019.3 に向けたビルド開始
• 2019年8月
• 2019.2 リリース(Python 2 系の最終版)
9
ドキュメント作成ツール
• txt2tags: 大昔に開発が止まっている
• 他のシステムに移行が困難
• 意外に複雑なワークフロー
• 翻訳ボランティアの教育コスト
• nishimotz が Python 3 対応やってみた
• 最初は Python-Modernize で
• 昔の記法を直す: map, long, string.join など
• Python 2/3 で実行結果が一致するように
• 2019年4月: 正式に採用された
• コードレビューで Python 2 対応を削除
10
Windows 日本語環境
• MBCS CP932 (Shift-JIS)
• Python のバグを踏んだことも
• Python Issue 14255 tempfile.gettempdir
• MBCS が誤って normcase されていた
• Python 2 だと Windows API が MBCS を返す
• ユーザー名で日本語を使うと簡単に起きる
• UTF-16 に decode する必要がある
• Python 3 はすべて Unicode になった
• 残った問題は本家版でつぶしてもらう
• 例えば open で encoding='utf-8' をつけてない、など
11
NVDA日本語版の Python 3.7 対応
• 日本語音声や日本語点字への対応など
• 本家版のアドオンとして本家版で検証
• モジュールを AppVeyor で複数環境ビルド
• リファクタリングの影響
• パッチを作り直した
• 2019.3jp
• すでにアルファ版を公開中
• 本家 2019.3 と同時に正式リリースできる見込み
• 今後も本家版と日本語版の差を減らしていきたい
12

190916 nishimoto-nvda-pyconjp

  • 1.
    スクリーンリーダー NVDA の 開発とPython 3 移行 西本 卓也 @nishimotz / @24motz NVDA日本語チーム / 株式会社シュアルタ 1
  • 2.
    NVDA: Non-Visual DesktopAccess • オープンソースの Windows 対応スクリーンリーダー • オーストラリアの NPO と世界のコミュニティ • 3ヶ月ごとにリリース、新しい技術や環境への対応 • アドオン(プラグイン)による拡張性 • Python (2.7 → 3.7) & C++ で実装されている • NVDA日本語チーム : www.nvda.jp • 日本語版 (fork) の配布(日本語音声、日本語点訳など追加) • 本家版の開発と翻訳 • FocusHighlight アドオン • イベント開催 2
  • 3.
    3 ■ 1文字ナビゲーション (Shift+で逆方向) H :見出し(1~6も可) L : リスト I : リスト項目 T : テーブル K : リンク N : リンクのないテキスト F : フォームフィールド U : 未訪問リンク V : 訪問済みリンク E : エディットフィールド B : ボタン X : チェックボックス C : コンボボックス R : ラジオボタン M : フレーム G : 画像 D : ランドマーク O : 埋め込みオブジェクト ■ NVDA+F7 : 要素リスト (閲覧・実行・検索) リンク / 見出し フォームフィールド ボタン / ランドマーク (Webブラウザの場合) ■ FocusHighlight アドオン ▼ フォーカスとナビゲーターオブジェクトが分離 ナビゲーターオブジェクト : 緑の細い一点鎖点 フォーカスモード : 青の太い点線 フォーカス : 赤の太い実線 フォーカス : 赤の細い実線 フォーカスモード コンテンツ ブラウザ コンテンツ ブラウザ キ ー 入 力 NVDA ブラウズモード NVDA日本語チーム www.nvda.jp NVDA Cheat Sheet 自動切替または NVDA+スペース NVDAがブラウザを制御 ▼ 矢印キーでブラウズ (NVDA+V : 画面レイアウト) ▼ 見出しジャンプ ▼ 要素リスト Tab / スペース / Enter などはフォーカスモードと同じ Internet Explorer / Edge Firefox / Chrome Word / Excel / Outlook Acrobat Reader / Kindle for PC NVDA+N : NVDAメニュー NVDA+Q : NVDAの終了 NVDA+1 : 入力ヘルプ NVDA+Enter : 既定アクション実行 ■ Windows 操作(フォーカス) 矢印キー : 移動(Shift+で範囲選択) Tab / Shift+Tab : フォーカス移動 F6 / Shift+F6 : ペイン移動 Enter : 項目選択や実行など スペース : ボタンを押すなど Shift+F10 : メニューキー Alt+ : コンボボックス展開 ■ 書式とドキュメント情報 (NVDA設定で不要な報告をチェックなしに) ▼ フォント フォント名 フォントサイズ フォント属性 強調 スタイル 色 ▼ ドキュメント情報 コメント 校閲者による更新 スペルミス ▼ 要素 見出し リンク リスト 引用 カンマ / Shift+カンマ コンテナ要素の直後・先頭に移動 ■ NVDA制御キー (2回押すと元のキーの機能) Insertキー CapsLock(英語キーボード) NVDA+テンキー(デスクトップ配列) 次のレビューモード 親の要素 前の要素 現在の要素 次の要素 前のレビューモード 子の要素 前の行 現在の行 次の行 前の単語 現在の単語 次の単語 前の文字 現在の文字 次の文字 テンキー(デスクトップ配列) NVDA+Tab : フォーカス NVDA+T : タイトル NVDA+D : 詳細説明 NVDA+F : 書式とドキュメント情報  Shift+ピリオド  Ctrl+ Ctrl+ピリオド Ctrl+  ピリオド  NVDA+(ラップトップ配列) ← NVDA+(ラップトップ配列) PageUp Shift+ Shift+ Shift+O Shift+ PageDown Shift+ ← NVDA+M : マウスカーソル NVDA+U : プログレス NVDA+P : 記号 Esc ▼ nvdajp 無変換キー 変換キー(オプション) Esc(オプション) ■ オブジェクトナビゲーション ブラウザとコンテンツを操作 ▼ ページと間隔 ページ番号 行番号 行インデント 段落インデント 行間 配置 ■ レビューカーソル ■ テーブル内の移動 Ctrl+Alt+矢印キー ▼ テーブル情報 テーブル 行と列の見出し セル番地 セルの罫線 Ctrl+Alt+N : NVDA起動 ランドマーク フレーム クリック可能 ■ 声や音を止める ▼ 設定 > 音声 > エンジンなし ▼ ツール > スピーチビューアー ▼ 読み上げ Ctrl : 停止 / Shift : 一時停止 ■ 報告 デスクトップ配列 NVDA+ : 行の報告 ラップトップ配列 NVDA+L : 行の報告 ■ キャレット NVDA+ : 下に進む NVDA+A : 下に進む NVDA+B : 現在のウィンドウに含まれるオブジェクトの読み上げ ガシャ ポン
  • 4.
  • 5.
    日本の視覚障害者にとってのNVDA • 家庭でも職場でも無料 • 助成金でスクリーンリーダーを買うと仕事に使えない •サブのスクリーンリーダーとして • メインのスクリーンリーダーに足りない機能・性能を補う • USBメモリに入れて持ち運べる • スマートフォンがメイン、PCがサブになっていく • 頻繁にバージョンアップする OS やアプリを追いかける • バージョンアップにお金がかからない • バージョンアップに時間がかからない • ナレーター (Windows 標準スクリーンリーダー) も急成長中 5
  • 6.
    技術者がNVDAで検証する意義 • 開発者も利用者も無料 • チェックツールでなく実際の支援技術で試せる •サードパーティのライブラリやフレームワーク • 動的なコンテンツ • 他のスクリーンリーダーに対応させる準備になる • 標準化を推進 • 企業での実践例が続々 • Japan Accessibility Conference Vol.2(2019年7月) 6
  • 7.
  • 8.
    2019年のNVDA開発 • 通常なら2月末、5月末、8月末、11月末がリリース目標 • 今年はリリースに多く時間をかけている •2019.1 • アドオン開発者に対応を促す仕様の導入 • 開発者スクラッチパッド(高度な機能) • 2019.3 で非互換の変更 • 音声エンジンの新しい仕様への移行 • 通称 Speech Refactor • Python 2.7 から 3.7 への移行 8
  • 9.
    Python 3 移行 •2015年(NVDA 2015.1) • GUI フレームワーク wxPython を 2 から 3 に更新 • 2017年7月 • wxPython 4 alpha が Python 3 に対応、だがなかなか安定せず • 2018年秋 • NVDA 2018.3 で wxPython 4.0.3 にやっと移行 • Python 3 対応 Pull Request 作成と(一部)six 導入が進む • 2019年5月 • py2exe が Python 3.7 で動作、2019.3 に向けたビルド開始 • 2019年8月 • 2019.2 リリース(Python 2 系の最終版) 9
  • 10.
    ドキュメント作成ツール • txt2tags: 大昔に開発が止まっている •他のシステムに移行が困難 • 意外に複雑なワークフロー • 翻訳ボランティアの教育コスト • nishimotz が Python 3 対応やってみた • 最初は Python-Modernize で • 昔の記法を直す: map, long, string.join など • Python 2/3 で実行結果が一致するように • 2019年4月: 正式に採用された • コードレビューで Python 2 対応を削除 10
  • 11.
    Windows 日本語環境 • MBCSCP932 (Shift-JIS) • Python のバグを踏んだことも • Python Issue 14255 tempfile.gettempdir • MBCS が誤って normcase されていた • Python 2 だと Windows API が MBCS を返す • ユーザー名で日本語を使うと簡単に起きる • UTF-16 に decode する必要がある • Python 3 はすべて Unicode になった • 残った問題は本家版でつぶしてもらう • 例えば open で encoding='utf-8' をつけてない、など 11
  • 12.
    NVDA日本語版の Python 3.7対応 • 日本語音声や日本語点字への対応など • 本家版のアドオンとして本家版で検証 • モジュールを AppVeyor で複数環境ビルド • リファクタリングの影響 • パッチを作り直した • 2019.3jp • すでにアルファ版を公開中 • 本家 2019.3 と同時に正式リリースできる見込み • 今後も本家版と日本語版の差を減らしていきたい 12

Editor's Notes

  • #2 NVDA (NonVisual Desktop Access) は無料・オープンソースのスクリーンリーダー(音声や点字ディスプレイで利用するためのツール)です。実装の大部分に Python が使われているのが特徴です。 PyCon JP 2012 の併催イベントとして NVDA 日本語チームは NVDA Workshop in Japan を開催し、オーストラリア在住の NVDA 開発者を招きました。 NVDA 日本語チームは NVDA は日本語翻訳と、日本語関連機能を追加した派生バージョンをリリースしています。2012年の時点では実用的とは言えない品質だったNVDA日本語版は、リリースごとに改良を重ね、現在では日本の視覚障害者に広く利用されるようになりました。 NVDA は最新のアクセシビリティ標準への準拠を推進しており、ブラウザベースでリッチなUIを提供する Web アプリケーションの操作に対応します。また、そのような Web アプリケーションの開発者が無料で入手できる検証ツールとしても広く知られるようになりました。 NVDA日本語チームは2013年から視覚障害を持つユーザーや Web 製作者を対象にNVDAの情報を発信してきました。一方で、日本語版を独自に開発するだけではなく、可能な限り本家版の開発に直接コミットしていくことも目指してきました。 今回は、現在進められている Python 3 移行の状況もご紹介します。NVDAはソフトウェア技術に詳しくないエンドユーザーが使うプロダクトでありながら、多くの草の根開発者によって作られたアドオンパッケージが存在します。Python 3 への移行は、多くのユーザーの生活や仕事の環境を破壊してしまう懸念がありました。そこで、まずアドオンにAPIバージョンの概念を導入して、互換性のないアドオンを自動的に無効化し、NVDA そのもののバージョンアップが安全に行われる仕組みを導入しました。並行して NVDAそのもののリファクタリングが進められ Python3 ブランチに向けた多くのプルリクエストが作られました。 依存ライブラリやビルドに必要なツールには、すでに開発が終了していたものや、開発が停滞していたものが多数ありました。NVDA のコミュニティはまず開発が停滞していた GUI フレームワークwxPython の開発にコミットして Python3 移行への道筋を作りました。その他にもドキュメント変換ツール txt2tags や実行ファイル生成ツール py2exe などをPython 3.7 に対応させました。2019年6月にようやく自動ビルドサーバーで Python 3.7.3 ベースのNVDAのビルドが始まりました。 Windows の日本語環境では非 Unicode 環境の文字コードは現在もShift JIS です。一方で Python 2 版実装では非 Unicode の Win32 API が多用されていたため、NVDAには日本語環境でのみ起きた不具合が多くあり、長い時間をかけて調査や修正を行ってきました。これらの多くはPython 3 移行で解決するものの、日本語環境でのみ発生する新たな不具合もあり、 Python 3 版NVDA をリリースする 2019年末までに解決すべき課題です。NVDA日本語チームとしてのこれらの活動についても、発表日現在の状況を報告したいと思います。