groonga(rroonga)を利用したソースコード全文検索エンジン"Milkode"をApache Passengerで軽快に動かす方法
Rubyで書かれたMilkodeというソースコード検索エンジンが巷で評判です。
コマンドラインだけでなく、WEBブラウザから利用出来るインターフェースも用意されています。
これを導入することで、ソースコードを横断検索した結果のURLを、社内チャットなどでやりとりする事も出来ます。
そんなツールを簡単に手元のCentOS環境で構築するテンプレートを作成しました。
milkode-web - Milkode web application bundler template for apache passenger
https://github.com/y-ken/milkode-web
こちらを、ステップバイステップで解説したいと思います。
Milkodeとは
画像引用元:http://ongaeshi.hatenablog.com/entry/20110730/1312040692
一言で言えば、ソースコードを高速に横断検索できる便利ツールです。
以下の紹介文を読んだとしても、その素晴らしさは正直使ってみないと分かりません。
今回作成した簡単導入キットを利用し、まずは触って試してみて下さい。
Milkodeは行指向の検索エンジンです。 一般的に検索エンジンは「特定の単語を含むファイル」を見つけますが、Milkodeは「特定の単語を含む行」を見つけます。 例えば"def open"で検索すると、一般的な検索エンジンでは"def func()\n.....open....."のようにファイル内に"def"と"open"が含まれるものを全て返しますが、Milkodeの場合は"def open_file()", "def database_open()" といった1行の中に"def", "open"が含まれるものだけをピックアップしてくれます。 一般的にソースコードを検索するためのツール(grepやエディタ附属のものなど)は行指向のものが多いため、それらで培った検索テクニックがそのまま使えます。
http://milkode.ongaeshi.me/wiki/%E7%89%B9%E5%BE%B4
追記:Milkodeのデモサイトがあるようです。
http://kodeworld.ongaeshi.me/
テーマ
公式ドキュメントではmilk web
コマンドでWEBサーバを起ち上げる方法が紹介されています。
しかしながら、複数アプリを起ち上げる時など、ApacheのPassenger経由で利用したいこともあるでしょう。
Apache Passengerを利用したMilkodeのWEBアプリを簡単に利用する方法を紹介します。
インストール手順
Milkodeのインストールディレクトリは/var/www/html/
を使う場合を想定して説明を進めます。
Apacheがアクセス権を持つディレクトリであればどこでも構いません。
動作確認済み構成
- Milkode-0.9.9
- rroonga-2.1.0
ディレクトリ構成
場所 | 用途 |
---|---|
./milkode/data/ | rroongaの全文検索データ格納場所 |
./milkode/source/ | 全文検索にインデックスさせる対象のソースコードの格納場所 |
./milkode/public/ | DocumentRoot |
./milkode/vendor/bundle/ | bundler modules |
Step1. Milkodeをテンプレートからbundlerインストール
bundlerを用いるので、システム側のgemを汚しません。
$ cd /var/www/html $ git clone https://github.com/y-ken/milkode-web.git milkode $ cd /var/www/html/milkode $ bundle install --path vendor/bundle
Step2. Milkodeデータベースを初期化する
cd /var/www/html/milkode $ bundle exec milk init data
Step3. Milkodeデータベースにコンテンツを追加
ここで、何かしらの検索対象としたいソースコードを./milkode/source/
以下に追加します。
注意
milk add
を実行するときは、必ずデータベースディレクトリに移動します。今回のケースでは/var/www/html/milkode/data
に移動します。
# 全文検索にインデックスさせる対象のソースコードの格納場所にいくつかのリポジトリをクローンします $ cd /var/www/html/milkode/source $ git clone https://github.com/twitter/bootstrap.git $ git clone https://github.com/twitter/typeahead.js.git # Milkodeのデータベースディレクトリへ移動します $ cd /var/www/html/milkode/data # Milkodeのデータベースにそれぞれ読み込みます $ bundle exec milk add ../source/bootstrap/ package : bootstrap result : 1 packages, 146 records, 146 add. (1.25sec) *milkode* : 1 packages, 146 records in /var/www/html/milkode/data/db/milkode.db. $ bundle exec milk add ../source/typeahead.js package : typeahead.js result : 1 packages, 41 records, 41 add. (0.39sec) *milkode* : 2 packages, 187 records in /var/www/html/milkode/data/db/milkode.db. # 2つ読み込まれた事を確認します $ bundle exec milk list bootstrap typeahead.js *milkode* : 2 packages, 187 records in /var/www/html/milkode/data/db/milkode.db.
Step4. Apache設定
以下のような設定をvirtualhosts.conf
に追加します。
ServerNameは、独自ドメインを使わないときはIPアドレスなどを設定してください。
$ cat /etc/httpd/conf.d/virtualhost.conf <VirtualHost *:80> ServerName milkode.example.com DocumentRoot /var/www/html/milkode/public PassengerHighPerformance on SetEnv MILKODE_DEFAULT_DIR /var/www/html/milkode/data </VirtualHost>
その後、Apacheを再起動します。
$ sudo /etc/init.d/httpd restart
Step5. ブラウザで表示確認
それでは、さきほど設定したhttp://milkode.example.com/
のようなドメインでアクセスしてみましょう。
以下のような、牛乳瓶のアイコンを用いたMilkodeのロゴが見えれば完成です。
まとめ
今回はインストールに絞って紹介しました。まずはこの便利さに触れて頂ければと思います。
運用編としては、定期的にインデックスさせる対象にrsyncしたり、インデックス更新を行う定期実行タスクと組み合わせると、より開発の現場で重宝されるのではないでしょうか。