kakasiとText::Kakasiを入れる話

新年一発目はかかしの話。kakasiです。

日本語のわかち書きをやるツールとしてとてもメジャーなんだけど、本当は漢字かな混じり文をひらがなやローマ字に変換するためのツールだったりする。辞書構造がとてもとてもシンプルなので、使い勝手が非常に良い。

さて、一般にはわかち書き用途に使われることが多いが、今回は漢字かな混じり文をひらがなに変換するために使いたい。Perlから叩く。

kakasiを入れて、Text::Kakasiを入れて、とさくさく作業したらエラーが出た。記録してないが、PerlスクリプトからText::Kakasiをロードしたところで kakasi_getopt_argvなんてsymbolは知らん!みたいなエラー。ライブラリのリンクに失敗していやがるらしい。でもmakeのログにはエラーなんてない。

書いてたら長くなったから答えから書く。

libkakasi.soを/usr/local/lib以外にインストールしている場合には、Text::Kakasiコンパイルは気を付けないといけないよ!make testって大事だよ!

以下詳細。

俺はライブラリ類を/usr/local/libにいれない場合が多い。

$ ls -l /usr/local
(省略)
lrwxrwxrwx   1 root  root    12  1月  5 14:12 kakasi -> kakasi-2.3.4
drwxr-sr-x   6 root  root  4096  1月  5 14:12 kakasi-2.3.4
(省略)

ライブラリのバージョンアップと、問題発生時のバージョンダウンがシンプルに制御できるからだ。

さてkakasiもこんな風にいれたので、Text::Kakasiのインストールを↓みたいにした。

$ perl Makefile.PL \
> INC=-I/usr/local/kakasi/include \
> LIBS=-L/usr/local/kakasi/lib
$ make
$ make test
(ここでエラー)

Makefile.PLを読むと、これ以上ないほどシンプルなもの。12行しかない。行間には「パスを変えたきゃ勝手に書き換えろ」と書いてあるんだ。

$ diff -u Makefile.PL.original Makefile.PL
--- Makefile.PL.original        2003-05-26 19:42:27.000000000 +0900
+++ Makefile.PL 2009-01-06 12:57:03.000000000 +0900
@@ -6,7 +6,8 @@
 WriteMakefile(
              'NAME' => 'Text::Kakasi',
              'VERSION_FROM' => 'Kakasi.pm',
-             'INC' => '-I/usr/local/include',
-             'LIBS' => ['-L/usr/local/lib -lkakasi'],
+             'INC' => '-I/usr/local/kakasi/include',
+             'LIBS' => ['-L/usr/local/kakasi/lib -lkakasi'],
              'DEFINE' => '-DWAKATIGAKI',
 );

INCとLIBSを書き換えた。できた。使えた。よかった。

思えば、Makefileがかけない奴のためにconfigureがあったりMakeMakerがあるわけで、そのMakeMakerの元ネタがうまくかけない奴のためにオプション充実なMakefile.PLがあったり、という期待は間違いだと言えるよね。うわっほい。