Gecko勉強会 その2

Firefox OS 日本語 IME 開発状況
自己紹介


Twitter: @masap



職業: 組み込みプログラマ(主に Wi-Fi)
日本語 IME を直し始める

3
きっかけなど


きっかけとかモチベーションとか


日本語入力に問題があると聞いて






基本Wi-Fiばっかりいじっているので
日本語入力とか気にしたこともなかった

IME開発経験なし

目的


Google日本語入力を使って日本語入力ができるかを
調査

4
Keyboard API


Keyboard API





Firefox OS 1.3から導入。このAPIを使ってIMEを作る。
https://wiki.mozilla.org/WebAPI/KeboardIME

主な Keyboard API
メソッド

用途

setComposition

変換中文字列を下線付きで表示

endComposition

変換中文字列を確定

setSelectionRange

選択範囲を表示

sendKey

英数字等変換せず出力

5
キーボード関連の変更


Firefox OS 1.3はキーボード周りの大きい修正が2
つあった


Keyboard API (前述)



Third Party Keyboard


サードパーティーのキーボードをWebアプリケーションとして
追加できるフレームワーク

6
日本語はおいてけぼり


日本語はこれらの修正に取り残されている



日本語キーボードを有効にするだけで一苦労






ファイルをちょこっと変えて直そうとしてもcheckoutで元に戻
すコードが入っている
「日本語を使わせない!」という強い意図を感じる...

有効にしてみたものの日本語入力が一切できなく
なっている


既存バグについてはBugzillaに報告

7
キーボードが無い世界で


暫定キーボード


必要最低限の機能を持った
キーボードを用意する



このキーボードでGoogle
日本語入力を使った変換が
できるようにする

8
Google CGI API for Japanese Input

9
Google 日本語入力


Google CGI API for Japanese Input





Google日本語入力をWebから使用できる
http://www.google.co.jp/ime/cgiapi.html

JSONPですぐ使える


Firefoxブラウザでプロトタイプを作成して動作したので
Firefox OSで動かしてみる



あれ?エラーが出る



Certified/PrivilegedアプリはJSONPが使えない

10
TCPSocketを使う


JSONPの代替としてTCPSocketを使う



ひらがなを変換できない





TCPSocketのbinaryType: 'string'だとunicodeが化ける
binaryType: 'arraybuffer'にして自前 unicode 変換テーブ
ルで解決

「さてんるいこ」の変換に成功

11
TCPSocketの初期接続が遅い(1/3)


TCP接続の開始に最初だけ5秒掛かる




Wiresharkで見ると名前解決に5秒掛かっている
ローカルのルータのIPアドレス宛にDNS Queryを送信
5秒経っても応答が無いので外部のDNSサーバへDNS
Queryを送信

KEON

RTX3000

5秒

DNS Server

DNS Query
DNS Query

DNS Response


TCPSocketだけでなくブラウザからの検索でも再現

12
TCPSocketの初期接続が遅い(2/3)


なぜローカルのルータにDNS Queryを送信?




ルータからのDHCP ACKに「俺はDNSサーバです」と入ってい
るから

なぜDNS Responseを返せないのにDNSサーバを名乗
るの?


予想:YAMAHA はネットボランチDNSという独自DNSサービ
スを持っているので自分をDNSサーバとする必要があったの
では

13
TCPSocketの初期接続が遅い(3/3)


他はどうしているの?






Android 4.0.4で試したら再現せず。8.8.8.8をデフォルト
で使ってたわ...
Ubuntu 13.04の場合は既知のDNSサーバ全てに一度
にDNS Queryを投げているため問題にならない

対処方法は?




ユーザーランドからはgethostbyname()を呼ぶぐらいし
かできないのでカーネルをどうにかしないといけない
根深そうなので報告しといた。Bug 944377
14
日本語キーボードが壊れている件について

15
日本語キーボードが動かない(1/3)


Bugzillaに「日本語キーボード動かないんだけど」
と報告を上げる (Bug 933252)


その後MLに転載されたりしていろいろ返事が来る









「日本語キーボード動かない?そうだよ!だから disable にして
るんだ!」
(やはり意図的だったか...)
「日本語辞書削除しちゃたからそのせいじゃないかなあ。あ、
君直す?直してくれるんだったらやり方教えるよ!」
(ヤバい!一生担当にされそうなのでスルーしよう!) 辞書の問
題じゃないよ。入力自体ができないんだ。

とかやっているうちに直してくれる人が現れた。
16
日本語キーボードが動かない(2/3)


直ったと言っているので動作確認





おかしい... 治っているように見えない...
翌日試してみると動いた。
何で?
ホームの検索エリア→OK
ブラウザの検索エリア→NG
というオチ。これも報告した

17
日本語キーボードが動かない(3/3)


やっぱり直ってない






今度は
ホームの検索エリア→NG
ブラウザの検索エリア→OK
「あかさ」と入力すると
「ああかあかさ」と表示される
この状態のまま現在に至る

18
変換対象の文字列がわからない


変換対象がハイライトされない


右図のように色が付いて欲しい









以前は sendPendingSymbols という関数があって、「ここか
らここまでは青色」という指定ができた
setComposition にはそれが無いので色を変えて選択箇所を
明示することができない
setCompositionとsetSelectionRangeは同時には使えない

Bug 940986として報告したが返事がない
setCompositionには引数を追加して、ここまでは何色
といった指定を可能にすべき
19
簡単なパッチを送る (1/2)


簡単なパッチを送った (Bug 939776)


「大小」キーは濁点や半濁点にも使う
ので「小 ゛ ゜」にした

20
簡単なパッチを送る (2/2)


ツッコミが来た






「大小 ゛ ゜」にすべきでは?WNNとかはそう
それだけは阻止したいので反論して回避した
「大」は冗長ですし。iPhoneも「小 ゛ ゜」ですし

日本人開発者が居ない




議論は結局「まあ、ネイティブの人が言うんだからそうしましょ
う」ってことで収束した
つまりGaiaとFirefox OS UXチームには日本人が居ないorz

21
使えるようになった


下記手順で有効にする


gaiaディレクトリで下記コマンド実行
$ GAIA_KEYBOARD_LAYOUTS=en,jp-kanji make reset-gaia



日本語キーボードを有効に





Settings → Keyboards
Selecte keyboards
Add more keyboards
Japanese – Kanji にチェック

22
現状


言いたいことはたくさんあるものの


日本語入力が一切できない
という状況は改善できた



協力者募集


Bugzillaに報告したり
パッチを書いたり
手を動かせる協力者求む!

23
以上

24

Firefox OS 日本語 IME 開発状況