📘 #技術書典 の本に書かなかった話
何度か書いているが技術書典 4のい15で入力メソッドについて解説した本を頒布する。
この本では、話題が脇道にそれるのを避けるために、いくつかの話題を排除した。せっかくなのでここに記録しておく。 ただ、いくつか根拠があやふやのものもあるので注意してほしい。
アイヌ語の入力メソッド
アイヌ語はもともと文字を持っていなかったが、カナ表記を用いた表記方法が存在する。 そのためにコㇿポックㇽのㇿやㇽといった小書きカナが存在する。他にもラテン文字による転写もあるが、ここでは扱わない。
この小書きカナを入力するための入力メソッドがアイヌ語入力メソッドである。
カタカナを入力するという点では日本語入力と共通しているが、実装は共通化されておらず、漢字入力の機能もない。扱う言語もjaではなくainとして登録されており、別ものである。

入力メソッドと教育
入力メソッドと教育
日本語入力にローマ字入力とかな入力があるように、中国入力にも拼音入力と注音入力といった複数の入力方法がある。
日本語入力ではローマ字入力の利用が主流だが、中国では地域によって違う。 台湾では注音入力、中国本土では拼音入力が主に用いられている。これは教育の違いに由来するものらしい。
文字を書くというのは教育と深い関係があることが再認識できて興味深い。
中国語ですが、台湾では注音が、香港では速成がメジャーだと聞きます。どちらも繁体字ですが。中国は五筆がすたれつつあり拼音の人がほとんどのようです。
— ちくら (@schikura) 2017年10月22日
中国は小学校教育から漢字の発音を拼音で表記し、台湾では注音で表記するので、そのまま入力にも使う感じですね。注音は日本でいうかなに当たるものなので、日本ではかな入力がメジャーになりそうなものですが、ローマ字が一般的になりましたね。
— ちくら (@schikura) 2017年10月22日
入力メソッドと信仰
国際SILは非営利のキリスト教信仰に基づく少数言語のための組織である。(とWikipediaに書いてあった)
国際SILはKeymanという入力メソッドをリリースしている。 これは次のような特徴を持つ。
おそらくありとあらゆる環境で、すべての人が母語を入力できるようにするのが目標なのだろう。
国際SILの目的のひとつは「少数言語の発展を援助する」なので、このために開発を続けているのだろう。自らの信じることのためにひたすら入力メソッドを開発する行為、これはまさしく信仰である。
漢字とは何か
漢字は古代中国で誕生したのち、日本、韓国、ベトナムといった国々に伝来した。
その後、その国の事情にあわせていくつかの文字が追加・転用された。例えば、峠・畑・辻といった日本にのみ存在する国字と呼ばれる文字も存在している。
同様に、現代中国、韓国、ベトナムには他の国にない漢字を元にした文字が存在している。
- 簡体字(Han)。本当に国字と呼ばれているかは調べきれていない。 現代の中国語表記に用いられるやつ。
- 和製漢字(Kanji)。日本で作られた漢字。畑とかが有名だと思う。書籍によって日本漢字、国字などと呼ばれていて、どれが正式がよくわからない。
- ハンチャ(Hang)。韓国で使われる漢字(朝鮮における漢字)。書籍によって朝鮮だったり韓国だったりする。
- チュノム(Chunom)・ハンノム(HanNom)。ベトナムで用いられる文字。 元々の漢字とあわせて使う場合はハンノムになる。
このような状況のため「漢字」と言った際に、どの範囲を指すか不明瞭である。
すべての総称として「漢字」を使う場合もあれば、ベトナム語のように中国由来の文字のチュハン、漢字を応用して作った文字をチュノムというように区別する場合もある。
「漢字と、漢字から派生した文字」という表現もできなくはないが、そうなるとひらがな・カタカナも含まれてしまう。 これは一般には適切ではない。
Unicodeではこのような「漢字」はCJK unified ideographsとなっており「中国、日本、韓国で用いられる表意文字」とされており、厳密な定義を避けてるように見えて興味深い。
中国語の入力メソッド
中国語の入力方法は多数存在する。 macOSに標準搭載されているものだけでも5種類存在する。

これに加えて、中国語の文字体系も1つではなく、簡体字と繁体字がある。
これら多数の入力方式を実現するために、中国語入力は以下のような仕組みになっている。
- 拼音入力、注音入力といった入力方式の違いは、入力モードとして実装する
- 簡体字、繁体字は別の入力メソッドとして実装する
- 簡体字と繁体字の共通部分は内部的なフレームワーク(動的リンクライブラリ)として抽出する
これは他の入力メソッドには見られない仕組みなのでおもしろい。
設定画面のキーボードレイアウト表示
入力ソースの設定画面にはキーボードレイアウトが表示する領域がある。奇妙なことに日本語入力はローマ字入力がかな入力かによって表示がかわる。
入力メソッドとキーボードレイアウトの対応は、システム環境設定の設定ペイン*1にハードコードされている。
000000000000a81b pushq %rbp 000000000000a81c movq %rsp, %rbp 000000000000a81f subq $0x130, %rsp 000000000000a826 movq 0xa823(%rip), %rax ## literal pool symbol address: ___stack_chk_guard 000000000000a82d movq (%rax), %rax 000000000000a830 movq %rax, -0x8(%rbp) 000000000000a834 leaq 0xc125(%rip), %rax ## Objc cfstring ref: @"com.apple.inputmethod.SCIM.WBX" 000000000000a83b movq %rax, %xmm0 000000000000a840 leaq 0xbf59(%rip), %rax ## Objc cfstring ref: @"com.apple.inputmethod.SCIM.WBH" 000000000000a847 movq %rax, %xmm1 000000000000a84c punpcklqdq %xmm0, %xmm1 000000000000a850 leaq -0x130(%rbp), %rcx 000000000000a857 movdqa %xmm1, (%rcx) 000000000000a85b leaq 0xc11e(%rip), %rax ## Objc cfstring ref: @"com.apple.keylayout.WubixingKeyboard" 000000000000a862 movq %rax, %xmm1 000000000000a867 leaq 0xc0d2(%rip), %rax ## Objc cfstring ref: @"com.apple.keylayout.WubihuaKeyboard" 000000000000a86e movq %rax, %xmm0 000000000000a873 movdqa %xmm0, %xmm2 000000000000a877 punpcklqdq %xmm1, %xmm2 000000000000a87b leaq -0xa0(%rbp), %rdx 000000000000a882 movdqa %xmm2, (%rdx)
そのためこの機能は、外部の入力メソッドからは利用できない。この話はInputMethodKitの非公開機能にも書いし、Radar済みである。
入力モードの使い方
「入力モード」の使い方は言語によって違う。
ベトナム語入力ではTelex,VNIといった入力方式を切り替える。 これは日本語入力で言うところのローマ字入力、かな入力といった違いに相当する。
一方、日本語では「ひらがな」「カタカナ」といった文字の種類の違いを選択する。
なぜこの違いが生じたのかは分からない。 たぶん歴史的なものだろう。
絵文字の可能性
中国語入力・日本語入力が特殊な位置付けになっているのは、漢字の種類が膨大であることが原因の1つである。 Unicodeに収録された文字体系を見ても1万種類を越える文字を持つ言語は稀である。
ただし絵文字は漢字に匹敵する文字数を持つ可能性がある。 現時点で1000文字を越えており、今後も増える可能性がある。さらにSkin toneといった修飾子によって、バリエーションも増やせる。
そのため、絵文字の文字数が増えるにしたがい、入力メソッドのような仕組みが一般化していく可能性がある。
絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama|note に類似した話だと思う。
*1:/System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/IntlKeyboard.prefPane