ソースコード検索ツール milkode をつかってみた
数万のソースコードから目的の一行を一瞬で見つけ出す、Milkode - ブログのおんがえし
先日、はてブで話題になっていたこちらをつかってみました。用途は主に自社サービス「nanapi」の開発で使おうと思っています。nanapiを開発してからすでに2年近く経過していますが、2年も経つとどうしてもあれはどこにいったっけ・・・というようなことが頻繁におきます。grep -rで必死に検索してきましたが、ひと通りファイルをなめるのでかなり遅いです。
そんなときのために、自分用のソースコード検索ツールができたときいて試してみました。
インストール〜起動まで
http://milkode.ongaeshi.me/wiki/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89
基本的には上記のままインストールすることができます。CentOS5.5(x86_64)で試しています。
$ sudo gem install
さて起動してみます
$ milk /usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.so: libgroonga.so.0: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.so (LoadError) from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `require' from /usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.rb:45 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cdstk.rb:6 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstksub.rb:3 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstk.rb:3 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/bin/milk:7 from /usr/local/bin/milk:19:in `load' from /usr/local/bin/milk:19
どうやらライブラリにパスが通ってないようで。とりあえず環境変数で逃げます。
$ export LD_LIBRARY_PATH=/usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/vendor/local/lib/ $ milk milk COMMAND [ARGS] The most commonly used milk are: init Init db. add Add packages. update Update packages. web Run web-app. remove Remove packages. list List packages. pwd Disp current db. cleanup Cleanup garbage records. rebuild Rebuild db. dump Dump records.
と、これで動作するようになりました。次はソースコードの登録です。
$ milk init --default $ milk add ~/src
これで、検索するソースコードが登録できました。あとはWebサーバを起動すればOKっぽいです。
$ milk web sh: xprop: command not found /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:41:in `shell_commands': undefined method `shellsplit' for nil:NilClass (NoMethodError) from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:104:in `wet_run' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `fork' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `wet_run' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:61:in `run' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/application.rb:58:in `run' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/applications/browser.rb:76:in `open' from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy.rb:30:in `open' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:49:in `start' from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/handler/thin.rb:13:in `run' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:46:in `start' from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/server.rb:100:in `start' from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:99:in `execute_with_options' >> Thin web server (v1.2.11 codename Bat-Shit Crazy) from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstk.rb:73:in `execute' >> Maximum connections set to 1024 >> Listening on 127.0.0.1:9292, CTRL+C to stop from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/bin/milk:10 from /usr/local/bin/milk:19:in `load' from /usr/local/bin/milk:19
とりえず起動しますが、Listenしているアドレスが、127.0.0.1になっています。ローカルで起動していればよいですが、リモートで起動しているのでこれだと外部からHTTPで見ることができません。
また、ブラウザも自動起動するような設定になっているので起動オプションで設定します。
$ milk web --help milk web --db DB_DIR Database dir (default : current_dir) -o, --host HOST listen on HOST (default: 127.0.0.1) -p, --port PORT use PORT (default: 9292) -s, --server SERVER serve using SERVER (default : thin) -n, --no-browser No launch browser. -h, -?, --help Show this message $ milk web --host 0.0.0.0 -n
これで、http://hostname:9292/ へアクセスすればOKです。ただし、認証がかけられないのでiptablesなどでアクセスできるIPアドレスを縛ったほうがいいかもしれません。
さて、ちょっと使ってみましたがこれがまた便利です。過去に自分がかいたクラスなんかはよく忘れるのですがそういったものの検索にもってこいですね。ソースコードはうちはgitで管理をしているので、何らかのタイミングでDatabaseをupdateするような仕組みをつくるといいかなーなんて考えています。
# git pushしたら、milkodeのDBをupdateするような仕組みにしたらちょっと便利そうですね。
nanapiを一緒に作ってくれるメンバーを募集しています!
Webアプリケーションエンジニア募集 | 株式会社ロケットスタート
http://rocketstart.co.jp/recruit/designer.html