UNIXでの日本語入力の仕組み

UNIXにおいては、日本語入力プログラムはPCと異なる発達をとげた。よく使われているプログラムとしては、Wnn(うんぬ)やCanna(かんな)という、WindowsやMacではあまりなじみがないものが挙げられる(Wnn、CannaともにWindows用がリリースされている)。そして、クライアント・サーバ方式をとっていることが、PC用の日本語入力プログラムにはない特徴だ。

UNIX環境では、変換サーバ/変換クライアント/各アプリケーションの3者がそれぞれバラバラに作られて、どれでも組み合わせられるわけではないけれど、特定の組み合わせしかだめなわけでもない、というちょっとややこしい事情がある註1。Windows では変換エンジンとユーザーインタフェース部は事実上一体で、またアプリケーションとのやり取りも統一されている(?)のでこのような問題は発生しない。一方で変換クライアントを切り替えてユーザーインタフェースの部分を好みに合わせて作り替えることはできない。

変換サーバ、変換クライアント、各アプリケーションの役割

変換サーバ、変換クライアント、各アプリケーションの役割は、次の通りだ。変換サーバーには変換エンジン部分と辞書がある。各ユーザーが共通のサーバーを利用するための仕組みを担っているのが、変換クライアント。また、各アプリケーションに日本語入力クライアントを組み込むスタイルとは別に入力サーバなどと呼ばれる、アプリケーションと変換サーバとの間を日本語入力を中継すること専門のアプリケーションもある。

これらには,歴史的な事情などもあってそれぞれに様々な役者(アプリケーション)がいてそれらを結ぶ関係(プロトコル)も複数ある(細かくわけるともっとあったりするがここでは省略)。

変換サーバ
変換クライアントから "かな" などを受取り、漢字に変換して返す役割を持つ(*Wnn*: jserver, Canna: cannaserver, など)。
変換クライアント
ユーザーの入力を受け,変換サーバと通信して漢字にしてアプリケーションに渡す役割.ユーザーインタフェースを受け持ち,使い勝手に大きな影響を持つ。Windows のシステムの場合は変換サーバと変換クライアントは通常セットで扱われてその違いを意識することはないが、UNIX システムでは区別されて扱われていることが多い。
各サーバー付属の専用のもの(Wnn の xwnmo, uum, VJE の vje など)もあれば、別に開発され複数種の変換サーバーに対応しているクライアント(Wnn/Canna/Sj3 対応の kinput2 など)もある。また,X11 環境で動くものもあれば,tty 上で動き X11 を必要としないもの(Wnn の uum, Canna の canuum など)もある。
アプリケーション
特に X11 上のソフトウェアの場合には日本語入力に対応するためには変換クライアントを使えるようになっていなければならない。アプリケーションによって対応している方式が異なり(変換クライアントと通信する方式が異なる)、また変換クライアントを内蔵しているものもある (emacs 内部で動作して変換サーバーと直接通信する「たまご」もそのような位置づけになるだろうし、ng-canna などの canna ライブラリ組込み型クライアントもある)。そのため、どの変換サーバーでも利用可能とは限らない。

変換サーバー <==> 変換クライアント間は基本的には各サーバー毎に独自のプロトコルを用いる。そのため、変換クライアントは、対応しているサーバーにしか利用できない。例外は「えせかんな」と呼ばれるプロトコル変換サーバーで、 Wnn や VJE サーバーと Canna クライアントの橋渡しを行うソフトウェアだ。

変換クライアント<==> 各アプリケーション の間は通常はXIM プロトコルを用います.その他 kinput2 プロトコルによるもの、X11 に依存しない tty ベースの FEP 型入力方式(uum など)、アプリケーション組込みクライアント(ng-canna など)、がある。

このあたりの相関図をまとめたものが、次の図だ(川口さん提供。クリックすると原寸になります)。変換サーバ、変換クライアント、通信プロトコル相関図

なぜ、クライアント・サーバー方式なのか

なぜ、UNIXの日本語入力でこのような方式がとられたのか。ひとつは、マルチユーザーによる共用やネットワーク越しでの利用を考えているからだ。PCがスタンドアローンで利用されることを前提としていたのに対し、UNIXは当初からマルチユーザーでの利用が可能になっていたし、ネットワークでの利用が意識されていた。日本語入力プログラムもそうした利用を意識して作られたのは当然だろう。

また、UNIXはアプリケーションによるキー入力や画面表示を統一的に扱うしくみをもっていない。少なくとも文字端末ベースの日本語入力とX Window Systemベースの日本語入力には異なるクライアントが必要になる。

文字端末ベースの場合は統一されたプロトコルが存在しないうえ、日本語入力プログラムがキー入力と画面表示を乗っ取る標準的な手段がないため、変換サーバーごとにシェルベースのクライアントを用意する必要があるし、それでは非力だと思うなら、アプリケーション側 でライブラリーを組み込んで変換サーバーを直接呼び出す必要がある。

X Window Systemでは、かつてはXsiなどいくつかのプロトコルが使われていた時期もあった。現在は、変換クライアントと(かな漢字変換を利用したい)アプリケーションとを結ぶ部分のプロトコルとしては、XIMで統一されている。変換クライアントと変換サーバー間は各変換システムの仕様にも深く依存しますので統一的なプロトコルは存在していない。

敢えて言うならcannaプロトコル(Cannaのクライアント<=>サーバー間のプロトコル)を利用するものがもっとも多く、ある変換サーバーを canna プロトコルに変換して、canna 対応のクライアントから利用できるようにするソフトすら存在するが、デファクトスタンダードというほどの存在ではない)。

X Window System(X11) に依存する XIM とは別にX11に依存しないIIIMFというのを策定する動きもある(http://www.openi18n.org/subgroups/im/IIIMF/)。これは、まだまだこれからの話だ。

なお、WindowsにはUNIXの変換サーバーと同じように関数呼び出しで変換操作を行うしくみが用意されているので、UNIXと同様に独自の変換クライアントを新たに作ることも可能なはずだ。しかし、どのIMEでも共通して使えるクライアントを作っても、それは現在ある標準提供のクライアントより非力になるわけだし、そうまでして新しいものを作るモチベーションはどこにもないのだろう。


このページは、川口銀河さんの記事news:akej3v$3o2$1@inb.m.ecl.ntt.co.jp(→Google)、news:alfsgt$e36$1@inb.m.ecl.ntt.co.jp(→Google)、太田純さんの記事news:akgba0$5fv$1@ns.src.ricoh.co.jp(→Google)を中心にまとめました。


作成日:2002年 9月 08日 (日) 更新日:2004年 5月 26日 (水)