テキストモードの誤解:現代のTUIがアクセシビリティにとって悪夢である理由
10時間前原文(xogium.me)
概要
- ターミナルアプリは自動的にアクセシブルになるという誤解の指摘
- TUI(Text User Interface)が視覚障害者にとって大きな障壁となる実態
- CLIとTUIの構造的違いとそのアクセシビリティへの影響
- 具体例や既存ツールの比較による問題点の分析
- 改善策と開発者への提言
ターミナル=アクセシブルという神話
- 視覚障害者対応としてターミナルアプリが十分だという誤解
- グラフィックや複雑なDOMがないからといって、必ずしもスクリーンリーダーで読めるわけではない現実
- Ink(JS/React)、Bubble Tea(Go)、tcellなどのモダンTUIフレームワークがアクセシビリティを悪化させる傾向
構造的欠陥:ストリームとグリッド
- CLIはストリーム型:標準入出力に沿った直線的・時系列的な表示
- Speakupのようなカーネルレベルのスクリーンリーダーに理想的
- TUIはグリッド型:2Dグリッド上に空間的に配置
- 時間的流れを捨て、座標ベースの情報提示へ
- スクリーンリーダーが混乱しやすい構造
gemini-cliの実例と問題点
-
gemini-cli(Ink使用)のチャットUIで発生する問題
- 画面全体の再描画が頻発し、スクリーンリーダーがスパム状態
- カーソル移動やタイマー更新で、断片的な情報が読み上げられる
- ユーザー入力が混線し、何を入力しているのか把握困難
-
Windows(NVDA)での障害:
- SSH接続やテキスト貼り付け時に即座にクラッシュやシステム不安定化
- 状態変化ごとに全履歴再描画、履歴が多いほど負荷増大
- insert+5(動的変化の読み上げ抑制)でも回避不可
パフォーマンス劣化とラグ
- Inkなどのシングルスレッド環境で履歴増加時の大幅な遅延
- 大量テキスト貼り付けで数秒単位のラグ
- 入力反応が極端に遅くなる現象
既存ツールとの比較:なぜnano、vim、menuconfigは許容されるか
-
nanoやvimではカーソル非表示設定が可能
- カーソル追従をオフにしなければスクリーンリーダーが座標情報ばかり読み上げる
- 視覚的ノイズ抑制で文字入力の読み上げが可能に
- モダンフレームワークにはno-cursor/headlessモードがほぼ未実装
-
menuconfigは単一カラム集中型
- 縦リストにカーソルを固定し、空間的混乱を最小化
- IrssiはVT100スクロール領域活用で履歴と入力行の干渉を抑制
- ハードウェア機能を利用し、全画面書き換えを避ける
- 現代的フレームワークは画面全体のdiff・再描画を選択しがち
アクセシビリティ問題の放置と無視
- Googleやgemini-cliメンテナによるアクセシビリティ課題の放置
- Issue #3435, #11305などが議論もなく放置
- Issue #1553は自動Botでクローズ、「古いから閉じます」という形式的対応
- 未解決のままクローズ=証拠隠し・実害放置
結論・開発者への提言
- ターミナル向けアプリ開発時は、TUIフレームワークの安易な利用を再考
- カーソル非表示やシンプルなストリーム表示が本質的なアクセシビリティ向上
- スピナーやタイマーの頻繁な再描画に依存する設計は避けるべき
- 視覚障害者にとっては、単純なCLIストリームの方が遥かに優れている