yaskkserv を入れて server-completion してみる

最近ようやく三田さんの事例 (skk 5819, skk 5820 あたり) を参考に富豪的辞書サーバ環境を構築してみた。いろいろ引っ掛かったりしたのでそのあたりの話とか使用感は後日まとめてみたいな。

といった訳で、現在は rskkserv を使って skkserv2 + mecab-skkserv を串刺し、regex-skkserv はちょっと面倒なので未インストールといった状態。今回はここから更に server-completion をやってみる話。skk 5820 によると rskkserv のモジュールは現状では server-completion には対応していないらしい。むーん、残念。という訳で Emacs 側で小細工してみる。

ともかくサーバがないことには始まらない。server-completion に対応している辞書サーバは regex-skkserv と yaskkserv があるようだ。regex-skkserv は前述のようにインストールがちょっと面倒っぽいので yaskkserv を入れてみることに。フムフム、普通に ./configure make するだけね…

build unit_test_benchmark.cpp
(中略)
In file included from unit_test_benchmark.cpp:8:
./source/skk/skk_dictionary.hpp:811: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
For Debian GNU/Linux specific bug reporting instructions, see
<URL:file:///usr/share/doc/gcc-3.3/README.Bugs>.
make[2]: *** [unit_test_benchmark.o] Error 1
make[1]: *** [all] Error 2
make: *** [all] エラー 2

orz これ、結論から言うと、以下公式ページより引用

gcc-3.3 系 + メモリが少ない機械ではコンパイラのバグを踏んでビルドに失敗することがあります。(gcc-4 系では問題ありません。)

ということのようです。いやー上記注意書きを見付けるのが遅れて初っ端から結構ハマりました。これさえ回避すればあとはなんの問題もなくインストール完了。

[追記:2006-03-23] 上記注意書きが公式ページの上の方に移動していますね。まさかここを読まれた訳ではないんでしょうけど、これでハマる人が少なくなるといいですね。あらためて作者さんに感謝。ちなみに私んとこではメモリ 96M でビルド失敗、320M で成功といった感じでした。

ポートは 1178〜1180 を富豪辞書達が占有しているので 1182 で yaskkserv を動かしといて、netcat で動作確認。

% netcat localhost 1182
4まちだ 
1/まちだ/まちだえき/まちだおだきゅう/まちだかいどう/まちだかん/まちだがくえん/まちだし/まちだしみん/まちだてん/まちだほうめん/

こんな返事が来ればオッケーです。"4まちだ" の後に半角 SPC を入れるのを忘れないように。

さて、残る Emacs 側の設定方法は、skk-server-completion.el の Commentary に書いてあるのをそのまま丸写し。それに加えて、

(defadvice skk-server-completion-search-midasi
  (around substitute-server-connection-to-yaskkserv activate compile)
  (let* ((server skk-server-host)
	 (port 1182)
	 (skkserv-working-buffer (get-buffer-create " *skk-server-completion*"))
	 (proc (get-buffer-process skkserv-working-buffer))
	 (skkserv-process (or (and (skk-server-live-p proc) proc)
			      (open-network-stream "skk-server-completion"
						   skkserv-working-buffer
						   server port))))
    (set-process-query-on-exit-flag skkserv-process nil)
    ad-do-it))

こんなかんじの advice で server-completion の時だけ yaskkserv に接続することが出来ました。


これで server としては rskkserv, skkserv2, mecab-skkserv, yaskkserv の辞書サーバ群に加えて個人ユーズの bskk が上がっている環境となった。いずれは regex-skkserv もインストールしてみる予定なんだけど、いやーまさに富豪的ですな。なんだか書く文章の内容までレベルアップしたような。気のせいですねハイ。