みずぴー日記

人間の再起動ボタンはハワイのビーチにある

📈入力メソッドの魅力とつらさ

NGK2017Bで発表した。Misoca Advent Calendar 2017 - Qiitaの5日目でもある。

スライド

原稿

イントロ

今日は漢字入力がつらいという話をする。

f:id:mzp:20171204214611j:plain

このなかに入力メソッド、IMEFEPなどと呼ばれるソフトウェアを日常的に使っているひとはいますか? MS-IMEとかATOKとかGoogle日本語入力などが該当する。

おそらく、ほぼ全員が使っていると思う。

f:id:mzp:20171204214615j:plain

入力メソッドの特殊性

日常的に使っているが、入力メソッドはとても特殊なソフトウェアである。

  • すべてのキー入力を受け取る。 パスワード入力欄を含めてすべてのキー入力を取得できる。
  • アプリケーションと協調して変換候補ウインドウなどを表示はするが、メインウインドウのような固有のウインドウは持たない
  • (日本では)ほぼ全員の人が使っている

f:id:mzp:20171204214620j:plain

世界の入力方法

日本語以外の入力には入力メソッドをあまり使わない。例えば、英語の入力に入力メソッドが不要である。

f:id:mzp:20171204214624j:plain

英語以外にもロシア語用にキリル文字が入力できるキーボードもある。キリル文字とは ( ゚д゚) の口のことである。

f:id:mzp:20171204214629j:plain

ハングルの入力

韓国語でも入力メソッドが用いられているが、これも日本語入力とは異なる。

韓国語の表記に使われるハングルは、複数の字母の組み合わせで文字を構成している。 例えば아というハングルは、ㅇとㅏという2つの記号の組み合わせで構成されている。 このそれぞれの記号を文字の元になっているもの、字母と呼ぶ。

それぞれがDキーとKキーに対応しているので、DKと打つことで아が入力できる。

そのため日本語入力の際に使う「変換候補の表示」という動作はない。

f:id:mzp:20171204214633j:plain

漢字入力の特殊性

  • 発音記号を入力する
  • 候補を表示して、そこから入力する文字も選択する

という二段階の変換が必要な文字体系は漢字だけである。正確に言うと、macOSに標準でインストールされている入力メソッドでは、漢字入力だけが変換候補を表示してる。

ので、これは漢字を持つ日本語と中国語の入力で使われている機能である。

f:id:mzp:20171204214637j:plain

入力メソッドを持たない文字体系

一方ではUnicodeには196種類もの大量の文字体系が含まれている。そしてそれには入力方法を持たない文字もいくつかある。

f:id:mzp:20171204214642j:plain

例えば絵文字。

f:id:mzp:20171204214646j:plain

例えば楔形文字

f:id:mzp:20171204214652j:plain

例えばヒエログリフ

f:id:mzp:20171204214658j:plain

入力メソッドの魅力

これらの入力メソッドを作るのはとても魅力的だと思う。使うのは古代エジプトの神官だと思う。

f:id:mzp:20171204214702j:plain

InputMethodKit

macOSの入力メソッド作るためのライブラリはInputMethodKitという名前である。 Appleのライブラリは末尾にkitと付く。

これを使えばヒエログリフ入力メソッドを作れる。作るべきである。

f:id:mzp:20171204214706j:plain

資料不足

InputMethodKitの資料はあまりない。Qiitaで検索してもでてこない。

f:id:mzp:20171204214713j:plain

Appleのドキュメントも「No overview available」と書いてある。無である。 そのためヘッダファイルのコメントや公式サイトから消えたミラーのWebArchiveなどが参考になる。

f:id:mzp:20171204214719j:plain

利用者不足

ドキュメントが少ないのと関連するが使っている人もほとんどいない。 みんな使ってほしい。

f:id:mzp:20171204214723j:plain

動作しないメソッド

一部のメソッドがうまく動作しない。

変換候補を選択するためのメソッドをディスアセンブルしたものを示す。 アセンブリを読むの大変だがよく読むと、スタックにpushしたあとpopしているだけである。無である。

「なぜ???」と思いながらバグレポをしたら「既知のバグ(duplicated)」と返ってきた。直してほしい。

f:id:mzp:20171204214728j:plain

まとめ

まとめると以下のようになる。

  • 漢字入力は実は特殊
  • でもいろんな使い道がありそうだしInputMethodKitみんな使ったほうがよい
  • つらい

f:id:mzp:20171204214733j:plain

その他

https://github.com/mzp/EmojiIM でいろいろやっている。見てね。

f:id:mzp:20171204214737j:plain