Ubuntu Weekly Recipe

第175回 SKKで快適な日本語入力を体験しよう

この記事を読むのに必要な時間:およそ 3 分

辞書サーバを利用する

dbskkd-cdb

ddskkのインストールの項で述べたように,ddskkはデフォルトで辞書サーバを使用するように設定されており,辞書サーバ用にcdb形式に変換されたskkdic-cdbを共有の辞書として利用しています。辞書サーバとフロントエンドはskkservというプロトコルで通信を行ない,入力文字列から変換結果を受け取れるようになっています。

IBus-SKKではskkdicに含まれる/usr/share/skk/SKK-JISYO.Lを共有の辞書として使用していますが,辞書サーバを使用することも可能です。

まずIBusの "設定" -> "一般" から "言語パネルの表示" を "アクティブであるとき" に設定します。これでIBusを起動するとデスクトップ上に言語パネルが表示されるようになりますので,パネル上の "SKKの設定" ボタンをクリックします。IBus-SKKの設定を開いたら,"辞書" タブにある "SKKサーバを使う" にチェックを入れてください。ポートはデフォルトで1178が指定されていますが,特に変更する必要はありません。

skkservはデフォルトでTCP:1178を使用し,これは/etc/servicesからも確認できます。TCP:1178への接続はinetdが待ち受けており,サーバである/usr/sbin/dbskkd-cdbはinetd経由でキックされます。これは/etc/inetd.confで確認ができます。

これでddskkと同じ辞書サーバをIBus-SKKからも使用することが可能になりました。

図6 IBus-SKKからskkservを利用する

図6 IBus-SKKからskkservを利用する

ポートとサービスの対応を確認する

$ grep 1178 /etc/services
skkserv		1178/tcp

inetdの設定を確認する

$ sudo netstat -plt
(...略...)
tcp        0      0 *:skkserv               *:*                     LISTEN      1161/inetd

$ cat /etc/inetd.conf
(...略...)
skkserv		stream	tcp	nowait	nobody	/usr/sbin/tcpd	/usr/sbin/dbskkd-cdb

yaskkserv

ddskkやibus-skkは,バックエンドの辞書サーバを選びません。辞書サーバには複数の実装がありますが,その中からdbskkd-cdbを敢えて選ぶ理由はそろそろなくなりそうです。なぜなら現在のUbuntuパッケージには含まれていないものの,ddskkはcdb形式の辞書ファイルを,サーバを経由せずに検索することが可能だからです。ですので,どうせなら別実装の辞書サーバを使ってみることにしましょう。Ubuntuにはyaskkservという辞書サーバのパッケージが用意されています。

yaskkservのインストール

$ sudo apt-get install yaskkserv (※4)

yaskkserはインストール時に,システムにインストールされているSKK辞書を変換し,/usr/share/yaskkserv以下に取りこみます※5)⁠しかし,デフォルトではSKK-JISYO.L.yaskkservのみしか使用されません。他の辞書を同時に使用したい場合は,/etc/default/yaskkservを編集し,使用する辞書を列挙してください。使用できる辞書がコメントアウトされた状態になっているため,行頭の'#'を削除し,二重引用符の位置を変更するだけで設定は完了です。設定が完了したら,yaskkservを再起動しておきましょう。

使用する辞書を追加する例

$ sudo vi /etc/default/yaskkserv
DICS="SKK-JISYO.L \
SKK-JISYO.zipcode \   ←コメントアウトを解除して郵便番号辞書を追加
SKK-JISYO.station \   ←コメントアウトを解除して駅名辞書を追加
"                     ←二重引用符を閉じる
#SKK-JISYO.requested \
(...略...)
$ sudo /etc/init.d/yaskkserv restart
server completionを使う

yaskkservは,server completionという機能に対応しています。これは辞書サーバを前方一致で全検索する機能です。この機能を利用するには,.emacsに以下の設定を行ないます。この設定方法や機能の詳細は/usr/share/emacs/site-lisp/ddskk/skk-server-completion.elの先頭部分に記述されていますので,こちらも参照してください。

server completionの設定

(add-to-list 'skk-search-prog-list
          '(skk-server-completion-search) t)
(add-to-list 'skk-completion-prog-list
          '(skk-comp-by-server-completion) t)

;;また,`~' を付けた変換結果を個人辞書に学習してしまうのをやめるためには
;;以下を追加してください。

(add-hook 'skk-search-excluding-word-pattern-function
       #'(lambda (kakutei-word)
           (eq (aref skk-henkan-key (1- (length skk-henkan-key)))
               skk-server-completion-search-char)))

設定を完了したら,実際に変換を行なってみましょう。変換モードで文字の後ろにチルダ(~)をつけて変換を行なうと,server completionが辞書サーバを前方一致検索し,マッチした語句を変換候補として列挙します。

server completionの利用例

▽ひっさつ~
==> "ひっさつしかけにん" "必殺仕掛人" "ひっさつしごとにん" "必殺仕事人" "ひっさつわざ" "必殺技" ..
※4
既にdbskkd-cdbがインストールされている場合は削除されます。
※5
推奨パッケージであるskkdic-extraも同時にインストールされ,使用可能な状態になります。

おわりに

SKKは独特な日本語入力方法ですが,Emacsが動作するあらゆる環境で利用することができます。さらにMac上で動作するAquaSKKや,Windows用のSKKIMEといった実装も存在するため,最近ではEmacsの外でも問題なくSKKを利用することができます。バックエンドに辞書サーバを持つことで,より強力で柔軟な変換能力を持たせることもできるSKKを,ぜひ体験してみてはいかがでしょうか。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。

コメント

  • 標準的な設定

    SKK の記事たいへん興味深く拝見いたしました。

    dired-x.el には dired-bind-jump というユーザ変数が定義されており、これを nil に設定することで ddskk とのキー定義の重複を回避するのが自然です。また、dired-x.el のコメントに従い dired-load-hook から dired-x を load するのが適切です。

    もう一点、C-\ を直接 skk-mode に定義することは推奨されません。これは Emacs 標準の LEIM のキー定義を潰してしまうからです。

    (setq default-input-method "japanese-skk")

    のようにするのが正解です。

    失礼しました。

    Commented : #1  塚本 徹雄 (2011/06/09, 05:50)

コメントの記入