自己紹介

ongaeshi (おんがえし)

  • 職業プログラマです
  • 趣味でソフトウェアを作って公開しています
  • ホームページ : http://ongaeshi.me

最近作ったもの

  • QiitaMail
  • FireLink
  • auto-shell-commend

アジェンダ

  • Milkodeの紹介
  • 何故rroongaを使ったの?
  • rroongaの使い方

Milkodeの紹介

何なの?

  • ソースコード検索に特化した検索エンジン
  • ローカルやWeb上にあるソースコードを登録して高速に検索

特徴は?

  • 高速 (20,000ファイル位であれば1秒以内に検索)
  • 行指向 (AND検索)
  • エディタでもブラウザでも

もっとコードリーディングを簡単に!

ソフトウェアの構成

  • Ruby & Haml & JavaScript
  • rroonga (ストレージ & 検索エンジン)
  • Thor (コマンドライン)
  • Sinatra (Webアプリ)
  • CodeRay (ソースコードの色付け)

他にもたくさんのgemのおかげで出来てます

デモ

  • Rails の ActiveSupport#blank? を探す
  • Macintosh HD 内の全テキストから検索

何故rroongaを使ったの?

groongaがカラムストア機能付きだから!

  • 別途データベースソフトのインストールが不要
  • 'gem install rroonga' でgroongaもまとめてインストール

配布が簡単

このような特性を持つため・・

ローカルアプリと相性がよい

さらに・・

Rubyだけで書ける

  • C言語を使わずにgroongaにアクセス
  • Rubyらしく読み書きしやすいAPI
  • ブロックで検索式を記述

サポート

  • 日本語の情報が豊富
  • 開発が活発
  • MLのレスポンスが早い

rroongaの使い方

基本的な使い方

Groonga::Database

  • ソースコードのテーブル (documents)
  • パッケージのテーブル (packages)
    • milkode, .emacs.d, rroonga-2.0.6 等

呼び出し方法

  • コマンドラインからの入力を解析→データベースに問い合わせ→標準出力
  • Webアプリの入力を解析→データベースに問い合わせ→HTML

ソースコードのテーブル(documents)

カラム名説明実例全文検索
pathstringファイルの絶対パス/path/to/proj/src/aaa.txt
packagestringパッケージ名proj
restpathstringパッケージ名以降のパスsrc/aaa.txt
contenttextファイルの内容aaa\nbbb\nccc
timestamptimeファイルのタイムスタンプ2012-11-21 23:26:00 +0900-
suffixtext拡張子txt

  • 1ファイル == 1レコード としてテーブルに登録
  • 拡張子はソースコード検索にとって重要なので専用カラムを作成

パッケージのテーブル(packages)

カラム名説明実例
namestringパッケージ名proj
directorystringパッケージの実体パス/path/to/proj
addtimetime追加時刻
updatetimetime更新時刻
viewtimetime最終閲覧時刻
favtimetimeお気に入りに設定した時刻

  • ホームやパッケージ一覧に使用

どうやって  行  を絞り込むの?

1. rroongaで可能性のあるレコードを絞り込み

2. 絞り込んだレコードを1行ずつRubyで検索

3. 目的の1行を見つけ出す

トークナイザーの設定

  • TokenBigramSplitSymbolAlphaDigitを使用
    • コード検索の場合は、'robo123'に'robo'や'123'でマッチした方がよい

ありがとうございました

是非Milkodeに触れてみてください
どうぞよろしくお願い致します