【環境ごとまるっと提供】ソースコードを手軽に全文検索してみよう

# 環境ごとまるっと提供とは
ツールのインストールが若干面倒だったり、環境の違いで動かないといった状況を無くすために、Vagrantとそのプロビジョニング用のファイルを提供することで、確実に動く環境を手元にお届けするのが狙いです。
※VirtualBox&Vagrantの環境をセットアップしてあることが前提になってしまうのですが、それらのインストールは、非常に簡単ですので、「動かないから断念」問題になる可能性が低いです。

# Milkodeとは
今回の記事では、MilkodeというおんがえしさんがRubyで作成したソースコード検索ツールを利用します。rubyのgemとして提供されており、MacやLinuxでは、インストールもとっても簡単なのですが、windowsでは、若干面倒だったり(rubyインストールしたり、必要なツールのインストールしたり）したので、Vagrantのスクリプトとして紹介します。
Milkodeについて、筆者は、以下のポイントを非常に気に入っています。
　・Milkode本体にwebアプリがついて、サクッと利用できる点
　・検索が非常に早い点（内部で利用している検索エンジンにGroongaがとても高速らしいです。）
　・日本語も問題なく検索でき、ハイライトは弱いが、日常のメモも全文検索できる点
参考：
[Milkodeの特徴](http://milkode.ongaeshi.me/features.html)
[github:ソース](http://milkode.ongaeshi.me/)
[Ruby でソースコード検索エンジンの作り方 〜Milkode の内部実装解説〜](http://magazine.rubyist.net/?0046-Milkode)
[Windowsに ソースコード検索エンジン「Milkode」をインストールする](http://qiita.com/rohinomiya/items/5eae5c581dc37b6efbe4)

# どんな風に使えるの？
１．Vagrant上のOSにログインしてMilkodeのwebアプリを起動しておく
２．共有フォルダにソースを格納する
３．ブラウザ上で検索（indexの更新もブラウザ上からできちゃいます）


### １．Milkodeのwebアプリを起動しておく
後述のVagrantfileにて仮想マシンを作成したら、「vagrant ssh」で一旦ログインして
以下のように入力してください。

```
# Milkodeのwebアプリをバックグランドで実行する。
# hostマシンからアクセスできるように--hostオプションも指定する。
milk web -n --host 0.0.0.0 &
```

### ２．共有フォルダにソースを格納する
今回提供するスクリプトでは、vagrantの共有フォルダに、「milkode_work」という仮想マシン側とホストマシン側の共有フォルダをmilkodeの検索対象として登録しています。
私は、ホストマシンは主にwindowsを利用しているので、ドラッグ＆ドロップで検索したいソースを格納したり、日々のメモをそのフォルダ上に格納しています。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/47854/df51e3df-db0d-8c4f-61c4-3fc7693edc61.jpeg)

### ３．ブラウザ上で検索（indexの更新もブラウザ上からできちゃいます）
ブラウザを起動して、以下のURLにアクセスしましょう。
http://192.168.55.15:9292/home
最初は、indexが作成されていないので、「パッケージを更新」を押下してindexを更新します。（ファイルを更新したら、パッケージを更新してください。）
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/47854/ba2da211-1dfc-5c51-d14d-7d44967dca78.jpeg)

後は、検索キーワードを入力して検索するだけです。
使っていただけるとわかると思いますが、「めっちゃ早い」です。あと、ハイライトがかなり美しい感じがします。
統合開発環境を使っていない場合は、よくgrepでしのいでいたりnamazuなどを使ったりしていたのですが、一度Milkodeを使ってしまうともう戻れませんね。

ちなみにソースを開いた後のイメージは、こんな感じです。
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/47854/a4f61e40-3bf3-25cc-df7f-b3d5351283d8.jpeg)

# 環境構築用のVagrantfile
最後に、Milkodeを利用するための、Vagrantの環境構築スクリプトを記載します。

まずは、お決まりのVagrantfileから

```ruby:Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "centos64_6_5"
  config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"

  config.vm.define "for_milk" do |for_milk|
    for_milk.vm.network "hostonly", "192.168.55.15"
    for_milk.vm.provision "shell", path: "setup_rbenv.sh"
    for_milk.vm.provision "shell", path: "setup_milk.sh"
  end

end
```

setup_rbenv.sh→[Vagrant Tips#3 rbenvを使ったRuby環境をセットアップする(centos)](http://qiita.com/yukimura1227/items/740be1aaff186baf7e42)をご参照ください。

```bash:setup_milk.sh
#!/bin/bash
rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
yum makecache
yum install -y groonga groonga-devel
yum install -y gcc-c++

gem install milkode

if [ ! -d /vagrant/milkode_work ]
then
  mkdir /vagrant/milkode_work
fi

milk init --default

milk add /vagrant/milkode_work
```

これらのファイルを配置して、
「vagrant up」を実行して、無事起動できたら。
「vagrant ssh」でログインし、
「milk web -n --host 0.0.0.0 &」で
Milkodeの内蔵webアプリを起動してください。（上記コマンドを実行後は、exitで抜けてしまって構いません。）