skkserv 利用の手引き (Version 3.9 of May 28, 1994) ==================== 1. skkserv とは 2. skkserv のインストール法 3. skkserv の起動 4. SKK形式の辞書 5. その他 6. 謝辞 7. 補遺 (skkserv 起動後の辞書の再読み込み) 1. skkserv とは =============== skkserv は、Nemacs上で動作するかな漢字変換プログラム SKK -Simple Kana to Kanji conversion program のための辞書サーバです。 skkserv (サーバ)は、SKK/Nemacs (クライアント)とは独立に動作します。 ひとつのサーバは、複数のクライアントの要求を処理することができます。 サーバは、起動されると、最初に SKK形式の辞書を読みこみます。次に、無限 ループにはいり、クライアントからの要求を待ちます。サーバは、接続を要求 したクライアントごとに通信路を作り、以後、そのクライアントから文字列変 換の要求が起きる毎に、辞書を検索して、変換文字列を返します。クライアン トは、文字列変換要求以外に、サーバのバージョン番号要求や接続終了などの メッセージをサーバに送ります。 サーバとクライアントの間の通信には、BSD 系 UNIX のソケットを利用します。 System V 系 UNIX でも、BSD 系のネットワーク機能を取りこんでいるものは 動作することがあります。詳しくは、Makefile の記述を読んでください。 サーバとクライアントは、ネットワークで接続された異なる計算機上で動かすこ とができます。 2. skkserv のインストール方法 ============================= skkserv のインストールは、通常、SKK 本体と同時に Configure スクリプト を使って同時に行いますが、Configure を使わないで skkserv 単独でもイン ストールできます。 skkserv のインストールは、通常、スーパーユーザになって行います。しかし、 スーパーユーザになれない人でも、インストールすることができます。その場 合はやり方が少し異なります。 ○ スーパーユーザの権限を持つ人のインストール方法 (1) 自分の計算機の状況に応じて Makefile を編集します。 変更する可能性があるのは、以下の変数です。 COMPAT 計算機の OS に応じて選択します。BSD UNIX ならば、編集す る必要はありません。詳細は、Makefile を見てください。 CC 使用する C compiler (ディフォルトは gcc )です。 BINDIR skkserv がインストールされる directory です。 JISYODIR SKK 辞書がインストールされる directory です。 JISYO 使用される SKK 辞書です。辞書の種類については、SKK のマ ニュアルを読んでください。 (2) skkserv を作ります。 make (3) スーパーユーザになり、skkserv と辞書をインストールします。 make install これは、/etc/services と /etc/rc.local の2つのファイルに若干の行を追加 します。バックアップはそれぞれ /etc/services.org と /etc/rc.local.org というファイルになります。なお、ここで自動的に起動される add-services と add-rc.local という2つの shell script は、対話形式であり、質問に no と答えると、あとで人間が手で作業をすることになります。 (4) NIS(旧名YP)を使っている場合は、Master Server となっている計算機で、 スーパーユーザになり、add-services を行った後、 cd /var/yp または cd /etc/yp make services とします。 ○ スーパーユーザの権限を持たない人のインストール方法 (1) における編集で、 PRIVATE = -DPRIVATE とします。 (2) skkserv を作り、インストールします。 make make install (3) 自分の ~/.skk ファイルに以下の行を追加します。 (setq skk-portnum 1178) (4) SKK を使う前に、skkserv を走らせる計算機上で、自分で、 skkserv として、起動します。 (SKK よびだし時に、skkserv は自動的に起動されるようになっていますが、 必ずしも成功しません。安全のため、あらかじめ起動しておいてください。) 3. skkserv の起動 ================= skkserv の起動時のオプションで、辞書名の変更、ディバッグ・モードの指定 などができます。 skkserv はスーパーユーザが起動する必要はありません。 skkserv [-d] [-p nnnn] [jisho] -d ディバッグモードです。 -p nnnn 通信用のポート番号として nnnn を使います。 jisho jisho を辞書ファイルとして利用します。 オプションなしで起動すると、通常モード(ディバッグ・モードでない)で、 サーバのコンパイル時に指定した辞書とポートを利用します。skkserv は、サー バとなるべき子プロセスを作ったあと、ただちに終了します。エラーがあって も何のメッセージも出しません。 ディバッグ・モードで走らせると、skkserv はそのまま foreground で走り、 メッセージを出力します。キーボードから割りこみをかけることもできます。 4. SKK形式の辞書 ================ SKK形式の辞書の各行は、見出し語、1文字の空白、変換文字列からなる文字列 です。 見出し語は、空白と改行を含まない任意の文字列です。 変換文字列は、'/' (スラッシュ)と改行を含まない任意の文字列を、'/' で 区切って並べたものです。(最初と最後にも '/' があります。) なお、いずれも漢字コードは EUC です。 辞書の中で、各行は、見出し語を unsigned char と見なして、ソートされて いると仮定します。 なお、3.7 版以降は以下の形式の新形式辞書もサポートしています。 ;; okuri-ari entries. パ−ト1 ;; okuri-nasi entries. パ−ト2 パ−ト1は、送り仮名のある見出語が逆順にソートされています。 パ−ト2は、送り仮名のない見出し語が正順にソートされています。 また、3.7.1 版以降、;; ではじまる、上の2種類の形でない行は、注釈として 無視されます。 5. その他 ========= ○ skkserv が動作する環境 skkserv が動作するためには、BSD 系 UNIX のソケットが必要です。System V 系 UNIX でも、BSD 系と同じ仕様のソケットを持てば動くことがあります。 skkserv のテストは、 SunOS 4.0.3, 4.1.1 NEWS OS 4.1.1 Ultrix V4.1 の上で行いました。 ○ テスト方法 skkserv がうまく起動できない時は、Nemacs で、以下のものを順次評価してく ださい。ここで、"miporin" のところには、skkserv を動かしているホスト名 を書いてください。 (open-network-stream "skkservd" (current-buffer) "miporin" "skkserv") ;; start (if (fboundp 'set-process-kanji-code) (set-process-kanji-code (get-process "skkservd") 0)) (setq kanji-fileio-code 0) (process-send-string "skkservd" "1かんじ ") ;; conversion (process-send-string "skkservd" "0") ;; end conversion を行ったところで、バッファの最後に、 1/漢字/... が挿入されれば OK です。 ● 注意・限界・改良の余地 skkserv がディバッグモードでない時に、合法的に殺す手段はありません。 kill してください。 (古い版の skkserv では) ディバッグやテストの際に、skkserv を殺してすぐ に起動すると「ポートが使われている」という趣旨のエラーが起きます。この 場合は、少し待ってから、再度起動してください。また、skkserv を同じマシ ンで2つ以上起動することはできません。 ひとつのサーバが受けつけられるクライアントの数の上限は、関数 getdtablesize により決まります。もし、上限を越えた数のクライアントがコネクト要求をして きた時はサーバは異常終了します。 見出し語の最大長は、510バイトです。 3.3.2版以降、変換後の文字列の長さに制限はなくなりました。ただし、辞書に 極端に長い行があった時に何が起きるかは十分実験していません。 辞書検索は、「読み」の第1文字目による場合分けを行ったあとは、線型探索 です。現在の状況では、これで十分ですが、場合によっては、dbm/ndbm など、 探索方法を検討する必要があるでしょう。"simple" ではなくなりますが…。 6. 謝辞 ======= skkserv が存在するのは言うまでもなく、 東北大学電気通信研究所佐藤雅彦教授の SKK によるものです。 skkserv の改良コードを送っていただいた、 高橋 伸尚 YHP 木村 親弘 神戸日本電気ソフトウェア(株) 川口 貢司 株式会社PFU 丸川 一志 クボタコンピュータ(株) の皆さん(所属は当時)、および、skkserv に御意見をいただいた無数の利用 者の方々に感謝します。 7. 補遺 (1993/6/5, skkserv 起動後の辞書の再読み込み) ======== skkserv 起動後に skkserv の参照している辞書の内容を変更したい場合に、 単純に skkserv のプロセスを kill してしまうと、その時に同じ skkserv を 利用して skk を使っているすべてのユーザに悪影響があります。 そこで、skkserv を走らせたまま、辞書を再読みこみする方法を付加しました。 なお、辞書のファイル名を変更するときはできません。つまり、コンパイル時 または起動時に指定されたファイル名の位置に、新しい辞書を上書きする必要 があります。 1. 新しい辞書を skkserv の所定の場所に置いてください。 cp NEW-JISHO /usr/local/mule/etc/SKK-JISYO.L ここで第2引数は適当な文字列になおして使ってください。 2. skkserv のプロセス番号を求めます。 ps ax | grep skkserv 3. skkserv に辞書再読み込みを指定するシグナルを送ります。 kill -INT nnnn ここで、nnnn は 2. で求めた skkserv のプロセス番号とします。なお、 signal を送ることができるのはスーパーユーザのみ(個人で skkserv を 起動した場合は、スーパーユーザまたは起動した人のみ)です。 注意: a. 上記手順で 1 と 3 の間(ファイルの中身が書きかわったのに、まだ、 skkserv がそのことを知らないとき)では、skkserv は変な動作をすることが あります。特に、辞書のサイズを小さくしたときに、死んでしまうかもしれま せん。 b. 動作は、SparcStation-2/SunOS 4.1.1 上でのみテストしました。signal の取り扱いが異なるマシン上では動作しない可能性があります。