IDG ジャパンホーム   オンラインショッピング
Linuxworld logo
LinuxWorldとは 編集長より バックナンバー 定期購読
 
コマンド制覇への道
/etcナビゲーション
Linux用語集
フリーソフト辞典
Linuxインストールガイド
ショップ
ニュース&コラム
プレゼント
本誌連動コーナー
最新号のご案内
メール配信
変身!スーパーユーザー

第2回 分散入力メソッド「IIIMF」

Linuxでは、日本語などを入力するための仕組みとしてXIMを使うのが一般的だ。だが、XIMにはX Window Systemに依存しているという欠点がある。現在、Solaris上で利用されているIIIMFを使えば、そうしたXIMの問題が解決できる。
Architect/Sr. Staff Engineer, Sun Microsystems, Inc.
樋浦秀樹

XIMとは

 日本語などのアルファベット以外の文字を入力するには、入力された文字を変換する入力メソッド(Input Method:IM)が必要だ。
 XIMは、X Window System(以下、X)を使用するUNIX系のシステムで、現在標準的に利用されている入力メソッド機構である。
 XIMの設計が始まった1989年ごろはUNIXワークステーションの全盛期だったこともあり、XIMはクライアント側のX上でユーザーごとに動くシステムとしてデザインされた。そのため、XIMのデザインはXの基本構造にべったりと依存したかたちになっている。というのも、当時は、X以外の環境のことなど考慮する必要はなかったからだ。何を隠そう、XコンソーシアムでXIMを設計・開発した張本人は、ほかならぬ筆者であった。
 日本語化されたLinuxディストリビューションや商用UNIXを使っている方は、ログインすると「kinput2」とか「htt」(Solarisの場合)とかいうプロセスが自分のユーザーIDで動いているのを見たことがあるだろう。これらがXIMをつかさどるプロセスであり、ユーザーがログインするときにセッション・マネジャなどからこっそりと起動されている。

Xコンソーシアムの終焉

 XIMは、X11R5で初めて導入され、X11R6でプロトコルの標準化を含む大幅な改良がなされた。ただし、これで完成したというわけではなく、XIM開発チームの開発予定表にはたくさんの未完機能がリストアップされていた。開発チームが次のリリースに向けて更なる作業に取りかかっていた1996年のさなか、それは起こった。XコンソーシアムがOpenGroupに吸収されてしまったのである。結果、XIMプロジェクトは頓挫し、チーム・メンバーもちりぢりになってしまう。それでもXIMそのものは、それなりの完成度に達していたので、現在でも商用UNIXはもとよりLinuxディストリビューションなどで幅広く利用されている。
 筆者は、Xコンソーシアム崩壊によってプロジェクトが終了した後、その軌跡を振り返ってみて、XIMのインタフェースとプロトコルの設計時に、自分がいくつかの決定的なミスを犯していたことに気がついた。できることならもう一度やり直したかったのだが、プロジェクトはすでにない。その思いを胸にしまい、他のプロジェクトに忙殺されながら何年もの歳月が過ぎ去っていったある日、やり直しのチャンスが突然現実のものとなった。それは、筆者がちょうどJavaOSの開発に携わっていたときのことである。

XIMの限界とJavaOS

 ちまたでWebブラウザ上で動くJavaアプレットがブレイクし始めていたころ、既存のOS上のゲスト環境としてではなく、OSのカーネルから全部Javaで書き直そう、というプロジェクトがサン・マイクロシステムズで進行していた。これがJavaOSである。
 JavaOSは、ハードウェアとの橋渡しをする最小限のコードだけをCで作成し、カーネルの大部分からグラフィックス・システム、ウィンドウ・システム、TCP/IPのネットワーク・プロトコル・スタックに至るまで、すべてJavaで書き起こすという遠大なプロジェクトだった。
 JavaOSは、当時のキーワードの1つであったシン・クライアントと呼ばれる、ローカルにストレージを持たない軽量クライアント・システムへの搭載を想定したOSで、アプリケーションだけでなくOS自身もネットワーク・サーバから動的にロードするという設計になっていた。
 このネットワーク・サーバにはSolarisに特別なパッケージを追加したNetra-Jというシステムを使用する。JavaOSで利用可能なアプリケーションは、@100% Pure Javaで開発されJavaOS上で実行されるもの、AバックエンドのSolaris上で実行されるもの、Bサーバ/クライアント間で協調して動く通信型のもの、のいずれかになる。
 いずれにしても、JavaOS側ではJavaで作成されたプログラムしか動かない。そして、そのことがXIMの問題を浮き彫りにしたのである。
 Solaris上で動いているJava実行環境では、SolarisのXIMの助けを借りて日本語入力を処理していた。それは、JavaのGUIコンポーネント「AWT(Abstract Window Toolkit)」が内部でXを呼び出すように設計されていたからこそ可能な方法だった。ところが、JavaOSにはXがない。当然、これに依存しているXIMは使えないのだ。
 また、XIMはユーザーごとにプロセスを起動するという仕組みになっており、設計思想そのものが、シン・クライアントの入力メソッド機構にはそぐわなかった。新しい時代に向けてサーバ/クライアント型の入力メソッドのフレームワークを一から作り直す潮時だったのである。

そしてIIIMFへ

 IIIMFは、「Internet/Intranet Input Method Framework」の略であり、トリプル・アイ・エム(エフ)と発音する。XIMでの失敗を踏まえて設計されたIIIMFは、特定のウィンドウ・システムやOSへの依存を排した構造になっている。
 その基本思想は、入力メソッドをWebなどと同じインターネットやイントラネットでのサービスの1つとして位置づけるというもので、Xのようなデスクトップ環境さえ必要としない作りになっている。
 XIMとIIIMFの最大の違いは、XIMがログイン時にユーザーごとに起動される方式だったのに対し、IIIMFはシステム・デーモンとしてシステムのブート時に起動され、ネットワーク上に入力サービスを提供するという点だろう。入力サービスを享受するクライアント側インタフェースとしては、Java2、JavaOS用のIIIMJCF(IIIM Java Client Framework)に加え、XIMプロトコルをエミュレートするXBackendなどが開発されている。これらのIIIMFインタフェースの一覧を、表1に示した。なお、Solaris 8では、すでに従来のXIMは破棄されており、XIMを必要とするアプリケーションは、IIIMXCF(XIMの機能をIIIMF上で提供)を利用するようになっている
 プロトコルの軽量化もIIIMFの重要なポイントだ。XIMプロトコルは非常に重く、細い回線では使用に耐えなかったが、IIIMプロトコルはアナログ・モデム経由ですら使用可能なほど軽く作られている。このことは、Sun Rayシステムなどのシン・クライアントを大量にぶら下げたサーバ・システムで、レスポンスを改善するのに一役買っている。
表1:IIIMFの各種インタフェース

IIIMJCF(IIIM Java Client Framework)
Java2、JavaOS用インタフェース

XBackend
X用インタフェース(XIMプロトコル・エミュレート)

IIIMXCF(IIIM X Client Framework)
X用インタフェース(XIM API over IIIMプロトコル)

IIIMECF(IIIM Emacs Client Framework)
Emacs用インタフェース(Emacs Lispで開発)

Linux上のIIIMF

 サンは昨年、このIIIMFの全システムをオープン・ソース化した。現在ではその移植版が、Linux上でも使用可能になっている。オープン・ソース版IIIMFは、Linuxの標準化団体「Free Standards Group」のLinux国際化推進部門である「LI18NUX」でメンテナンスされており、http://www.li18nux.org/cvs/からダウンロードできる。
 また、このIIIMFを使用したATOKサーバをSolaris環境に提供しているジャストシステムは、そのLinux版とも言える「ATOK X for Linux」を商品化している。IIIMFベースのATOK X for Linuxはデスクトップ・システムの入力メソッドとしてだけでなく、サーバ・システムによる入力サービスとしても使用することができる。この点において、ATOK X for Linuxは他のIMとは一線を画していると言えるだろう。
 Linux上でのIIIMFの利用はまだ始まったばかりだが、今後、XIMからの移行が進むと思われる。
UP