Cuttlefishを使ってみた

http://farm3.static.flickr.com/2789/4038162638_97c7464918.jpg

コードを書いてるときにここって昔どう書いてたっけ?とか、 あのチームのあのツールでXXモジュール使ってたらしいぜ、って時があります。 軽くブラウザなんかから検索できると便利です。 grepを使用したコード検索エンジン Cuttlefish というツールがあります。 Bottle, Makoを使って構築されているようです。

私の環境では /bin/grep にgrepのコマンドファイルがあったので、 /usr/bin/grep になっている箇所をエラー回避のために直接修正しました。

$ hg clone http://bitbucket.org/kaelin/cuttlefish/
$ cd cuttlefish
$ vim cuttlefish/__init__.py
$ hg diff cuttlefish/__init__.py
diff -r bb76f68a06e6 cuttlefish/__init__.py
--- a/cuttlefish/__init__.py    Thu Oct 22 22:10:59 2009 -0700
+++ b/cuttlefish/__init__.py    Sat Oct 24 04:35:04 2009 +0900
@@ -295,7 +295,7 @@
     def __init__(self, query, c=3, cn="*", parser=MatchChunkRunParser):
         self.query = query
         self.parser = parser
-        cmd = ["/usr/bin/grep",
+        cmd = ["/bin/grep",
                "--recursive",
                "--binary-files=without-match",
                "--line-number",
$

インストールから修正まで。 で、あとは cuttlefish/cuttlefish-config.plist の対象ディレクトリ設定を書いてあげればよいです。 ( /path/to/target-dir とかになっているところ) __init__.py を直接叩いて動作させました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>bottle-run-kwargs</key>
    <dict>
        <key>host</key>
        <string>localhost</string>
        <key>port</key>
        <integer>8083</integer>
    </dict>
    <key>collections</key>
    <dict>
        <key>keyname</key>
        <array>
            <string>/path/to/target-dir</string>
        </array>
        <key>second-keyname</key>
        <array>
            <string>/path/to/target-dir/second</string>
        </array>
    </dict>
</dict>
</plist>
$ python cuttlefish/__init__.py

簡単にブラウザ経由でコード検索できるのと、 ディレクトリ階層とかファイル数の影響があるんだろうけどサクサク動いてるのがいいです。 このツールの特徴でもあるのですがディレクトリを直接見にいくので セキュリティ的にどうなのってところと、grep直叩きなので速度はどうなの ってところはありますが、ローカルネットワーク内 でサクサクッと使いたい時にはいいのではないでしょうか。