anything 的絞りこみコマンド percol が migemo 対応しました

先日のエントリpercol というとっても便利なコマンドを紹介しました.migemo 対応してくれたら更に便利だなーと思っていたのですが,id:mooz さんがばっちり --match-method に migemo を追加して下さいました.

percol で migemo を使うには C/MigemoPyMigemo を導入する必要があります.備忘として Ubuntu 11.10 とWidnows7 での導入方法を記しておきます.めんどくさいのでインストール場所は全部デフォルトの場所で,migemo の辞書の文字コードutf-8 を使うことにします.

各ソフトウェアのバージョン

Ubuntu 11.10 に導入する

Ubuntu の環境は以下のようなになってます.

まずは cmigemo の導入です.KaoriYaさんからアーカイブをダウンロードしてきます.

$ wget http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip
$ unzip cmigemo-default-src-20110227.zip
$ cd cmigemo-default-src

このソースの中の src/wordbuf.c は limits.h をインクルードし忘れているので,以下のように修正します.

$ diff -u src/wordbuf.c.bck src/wordbuf.c
--- src/wordbuf.c.bck   2012-05-11 21:52:44.006214700 +0900
+++ src/wordbuf.c       2012-05-11 19:40:39.310948000 +0900
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 #include "wordbuf.h"

 #define WORDLEN_DEF 64

あとはビルドするだけです.

$ ./configure
$ make gcc
$ make gcc-dict; cd dict; make utf-8; cd ..    # 辞書のビルド
# make gcc-install

これで /usr/local/bin に cmigemo,/usr/local/share/migemo に辞書,/usr/local/lib に libmigemo.so がインストールされます.

次は PyMigemo を導入します.

$ wget http://www.atzm.org/etc/files/pymigemo/pymigemo-0.3.tar.gz
$ tar xvf pymigemo-0.3.tar.gz
$ cd pymigemo-0.3
$ python setup build
# python setup install

これで無事ビルドされるはずです.

最後に percol を入れます.

$ git clone git://github.com/mooz/percol.git
$ cd percol
# python setup.py install

ビルドはこれだけです.あと設定ファイルが必要ですが,無駄に長くなるので前のエントリ]を見て下さい.

Windows7 64bit に導入する

Windows の環境は以下のようになっています.

Cygwin は既に導入されている前提とします.私は Cygwin のもともと全パッケージをインストールしているので,以下の工程での細かい必要パッケージがわかりません.cmigemo も Windows用 dll ではなく,ソースからビルドします.

まずは cmigemo ですがすこし make のコマンドが変わるだけです.先程と同様に src/wordbuf.c の修正は必要です.

$ wget http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip
$ unzip cmigemo-default-src-20110227.zip
$ cd cmigemo-default-src
$ edit src/wordbuf.c
$ ./configure
$ make cyg
$ make cyg-dict; cd dict; make utf-8; cd ..    # 辞書のビルド
# make cyg-install

これで /usr/local/bin に cmigemo と cygmigemo1.dll,/usr/local/share/migemo に辞書,/usr/local/lib に libmigemo.dll.a がインストールされます.

次に PyMigemo をビルドします.先程とライブラリの名前が違うので,そのままではビルドできません.

$ wget http://www.atzm.org/etc/files/pymigemo/pymigemo-0.3.tar.gz
$ tar xvf pymigemo-0.3.tar.gz
$ cd pymigemo-0.3
$ python setup build
running build
running build_ext
building 'migemo' extension
(中略)
gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.11-i686-2.6/pymigemo.o -L/usr/lib/python2.6/config -lmigemo -lpython2.6 -o build/lib.cygwin-1.7.11-i686-2.6/migemo.dll
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lmigemo
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

setup.py を修正すればいいのかもしれませんが,わからなかったので手動で libmigemo.dll.a とリンクしてコンパイルします.

$ gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.11-i686-2.6/pymigemo.o \
  -L/usr/lib/python2.6/config -L/usr/local/lib -lmigemo.dll -lpython2.6 \
  -o build/lib.cygwin-1.7.11-i686-2.6/migemo.dll 
# python setup install

これでビルド完了です.

percol は先程と全く同じ工程で出来ますので省きます.

使ってみる

実際にしぼり込んでみます.

$ ls | percol --match-method migemo


という感じに日本語もばっちり絞り込んでくれます.

前のエントリで作成した search-document-by-percol はドキュメントを絞り込みますが,これもばっちり日本語のパスが含まれていても絞り込んでくれるようになりました.1000以上の候補があってもサクサク絞り込んでくれますし,migemo かつ AND 検索できるようなドキュメント検索ツールは今までにないものだと思います.

zsh の履歴検索もできるかと思ったのですが,日本語を使ったコマンドが .zsh_history に正しく保存されず文字化けっぽくなってしまいます.どなたか解決策をご存知の方に教えていただきたい!

おわりに

この機能が実装されて本当に便利すぎて滂沱の涙が出てきました.mooz さん本当にありがとうございます.もう拝まずにいられません.ぜひぜひこのエントリを見た人も使ってみてください.