[gren] gren 0.3.0 + groonga - ウェブベースのソースコード検索エンジンを追加しました。

※ 2010/11/06 mkgrendbの使い方に不足があったので追記しました。

gren 0.3.0 にウェブベースのソースコード検索エンジンを追加しました。
ローカルにあるソースコードを元にインデックスを作成し、ブラウザを使って素早く検索することが出来ます。

特徴

全文検索ライブラリにgroongaを採用

全文検索エンジンとして''groonga + rroonga''を使っており、手元にあるたくさんのソースコードから目的の行を一瞬で検索することが出来ます。

手軽な動作環境

groongaとrubyの動く環境であれば動作します。データベースはファイルベースなので、MySQL等は必要ありません。Rackで動かしているのでサーバー上で動かすのも簡単(なはず)です。

コマンドラインでも、ウェブインターフェースでも。

生成されたデータベースは''grendb''と共有可能です。一つのインデックスで、コマンドラインアプリとウェブアプリの二つのインターフェースを使い分けることが出来ます。

インストールはgemコマンドで一発
sudo gem install gren

rroonga, groongaも一緒にインストールされます。

Windowsだと下記の手順でインストール可能ですが、groonga周りで上手く動かないかもしれません。grenは問題なく使えます。

Windows

# プラットフォームを指定してWindows用のrroongaをインストールする
gem install rroonga -v 1.0.1 --platform x86-mingw32
# その後、grenをいつも通りインストール
gem install gren
grenって?

grepの置き換えを目指し、最初にgrenを作りました。
その後、たくさんのファイルを素早く検索するために mkgrendb、grendbを作り、GUIでも検索したくなって、今回grenwebを作りました。
grenは、手元のソースコードを様々な方法で検索するためのツールセットになりつつあります。

gren ローカルファイルを素早く検索、grepの置き換えを目指す
mkgrendb ローカルファイルを元にgroongaデータベースを生成する
grendb コマンドラインアプリ、groongaデータベースの情報を利用して、大量のファイルから目的の情報を素早く検索出来る
grenweb ブラウザから検索出来るウェブアプリ、groongaデータベースの情報を利用して、大量のファイルから目的の情報を素早く検索出来る

使い方

データベース生成用のyamlファイルを書く

私は~/grendb/grendb.yamlとかに置いてます。
yamlファイルの横に~/grendb/grendb.db みたいなファイルがいっぱい出来るので、ディレクトリを掘っておいた方がいいかもしれません。

#
# grendb : データベース作成用YAML
# 

# 検索対象となるディレクトリ
directory:
  - ~/Documents/git-manual-jp/
  - ~/Documents/gren
  - ~/Documents/gren-html/
  - ~/Documents/tidtools
  - ~/Documents/MacOS
  - ~/Documents/iPhone
  - ~/Documents/junk
  - /opt/local/lib/ruby/gems/1.8/gems/rroonga-1.0.1
mkgrendb

mkgrendbコマンドを実行すると、検索対象となるディレクトリ以下を探索し、データベースが生成されます。
ここまでくれば後一歩!!

% mkgrendb ~/grendb/grendb.yaml
input_yaml : /Users/ongaeshi/grendb/grendb.yaml found.
create     : /Users/ongaeshi/grendb/grendb.db created.
open       : /Users/ongaeshi/grendb/grendb.db open.
add_file   : /Users/ongaeshi/Documents/git-manual-jp/COPYING
add_file   : /Users/ongaeshi/Documents/git-manual-jp/Documentation/asciidoc.conf
.
.
.
add_file   : /opt/local/lib/ruby/gems/1.8/gems/rroonga-1.0.1/test/test-view.rb
add_file   : /opt/local/lib/ruby/gems/1.8/gems/rroonga-1.0.1/text/expression.rdoc
add_file   : /opt/local/lib/ruby/gems/1.8/gems/rroonga-1.0.1/text/TUTORIAL.ja.rdoc

input_yaml : /Users/ongaeshi/grendb/grendb.yaml (6.78sec)
output_db  : /Users/ongaeshi/grendb/grendb.db*
files      : 781
updates    : 0

今回の修正でデータベースの形式を変えたため、古いバージョンのgrenを使っている人はデータベースの再生成を行う必要があります。

% mkgrendb --full --ddb(or データベース名)

環境変数 GRENDB_DEFAULT_DB を設定しておくと、--ddbオプションでデータベースを指定したことになり便利です。grendb、grenwebでデータベースを指定する手間が省けます。

export GRENDB_DEFAULT_DB=~/grendb/grendb.db
grenweb

GRENDB_DEFAULT_DB が設定されていれば、

# http://localhost:9292/
% grenweb

で自動的にブラウザが起動し、grenのホームページが表示されるはずです。

※ ブラウザが起動したのにこの画面がが表示されない場合、一度リロードしてみて下さい。

ポート番号やデータベースファイルを指定することも出来ます。

# ポート番号1234で起動
# http://localhost:1234/
% grenweb -p 1234

# ~/dummy/database.db にあるデータベースを検索
# http://localhost:9292/
% grenweb ~/dummy/database.db

検索するとこんな感じになります、早い!!

詳しい使い方はヘルプをどうぞ。

動作報告、バグ報告、感想お待ちしてます。

ブログのコメントやTwitter等にお願いします。