skkserv に愛を

SKK advent calendar の 9 日目です。

8 日目は ponkotuy さんの「辞書結合〜SKK-JISYO.LLを作ってみる」(id:ponkotuy:20101214:1292343807) でした。ここでは同じ問題 (辞書増やしたい) を解決できる、別のアプローチを紹介してみようと思います。

skkserv

SKK では、辞書データをフロントエンドにもたせるか、辞書サーバにもたせるかを選ぶことができます。

最近はクライアントマシンの性能はあり余っているし、個人利用がメインでマシンを共用することなんてなくなってきている上に、cdb をそのまま elisp に読ませてしまえ的な流れもあるようだし、検索しても二昔前くらいの辞書サーバ関連記事しかでてこないし、そもそも辞書サーバは需要がなくなってきてるのかなー、なんて気がしなくもないのですが、手元の emacs がわざわざ辞書ファイルを開いて抱えるのが気にいらないので、私は未だに辞書サーバから離れられません。

[Ad]依存が高じて、debian で yaskkserv という skkserv のパッケージをメンテナンスしていたりもします。

「えー、別に手元に辞書ファイルおいとけばよくね?」というあなた向けに、いくつか辞書サーバのメリットをば。

  • emacs の荷物が減る (場合がある)
  • 複数の辞書を簡単に扱える (ものもある)
  • 動作中に辞書を更新できる (ものもある)
  • 後述する server completion が使える (ものもある)
  • 据置ノードを複数飼っているなら、辞書サーバを集約できる

普段の作業をゲロ非力な Atom でやっていると emacs を軽く維持することは重要ですし、L 辞書だけじゃやっぱり足りないし、新しい辞書を反映させるために elscreen の広がった emacs を再起動するのもゾッとしない話です。
また、持ち歩くこともあってノート PC では個別に辞書サーバを動かしてしまうのですが、仮想環境なんかで複数ノードを飼っているなら、辞書サーバを集約しておくと、ある程度育った個人辞書を放りこむ先として使えたりもします。

どうでしょう。「ちょっと skkserv 使ってみようかな」という気になったりならなかったりしないでしょうか。

[Ad]yaskkserv は登場してから結構たっていながら、未だにOpenlab の辞書サーバページで紹介してもらえない不遇の辞書サーバですが、軽快でフットプリントも小さく、余計な依存もないので、これから skkserv を使おうという方にはオススメです。ご明察の通り、yaskkserv では先にあげたようなメリットを全て享受することができます。debian では

sudo aptitude install yaskkserv
sudo vi /etc/default/yaskkserv
sudo /etc/init.d/yaskkserv restart

とやって使いたい辞書を選ぶだけで良いようになってますのでご利用ください。

ちなみに、このエントリでは yaskkserv を推していますが、他に mecab-skkserv とか gtskkserv といった変態的な辞書サーバもありますので、試してみると面白いかもしれません。SKK 辞書サーバは仕組みがシンプルらしいので、腕に覚えのある人であれば、自分で実装するという楽しみ方もできるでしょう。

server completion

で、せっかくなので、skkserv を使っているあなただけがアクセスできる機能ということで、server completion というものを紹介します。*1

すごく大雑把に一言でいえば、「辞書サーバを前方一致で全検索」する機能です。とても簡単なので、さくっと .emacs に設定を追加してみましょう。個人辞書への学習はお好みで。

;;; 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)))

eval-buffer とか適当にしたら、何はともあれ試してみましょう。適当な見出し語を少しだけ変換モードで入力し、最後にチルダ(~)を入力してから変換します。

例えば「▽すうがく~」で候補をたぐっていくと、結構なんじゃこりゃな感じでニヤリとできるのではないかと思います。

普段の入力で使う実用性がそんなにあるわけではないのですが、クソ長い専門用語を何度も使わないといけないとき、あやしげなエイリアスで個人辞書を汚すことなく、打鍵数を節約できたりするかもしれません。

なお、この機能はクライアントとサーバを選びます。クライアントは今のところ ddskk 限定のようです。*2
サーバの方は、上でプッシュした yaskkserv の他には、Windows 向けの実装である wceskkserv でもサポートされているようです。まぁ yaskkserv を選んでおけばいいよ!

というわけで、10日目は cloneko さんです。よろしくお願いします。

2010-12-18追記

Openlab の辞書サーバページに yaskkserv が追加されたので、一部記述を訂正しました。

*1:とはいっても、存在を知ってさえいれば、skk-server-completion.elを一目見るだけで終わってしまいますけど。

*2:AquaSKK では実装の検討は行なわれたようですが、その後どうなっているのかはよくわかりません。