SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

2014-04-16(Wed) ruby-kakasiを再召喚

  最近、またちょこちょこと自作のメーラ「mave」のコードリファインに取り組んでいる。気がつけばもう7年も前からやってんのか。思えば遠くへ来たもんだ。

  主に、Ruby2.0対応とFedora20対応なのだが、さほど大きな書き直しが必要なわけでもなく、日々、実用に供しながら、楽しく機能追加、バグ取りを続けている。オイラの仕事の時間の半分以上がメールの読み書きであるから、少しでも効率よく、気分よくメール操作できることは、人生の最重要テーマのひとつといっても過言ではないのだ。もはやライフワークと断言できる。

  ところが、改めてrubyからkakasiを呼び出すライブラリを導入しようと思ったら、いつの間にか、ウェブ上のどこにも見当たらない……こっ、困る。メールの件名をローマ字でインクリメンタルサーチする(いわゆるmigemoっぽい)機能が使えない。致命的。死ぬ。いますぐ。

  慌てて自宅サーバの中を探しまくったらどうにか出てきた……が、Ruby2.0で動くのか? ……そのままではコンパイルが通らん。長らくRubyを使ってきたが、バイナリライブラリの自作には手を出したことがないんだよな。

  んが、なんとなく空気を読んだらアッサリをビルドに成功した。以下、Fedora20で導入に成功した例。

/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パッケージを転載しておく。

  さて、続き続き。