僕は、日本語入力システム (IME) として、SKKIMEを使っている。これは UNIX 系の環境下で、この十数年間ずっと SKK を使ってきたから、というのもあるのだけど、世間で「いや、実はずっと SKK を使っていまして」と言うと、まるでガラパゴス島で進化に乗り遅れた生物でも観るかのような視線を向けられるのが、もうどうにも厭になってきている。だからといって、SKK を使わない生活など僕には考えられないわけで、そういう「自分達は進化の王道を行く存在だ」という故なき(暴力的な)確信に対して、ここで改めて物申そうと思うわけだ。
世間で最もユーザの多いパソコン用 OS というのは、おそらく Microsoft Windows だろうと思う。これは別に Windows が優れているからではなく、まるで辞書に載っているような de facto standard の一例であるに過ぎない。僕の場合も、普段は Linux 上でほとんどの作業をしているけれど、Steinberg Cubase を使うときには、Microsoft Windows 上で作業をしている。このソフトは音楽制作に使われる、いわゆる DAW だけど、僕の場合は何から何まで自分一人でしているので、このソフトを立ち上げながら詞を書いたりする場合もある。それに、世間のほとんどの方が体験されたことがあると思うけれど、Windows 上でないとできない作業を(当然のことのように)要求されるときというのがあって、10年位前は、仮想環境上で Windows NT 4 を動かしていたのだけど、今は音楽制作用に使っているデュアルブートの Windows 環境上で、そういうことをしているわけだ。こういう風にパソコンを使われる方が、おそらく世間でもかなりの割合を占めているのではないかと思う。
そういう方々は、日本語入力をどのように行っているのだろうか。おそらくは Microsoft IME を使っていたり、Google 日本語入力を使っていたり、あるいは ATOK を使っていたりするのだろうと思う。まあ皆さん、日本人として日本語を書く上ではどなたも一家言あって、それに準拠したかたちで日本語入力システムを選択されているのだろうと思う。
僕が初めてコンピュータ上で日本語を書くようになったのは大学に入ってからだけど、あの頃、日本語変換システムというのは無料で入手することがほぼ不可能だった。当時は、何やら怪しげな手段で入手した ATOK 6 を日本語入力に使用していたように記憶している。あの頃の貧乏大学生は、ベントラベントラ……と唱えると、どこからともなく5インチフロッピーディスクが現れて、その中には VZ Editor と ATOK 6 、それに Ngraph が入っていて、これで学生実験のレポートを書いたりしていたのだった。当然、ハードは NEC PC98 である。
この頃、懸賞論文に応募したり、毎週行われる学生実験のレポートを書いたり、と、とにかく日本語を大量に書く日常だった。しかし、しばらくの間、僕はパーカーの万年筆と原稿用紙でその作業を行っていた。ひもじい思いをして買ったパソコンがあるにも関わらず、である。それは、パソコンで日本語を書くことに対する拭い難い違和感があったからだ。
たとえば、僕は「あらわれる」を「現れる」、「あらわす」を「表す」と書く。しかし、パソコンの日本語変換では「現われる」「表わす」という変換候補が必ず出てくる。世間では、それらは一応誤記ではないということになっているけれど、僕の使う日本語において、それらの送り仮名はありえないものである。
また、「むかい」というのは「向かい」と書くことも「向い」と書くこともある。電話で「そちらへむかいます」などと言うときは「向かい」を使うし、「むかいの家の○○さんが」と言うときには「向い」を使う。これも、世間では混同されることがままあるのだけれど、僕の日本語のローカル・ルールでは、これらは使い分けられなければならない。しかし、パソコンの日本語変換では、このような表現の機微を反映した変換はなされなかった(最近の ATOK を使う機会がないので今どうなのかは知らないけれど)。
この問題に関して、国ではちゃんと内閣告示を出している:『送り仮名の付け方 内閣告示第二号』というのがそれなのだけど、これを見ると、
許容 次の語は,( )の中に示すように,活用語尾の前の音節から送ることができる。
表す(表わす) 著す(著わす) 現れる(現われる) 行う(行なう) 断る(断わる) 賜る(賜わる)
ここにも書かれているけれど、「表わす」のような書き方は、動詞の活用語尾の前から仮名で表記している。ここに僕は強い違和感を感ずるので、「表す」と書くわけだけど、「表わす」でも間違いではない。だから、ジャストシステムがおかしなシステムを作っていた、というわけでは、決してない。
しかし、だ。言葉というのは、自我にある意味直結したものなわけで、それを表出するときに、こういう違和感を感じるのは、これは些細なようでいて、実は非常に大きなストレスを生む。だからこそ、僕は大学の2、3年まで、レポートは紙に万年筆で書いていた。自分の字が綺麗ではない、というコンプレックスを抱えていたにもかかわらず、だ。
大学の学部生活も後半になってくると、さすがに電子化を避けて通ることができず、僕はぶつぶつ言いながら VZ Editor と ATOK 6 で日本語を書くようになった。しかし、UNIX 系 OS の上で仕事に関わる作業をするようになったとき、このストレスが頂点に達した。当時、UNIX 系 OS においては、サーバー・クライアント型の日本語変換エンジンである Canna(現在はフリーウェア化されて canna.sorceforge.jp で公開されている)が使われていたのだけど、この Canna の日本語変換が僕にはしっくりこなかった。大学3年から使い出した NeXT には……たしか VJE-γ だったと思うけれど、商用の日本語入力システムが入っていたけれど、これもどうもしっくりこないし、その上に重かった。
その頃、僕は GNU Emacs を使うようになっていたのだけど、Emacs 上で動く日本語変換システムに SKK というのがある、という話は聞いていた。しかし、周囲に使っている人がおらず、また当時の日本語入力環境を劇的に変える勇気もなかったので、手を出せずにいた。しかし、周囲に SKK 関連の開発に従事している人物がたまたまいて、彼の影響でようやく SKK に手を出したわけだ。これから説明する問題に関して、SKK の示したソリューションは実に秀逸なものだったので、今に至るまで僕は SKK を使い続けている。
日本語変換というのは、実はかなり複雑な作業をしている。既存の日本語入力システム(以下 IME と称す)の場合、多くの人はローマ字で、日本語の文字列を入力するわけだが、まずローマ字を平仮名の文字列に変換し、その文字列に対して「どこが漢字でどこが仮名か」というのを解析する。このような処理を形態素解析と言うのだが、たとえば、
私はカモメ、とテレシコワは言った。
という文章を例にして考えてみよう。最初に "watashiha" と入力すると、IME は "watashi" まで仮名で変換したところで、これが「私」という辞書項目に一致することを見出す。すると、"watashi" の後にくるのは送り仮名である可能性が高いので、"watashiha" →「私は」と変換しかけて、これでいいですか、と確認を取る。オーケーなら次に進むわけだが、ひょっとすると入力者は、
私歯が痛いんです、とテレシコワは言った。
と入力したいのかもしれない。そういうときは、変換範囲をユーザに調節してもらって、「わたし」までで漢字に変換し、「は」も改めてユーザの選択で「歯」に変換してもらう。このように、どこからどこまでが漢字で、どの部分が送り仮名なのか、ということを、文章を「分ち書き(わかちがき)」してはっきりさせて、漢字に変換したり、しなかったりする、というのが、IME のやっていることなのである。
実は、この形態素解析というのはかなり難しい。具体的には、言葉を辞書で置き換え、その間をつなぐ送り仮名を日本語の文法に沿って推測する、ということをするわけだけど、日本語の文法というのは決して一意的なものではない。先の文科省の文書などを見ても、ある単語の「漢字 + 送り仮名」の組み合わせにいくつかのバリエーションを認めているのである。たとえば google 日本語入力は、検索データベースを巨大な辞書とみなして、このバリエーションの数をカウントし、使われている数(実際にはこれに加えて、google が発展したキーでもある、情報の確かさという概念が加わるのだろうが)の多い順に候補を表示する、ということを行っている。しかし、そのような膨大な日本語の言い回しのバリエーションのデータベースというものはもともと存在していなかったので、このような形態素解析をどう行うか、が、日本語入力のキーテクノロジーだったわけだ。
このような形態素解析の問題が、僕が先に書いた「違和感」の正体に他ならない。最初のうちはユーザ辞書を一所懸命鍛えるわけだけど、使い方によって分ち書きのパターンが変わるような言葉では、ユーザ辞書を鍛えるだけではどうにもならない。だから僕は、エディタで日本語を書くたびにイライライライラさせられていたわけだ。
では SKK はどうしているのか。これは極めて明解な方針に則っている。SKK は、形態素解析を行わないのだ。SKK は、文字列の入力時に、入力者が分ち書きをする。だから、その部分で IME の判断ミスによってイライラさせられることがないのだ。
たとえば、先の例で SKK を使用する場合、どのように入力するかを示す。まず、「私」を表す文字列の先頭を、そこが変換対象であることを示すために shift キーを用いて "Watashi" と入力する。W を入力したとき、文字列の「わ」の前には変換始点を示す"▽"がつき「▽わたし」のように表示される。ここまで入力したところでスペースキーを押すと、「わたし」に対応する変換対象が出てくる。「私」が最初に出てこないときは、スペースキーを連打して選択する。
ここで、既存の IME では「変換確定」の操作を行う必要があるわけだが、SKK は、特殊な場合を除いて、わざわざこの「変換確定」操作を行う必要がない。変換対象を選択して「私」が出てきたら、そのまま後の「は」を "ha" と入力することで「私」は確定される。万が一、明示的に確定したいような場合が出てきたら、CTRL-j を入力すると確定される。
そして「カモメ」だが、q キーを押すと平仮名/片仮名の切り替えができるので、"qkamomeq" と入力すれば「カモメ」と入力される。既存の IME っぽく変換したいなら、変換対象にしておいてから後で q キーで片仮名に変換することもできる。その場合には ""Kamomeq" と入力すれば良い。つまり、先の例を入力するためには、
Watashi (space) haqkamomeq、toqtereshikowaqhaITta (space)。
もしくは、
Watashi (space) haKamomeq、toTereshikowaqhaITta (space)。
と入力すればいい。後の例ならば、たとえば、
Watashi (space) Ha (space) gaItaI (space) ndesu、toTereshikowaqhaITta (space)。
と入力すればいい。
このように、変換対象を入力者が明示的にシステムに対して示すため、SKK の行う仕事は、入力モード(平仮名、片仮名、英字、全角英字)の切り替えとローマ字変換、そして指定された単語に対する辞書検索、という、非常にシンプルなものになる。だから SKK のシステムは、現在のかなり肥大化したアーカイブにおいてもせいぜい 3M バイト程度のファイルで構成できてしまうし、辞書は、変換対象文字列と変換後の文字列の羅列に限りなく近いテキストファイルで用が足り、ユーザ辞書にユーザがよく使う変換パターンが蓄積されると、変換でスペースキーを押す頻度はかなり少なくなる。こんな調子で、何から何までいいことづくめなのである。あえて欠点を挙げるならば、シフトキーを多用するので、左手の小指が疲れること位である。
もともとの SKK は Emacs 上で動かすことだけを考えて作られていて、Emacs が持っている Lisp インタープリタで動作するように Lisp で書かれている。しかし、UNIX 系の IME (XIM) として使えるように、skkinput というソフトが阪本祟氏によって開発され、一時期はかなりこれが流行っていた。現在は SCIM や uim、iBus などに、SKK の入力メソッドが実装されているので、これを使えば比較的簡単に SKK 方式での入力を行うことができる。
で……実は、先の阪本祟氏は、Windows 用の SKK を制作・公開されている。これが問題の SKKIME である。実は僕は、これを使いたいのに使えない、という状態が何年も続いていた。Microsoft Visual C++ のランタイムコンポーネントの不整合によるもののようだったのだが、阪本氏が指定されている再頒布可能パッケージを入れても、変換に妙に時間がかかったり、ローマ字変換がうまくいかない、等の問題に悩まされていた。
ところが、先日、OS の入れ替えをしたら、この問題があっさり解消されてしまったのである。僕以外にもこの問題に悩まされていた人がいたのかどうかは知らないが、阪本氏がランタイムコンポーネントを static link してくれたおかげらしい。これで、自分も何の問題もなく使えるし、他人にも大手を振って薦めることができる、というものだ。ということで、次回以降、SKKIME を Windows 上で利用する方法を示していこうと思う。