HTML5 Forms の type 指定がデスクトップ IMEに影響するという話

最近やっていた仕事について,一通りリリースが終わって誰でも試せる段階になったので書いてみる.Web アプリ開発者の人や,IME 作成者の人には影響があるかも知れない.ただし Windows デスクトップを相手にしていなければ,ここで読むのをやめてもなんら問題はない.

最近 Chromium と Firefox にパッチを書いて,HTML5 Forms の type 指定が InputScope として TSF ベースの IME (いわゆる Text Input Processors; TIP) やソフトウェアキーボードに通知されるようにした.これは,基本的に Windows 8 上での Internet Explorer 10 の動作に合わせたものである.具体的には,以下の環境で,各種ブラウザが InputScope をサポートするようになった.

  • Microsoft Internet Explorer 10以降 (ただし Windows 8以降)
  • Google Chrome 26以降 (ただし Windows Vista以降)
  • Mozilla Firefox 23以降 (ただし Windows Vista以降)

なぜこれが問題になるのか.それは,一部の InputScope が指定されたとき,(Windows Vista 以降の) MS-IME は自動的に自分自身をオフにするからだ.
モダンなブラウザの実装では,HTML5 Forms input 要素の type 属性に,number, email, tel, time (Firefox 23+ の場合のみ), url のいずれかを指定したときこの「一部の InputScope」に該当する.結果として,対応する InputScope を受け取った MS-IME は自分自身のモードをオフに設定する.

ポイントは,これが IME 自身の判断によって行われるモード変更ということだ.この挙動についてブラウザベンダーを責めるのは難しい.ブラウザは単に対応する InputScope を IME に伝えているだけである.この点で,非標準の CSS に存在する ime-mode とは大きく異なる (ただし,type = password だけは以前からブラウザ自身が IME をオフにしている).

影響を受けないのは,

  • TSF 非対応の IME を使っている場合
  • InputScope を無視する IME を使っている場合 (たとえば ATOK 2013 とそれ以前)
  • Windows XP で上記ブラウザを使っている場合

である.なお,各 InputScope に対する挙動は各 IME にゆだねられているため,今後のアップデートで振る舞いが変化する可能性もある.

まとめ

InputScope に対応したデスクトップブラウザ

  • Microsoft Internet Explorer 10以降 (ただし Windows 8以降)
  • Google Chrome 26以降 (ただし Windows Vista以降)
  • Mozilla Firefox 23以降 (ただし Windows Vista以降)

InputScope に対応した IME

  • Microsoft IME (Windows Vista以降)
  • Mozc / Google 日本語入力 1.11.x 以降 (TSF モードのみ)

HTML5 Forms の input 要素の type

  • number
  • email
  • tel
  • time (Firefox 23+ の場合のみ)
  • url

の組み合わせで,(結果として) IME がオフになる.これは IME が自主的に行っているもので,ブラウザ側から IME のオフを設定しているわけではない.この動作に関して意見がある場合,基本的には IME ベンダーへどうぞということになる.

謝辞

Mozilla Firefox への InputScope 対応パッチについて,Mozilla Japan の中野さんにレビュー等たいへんお世話になりました.この場をお借りしてお礼申し上げます.

余談 0

各ブラウザでの Forms の type と InputScope の対応については Mozc のデザインドキュメントでまとめておいた.詳細についてはそちらを参考にしてほしい.
https://code.google.com/p/mozc/wiki/InputScope#Scope

余談 1

Windows 8 の Immersive モードで,MS-IME 2012 は入力モードをカーソル周辺に表示するようになった.今後,自動モード変更が受け入れられていくためには,このようなモード表示は必須と考えられる.
f:id:NyaRuRu:20130707205612p:plain

余談 2

InputScope に応じて,IME は変換に関する挙動を最適化することができる.たとえば,InputScope が「サーチ」のときに名詞中心のサジェストを行う,といった最適化が考えられる.実際すでに MS-IME 2012 は InputScope が「サーチ」のときに,挙動を変えている.

余談 3

現在 W3C で (主にデスクトップ向けの) IME API が議論されている.その流れの中で Microsoft から inputmode という追加の属性が提案されている.
https://dvcs.w3.org/hg/ime-api/raw-file/tip/proposals/IMEProposal.html#inputmode-attribute
この属性を使うと,ひらがなモードやカタカナモードといった,より日本人になじみが深い入力モードを指定できるようになる.InputScope にはこういったモードが既に存在するため,将来的には「半角カタカナモード」が期待される入力フィールド,といったものが HTML5 で実現可能になる可能性がある.興味がある人が議論に参加して欲しい.

余談 4

Tablet PC の時代に InputScope が設計され,10 年以上たってようやく HTML と InputScope が結びついたわけであるが,ブラウザでの InputScope への取り組み自体は以前から存在する.
たとえば Google Summer of Code 2008 では,Mozilla に対して -moz-input-scope という拡張が試みられた.
https://wiki.mozilla.org/Community:SummerOfCode08:TSF

余談 5

Input 要素の type 指定だが,実際のところモバイル用途の方が需要は高い.理由として,ソフトウェアキーボードのレイアウトが Input 要素の typeによって変化すると便利であること,CJK以外の国でもソフトウェアキーボードが使用されること,が挙げられる.