結構な規模で、ファイル数が多く、grepによる検索では非常に時間がかかり、効率が悪い。
Milkodeは全文検索エンジンgroongaを使った、ソースコード検索用のツールで、数万ファイルを対象にしても、瞬時に検索できる。
Webアプリとしても動作し、ブラウザを使って検索もできる。
検索するソースの追加も簡単なので、重宝している。
Clojureのソースを検索できるようにしよう。
インストール
MilodeはRubyアプリである。gem でインストールできる。
rroonga(groongaのRuby用API)
$ gem install rroonga
$ gem install milkode
これでmilkコマンドが使えるようになる。
データベースの作成
$ milk init --defaultcreate : /home/satoshi/.milkode/milkode.yaml
create : /home/satoshi/.milkode/db/milkode.db created.
Clojureソースの取得
srcディレクトリにソースリポジトリをcloneする。$ mkdir src
$ cd src
$:~/src git clone https://github.com/clojure/clojure.git
ソースプロジェクトの登録
$ milk add clojurepackage : clojure
result : 1 packages, 279 records, 279 add. (1.56sec)
*milkode* : 1 packages, 279 records in /home/satoshi/.milkode/db/milkode.db.
登録したプロジェクトの確認
$ milk listclojure ← ◆登録された
*milkode* : 1 packages, 279 records in /home/satoshi/.milkode/db/milkode.db.
コマンドラインでの検索
gmilkコマンドで検索できる。$:~/src cd clojure
$:~/src/clojure gmilk RETRY_LIMIT
src/jvm/clojure/lang/LockingTransaction.java:25:public static final int RETRY_LIMIT = 10000;
src/jvm/clojure/lang/LockingTransaction.java:28://public static int COMMUTE_RETRY_LIMIT = 10;
src/jvm/clojure/lang/LockingTransaction.java:252: for(int i = 0; !done && i < RETRY_LIMIT; i++)
ソースのディレクトリ内でgmilkコマンドを実行しないと、検索できないことに注意。
ソースのディレクトリ外の場合は、パッケージ名をオプション指定する。
詳細は gmilkコマンドのマニュアルhttp://milkode.ongaeshi.me/gmilk.htmlを参照。
Webアプリでの検索
次のコマンドで検索用のWebアプリを起動する。$ milk web
デフォルトではブラウザを起動する。
ブラウザを起動せずに、外部からの接続を許可した状態で起動するには、以下のコマンドを実行する。
$ milk web -n -o 0.0.0.0
詳細は milk help web コマンドを参照。
次は検索結果の画面。
Emacsでの検索
検索用のELispもある。https://github.com/ongaeshi/emacs-milkode
auto-installが使えば、
(auto-install-from-url "https://raw.github.com/ongaeshi/emacs-milkode/master/milkode.el")
でインストールできる。
init.elに次の設定を追加する。
(require 'milkode)
検索するには
M-x milkode:search
を実行する。
ミニバッファに gmilk: と表示されるので、検索文字列を入力する。
図は -a RETRY_LIMIT を入力した例。VPSに接続したターミナル内のEmacsなので、少し表示が汚ない。
-a は 全プロジェクトを対象にする場合のオプション。
(-a を付けないと正しく検索できなかった。カレントディレクトリがソースのディレクトリ内ではないから?)
0 件のコメント:
コメントを投稿