SVX日記
2014-04-16(Wed) ruby-kakasiを再召喚
主に、Ruby2.0対応とFedora20対応なのだが、さほど大きな書き直しが必要なわけでもなく、日々、実用に供しながら、楽しく機能追加、バグ取りを続けている。オイラの仕事の時間の半分以上がメールの読み書きであるから、少しでも効率よく、気分よくメール操作できることは、人生の最重要テーマのひとつといっても過言ではないのだ。もはやライフワークと断言できる。
ところが、改めてrubyからkakasiを呼び出すライブラリを導入しようと思ったら、いつの間にか、ウェブ上のどこにも見当たらない……こっ、困る。メールの件名をローマ字でインクリメンタルサーチする(いわゆるmigemoっぽい)機能が使えない。致命的。死ぬ。いますぐ。
慌てて自宅サーバの中を探しまくったらどうにか出てきた……が、Ruby2.0で動くのか? ……そのままではコンパイルが通らん。長らくRubyを使ってきたが、バイナリライブラリの自作には手を出したことがないんだよな。
/root # tar xvfz kakasi-020928.tar.gz
/root # cd kakasi-020928/
/root/kakasi-020928 # ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
/root/kakasi-020928 # yum install ruby-devel
/root/kakasi-020928 # ruby extconf.rb
/root/kakasi-020928 # yum install kakasi kakasi-libs kakasi-dict kakasi-devel
/root/kakasi-020928 # make
kakasi.c:31:21: エラー: ‘struct RString’ は ‘len’ という名前のメンバを持っていません
kakasi.c:37:46: エラー: ‘struct RString’ は ‘ptr’ という名前のメンバを持っていません
……上記のエラーが大量に出てアセる……
/root/kakasi-020928 # mv kakasi.c kakasi.c.org
/root/kakasi-020928 # cat kakasi.c.org | sed "s/RSTRING\(([^)]*)\)->len/RSTRING_LEN\\1/" | sed "s/RSTRING\(([^)]*)\)->ptr/RSTRING_PTR\\1/" > kakasi.c
……が、単にRuby2.0で書き方が変わっただけみたい。/usr/include/ruby/ruby.hのマクロ定義を見て、表現を単純に置換する
/root/kakasi-020928 # make
……通った
/root/kakasi-020928 # ruby test.rb
2002-09-28
KAKASHI nanodesu
……動いた
/root/kakasi-020928 # mkdir -p /usr/local/lib64/ruby/site_ruby
/root/kakasi-020928 # mv kakasi.so /usr/local/lib64/ruby/site_ruby
……インストールして完了
元のruby-kakasiパッケージを転載しておく。