![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ||
![]() | ![]() | ![]() | ![]() | ![]() |
|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
以下は、Mac OS X 10.5.8 上の Xcode 3.1.4 で説明しています。作成しながら、解説を書くという形で進めていきますので、後で文章が修正されることもあるので気をつけてください。
さて、これから入力メソッドキットを利用した Cocoa ベースの入力メソッドを作成します。すでに KIM という、テキストサービスコンポーネント形式の入力メソッドがあるので、KIM2 という名前になっています。ただし、KIM の方はまだソースや解説はアップしていません。そのため、KIM2 が先になる形になります。この KIM は「Kamluck Input Method」の略で、「Kamluck」は、私の姓「神吉」を「Kam(神)+luck(吉)」という風に分解したものです。神林長平の「言壺」に出てくる Kamwood と同じような命名法です。
多くの人にとっては、日本語入力メソッドは十分満足がいくものだと思います。OS X 付属の「ことえり」を使っている人もいるでしょうし、「ATOK」などのサードパーティ製のものを使っている人もいるでしょう。多くの人にとっては、なぜ日本語入力メソッドを自作しなければならないか、という事自体が疑問かもしれません。
私の場合の動機としては、「独自キーボードが使いたい」「一意変換を効率良くしたい、それによって応答を速くしたい」という 2 点があげられます。
私が使っているキーボード配列は、オアシスの親指シフトを少し変更したものです。親指シフトキーボードではなく、通常のキーボードで小指シフトを使って、親指シフトと似た配列を使います。これは、旧 Mac OS 下で、「小指シフト」キーボードとして配布されていたものを基盤としていますが、句読点など一部のキーに関して自身が使いにくい部分を改変しています。
旧 OS のバージョン 7 の頃では、日本語入力に際して任意のキー配列が使えました。「キーボード」コントロールパネルは、システムにインストールされた日本語スクリプトのキーボードを表示し、そこから使いたいキーボードを選択すれば OK でした。もちろん、入力メソッドが任意のキーボードに対応している、というのが前提でしたが。しかし、OS 8 の頃から、「キーボード」コントロールパネルは、「かな」と「ローマ字」しか表示しなくなりました。私自身のキー配列のリソース設定がまずかったのかもしれませんが、ことえりも ATOK も、この 2 つのキー配列以外は受けつけてくれませんでした。唯一(他にもあったのかもしれませんが)Mac-VJE というソフトだけは、「その他のキーボード」という設定で、この 2 つのキー配列以外のキーボードリソースを受けつけてくれました。しかし、それを利用するために、OS 7.5 の「キーボード」コントロールパネルを、OS 8 や 9 にコピーして、それを起動することでキー配列を変更しなければなりませんでした(これが動作した、というのが旧 Mac OS のなんともいえない「いいかげんさ」ですが)。この入力メソッドは、販売中止になってしまいましたが、ありがたいことに PPC 対応のアップデータがダウンロードでき、そのおかげで OS 9 まで、これを使用して、その他のキー配列を使うことができました。
Mac OS X になって、Mac-VJE は再び発売されましたが、それは上記 2 つのキー配列だけをサポートするものになっていました。日本の社会の他のいくつかの局面と同じように、多数だけが大事にされる、という方向へと進んでいったわけです。「民主主義」という概念が、それとはかけ離れた「多数決」という無意味なたわごとに変容していき、10 個の原則すべてを理解している人も少ないまま「最大多数の幸福」と同列に扱われるべき「少数派の尊重」がかえりみられないことが多い現状では、仕方ないことなのかもしれません。どのような理由があったにせよ、日本語入力メソッドは選択肢を増やす方向ではなく、減らす方向へと進化していきました。プログラマとしての観点からいうと、このような日本語入力メソッドの「進化」はかなしいことです。入力の可能性を制限する、ということは、たしかに安定したコード作成を可能にしますが、それは良く言って「転進」であり、実質的には「退却」に近い気がします。
キーボード以外でも、通常の日本語入力と外れたところがあります。それは、一意変換です。この原型を最初に考えたのは、20年以上前です。80 年代半ばの MS-DOS の頃です。
その頃より少し前になりますが、私はフリーライターをしていました。週刊プレイボーイだとか、週刊誌や月刊誌で記事を書いたりしていました。そのため、文章を書く、ということについてある程度こだわりがあったわけです。MS-DOS 上での、漢字かな変換による入力を体験したのですが、これは全く満足いくものではありませんでした。まず、変換の候補を選択する局面なのですが、通常、原稿用紙の上に手で書いてる場合、漢字はそのまま何も考えずに書き記されていきます。しかし、漢字かな変換では、入力時に「候補」を選択するために、そこで思考の流れが一時中止されるという問題があります。これは、文章のリズムを重視する私にとっては、耐えがたい問題でした。
また、変換にともなう入力の遅れも問題でした。当時、私は 1 時間に原稿用紙 10 枚のペースで文章を書いていました。これは変換確定済の状態で 4000 字入力といえます。慣れないキー入力もともなって、私にとってコンピューター上での日本語入力は、速度という点からは何のメリットもなかったわけです。
その頃に考えた解決策は、キー入力と同時に漢字が入力されるという形でした。この時に考えたのが、キーボードが漢字の「へん」や「つくり」に対応していて、それを組み合わせて漢字を入力するというものでした。結局、これはアイデアだけに止まり、実際にそれを実装することはありませんでした。
やがて、上記の「小指シフト」を使い始めた後で、再びこれについて考えました。当時は、とにかく日本語入力が自分にとって「考えなくても」入力できるような状態であってほしい、と思っていて、キー配列はある程度満足できる状態になったので、その次の漢字入力に対して再び考えるようになったのです。
その時に思いついたのが、通常使う漢字は限られた範囲のものでしかないので、ほとんどが「あ」〜「ん」の 2 つの組み合わせて済んでしまうのではないか、ということです。粗っぽく考えて 50 字とすれば、50 × 50 で 2500 字がカバーできます。たとえば、「きと」(きょうと)で「京」が入力され、「みこ」(みやこ)で「都」が入力されるように、一意的(ユニーク)な読みを漢字に割り当てることで、2 文字のひらがなを漢字に変換することができるだろう、というものでした。これは、既存の入力メソッドでも、オプションの辞書を利用すれば実現可能です。さっそく、「一」〜「九」の漢数字や、「北」などの方位や、単純な漢字で試してみました。すると、かなり楽に漢字が入力できます。こうして、「一意読み」(ユニーク読み)がだんだんと拡大していき、やがて千近い漢字がこの「読み」によって入力できるようになりました。
この入力方法の利点は、候補を選択しなくて済む点です。たとえば、原稿を入力している時なら、画面を見る必要は一切ありません。特定のかなの組み合わせが特定の漢字に変換されるため、実際にどういう漢字が入力されているかは明らかです。そのため、画面を見て、入力を確認する必要はまったくありません。また、候補を選択することで、思考が中断されることもありません。2 つのかなの新しい「読み」を覚える、という負担はありますが、慣れてくれば、スムーズに入力可能です。そのため、変換して入力している、という意識自体がなくなり、漢字を直接入力しているのに近い状態になります。
この入力方法を実行して、結果として、変換確定済みの文字数で 1 時間 6000 字ほど入力できるようになりました。速い人から見れば、たいした事がないかもしれませんが、私にとっては、この入力方法なしには実現できない速さだったと思います。
以上を踏まえたうえで、この入力メソッドに必要な機能を考えてみます。
まず、キーボードですが、OS X では XML 形式のキーボード記述が可能です。これを利用して独自キーボード配列を作ることができます。これを使う場合、濁点等の入力は、欧米語の付加記号がついた文字の入力と同様なデッドキーを使った形で実現することも可能です。これについても調べてみることにします。
つぎに入力メソッドですが、通常の変換を「一意変換」で行うようにします。これは、単にかな 2 文字を漢字に変換するだけですので、文法を解析したりなどという時間のかかる解析は一切必要ありません。そのため、入力して確定するまでのレスポンスを大幅に改善できるものと考えられます。
「一意読み」が設定されていない漢字はどうすればいいでしょうか。OS X には「ことえり」が付属していますが、これはシステムにある日本語解析エンジンを使っています。この解析エンジンは他プログラムからも利用可能です。通常とは逆に、空白キーで一意変換、オプション・空白キーで通常の漢字かな変換機能を使うようにします。
よって変換機能は、「一意変換」を行う部分と、システムの日本語解析機能を利用して「漢字かな変換」を行う部分の 2 つに分かれることになります。また、ひらがなからカタカナへ変換したり、全角と半角を変換する機能も必要でしょう。
モードについてですが、とりあえず「ひらがな」「カタカナ」の 2 つのモードが考えられます。英数については、私は以前から Dovrak 配列を使用していて、キャプスロックで日本語と英数を切り替える形で使っていました。全角英数は日本語入力時のキャップスロック外しで、半角英数は Dovrak 配列に切り替えて入力という形です。ここでも、全角英数だけに対応してもいいのですが、半角英数も入れられると楽なので、半角英数もサポートすることにします。そうすると、「ひらがな全角英数」「ひらがな半角英数」「カタカナ全角英数」「カタカナ半角英数」の 4 つのモードが考えられます。半角カナについては、最近では使う機会がほとんどなくなったため、モードとしてはサポートしないことにします。上記の半角変換を使って入力するものとします。
最低限これだけの機能があれば、私の入力メソッドとしては、とりあえず使用できるものになります。これは、市販を目標としたプログラムではないため、とりあえず上記の基本機能だけを実装してみることにします。(以下、次ファイルへと続く。)
![]() | ![]() |
![]() |
管理人:神吉 秀典 E-mail: