2017年10月9日月曜日

IMEの状態を認識しづらいので、誤入力が絶えない問題の解決例

PC上で日本語や英語の文字列を入力したいとき、IMEの状態がわかりにくいので、誤入力してしまうことが多く、ずっと悩んでいる。


IME状態のわかりにくさと誤入力


ここでいう誤入力とは、たとえば「google」と入力したいのにIMEをオフにするのを忘れて「ごおg」と入力したあたりで気づき最初からやり直すようなことをいう。逆に「グーグル」と入力したいのに「guuguru」と入力してやり直すようなこともある。
IMEがオンになっていることに気づかず入力している

IMEの状態はタスクバーの「あ」「A」表示などでたしかに確認できるが、スクリーンの端に小さく表示されているだけなので、およぼす影響に対して、見た目の差が小さすぎて違和感を覚える。またカーソル位置からタスクバーへの視線移動距離が長いケースでは、特にユーザーの支払うコストの高さを感じる。

各IMEの状態表示の工夫


この問題に対し、カーソル位置近くにIME状態を表示する解決方法をとるIMEもある(Google日本語入力、ATOK等)。これは良い方法だが、IME状態が切り替わった瞬間から数秒間表示されるだけでなので、「IME状態を認識するためにIME状態を切り替える」ことになりかねず、解決される場面が限定的である。
Google日本語入力

Windows10付属のIMEでは、切り替えた瞬間にスクリーン中央に大きく入力モードを表示できるようになった(窓の杜より)。これも良い方法だが、やはり「現在のIME状態を前もって認識して、スムーズに入力したい」という要求の解決からは少しずれている。あらかじめIME状態を知る手段ではないからだ。

マウスカーソル近くに常時IMEモードを表示するフリーソフトもあった(ImeTray64)。
このアイディアはかなり良いが、Windowsの「IMEの切り替えはテキストエリアがキーボードフォーカスを持っているときに限定される」という仕様のせいで、「あらかじめIMEをこれから入力したい文字種モードにしたい欲求をWindowsによって抑止されてしまう」気分を何度も味わうことになると思う。
ImeTray64

WebブラウザのテキストエリアをIMEの状態によってハイライトする、Chromeの機能拡張「IMEチェッカー」というものもある。

ユーザの状態認知とそれの改善


手元のWindows環境はアプリケーション(のスレッド)ごとにIME状態を保持しているようだが、それが不便に感じられることも多い。たとえば「このアプリでは日本語しか使わない」とか「このボックスは英文しか入力しない」ことがわかっている場合であれば合理的かもしれないが、英文と日本文どちらを入力するか、入力するまでわからないようなアプリを横断的に利用するような場合においては、全てのアプリごとのIME状態をユーザー側があらかじめ認知しておくことを前提としたデザインにも見える。このため、いたずらに大きな記憶負荷を要求しているように思えた。

以上の問題は、おそらく「アプリ個別ではなくシステムが共通のIME状態を保持する」モデル上で、「ユーザーの注視点近く」に「認識しやすいカラー・形状」でIME状態を「常時表示」して、しかも「常時切替可能」にすると解決しそうな気がする。
昔のDOSや現在のスマートフォンではだいたいできていることだと思うが、スクリーンの大きなPCではこれが実現できていないケースがあり、文字入力UIの障害のひとつになっていると思った。

IMEオン専用ボックスとオフ専用ボックスを作ってみた


ところで、発想を変えて、これまで説明したようにIME状態をユーザーが能動的に切り替えるのではなく、固定化されたIME状態を持つUIをユーザーに選択させるという方法を考えてみた。
この場合、ユーザーは最初に必ず選択をしなければならないので、「IME状態を知らないから誤入力してしまった」という状況はありえない(ただし呼び出すUIを間違えることはある)。
というわけで、IME有効・無効状態それぞれの検索ボックスを、ホットキーであらかじめ選択して、Google Chromeの検索文字列を入力するUIを作ってみた(下図)。

IMEオフ専用テキストボックス(ホットキー[Insert]で出現)


IMEオン専用テキストボックス(ホットキー[PrtSc]で出現)




テキストボックスはホットキーを押すとスクリーン中央に出現するようにした。
Chromeの検索にしか対応していないが、いまのところ結構使いやすいように思える。自信をもって誤入力なしにキーをうちはじめられる気がする。
ホットキーをどれにするかは改善の余地があるかもしれない。色調で区別できるようにし、大きめのフォントを使うようにした。C♯で作った。