「Milkode」をWindows 7(64bit)にインストールしました

大量のソースコードを縦断的に検索できるツール「Milkode」をインストールしてみました。

Milkode - 行指向のソースコード検索エンジン

 

インストールの手順は以下の記事を参考にさせてもらいました。

Rubyを全く触ったことない人がMilkodeを導入するまで - Qiita

ソースコード検索ツール milkode をつかってみた - UNIX的なアレ

バージョン等がちょいちょい異なるのと、少しつまずいた部分があるので、その辺りを書いてみます。

Milkodeをインストール

RubyInstallerとDevelopment Kitをダウンロード

以下のサイトから最新版をダウンロードします。

RubyInstaller for Windows

RubyInstallerとDevelopment Kitをインストール

RubyInstallerをインストール

ダウンロードした「rubyinstaller-2.3.0-x64.exe」を実行してセットアップを行います。

デフォルトのままであれば、C:\Ruby23-x64フォルダに展開されます。

Development Kitをインストール

ダウンロードした「DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe」を実行してセットアップを行います。

そのまま展開すると、指定したフォルダ直下に資材がばらまかれるため、C:\DevKitなどを指定します。

展開が完了したら、Development Kitをコマンド実行でインストールします。

C:\DevKit>C:\Ruby23-x64\bin\ruby dk.rb init
[INFO] found RubyInstaller v2.3.0 at C:/Ruby23-x64

Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.

RubyInstallerのインストール時に環境変数を通していない場合はrubyコマンドがそのままでは使えないので、パスを指定して実行します。

 続いてインストール。

C:\DevKit>C:\Ruby23-x64\bin\ruby dk.rb install
[INFO] Updating convenience notice gem override for 'C:/Ruby23-x64'
[INFO] Installing 'C:/Ruby23-x64/lib/ruby/site_ruby/devkit.rb'

Milkodeをインストール

参考にした記事ではgemコマンドでいろいろなライブラリをインストールしていましたが、手元の環境で現在のバージョンを使って構築したところ、とくに他のライブラリは不要でした。

以下のコマンドを実行してMilkodeをインストールします。

C:\DevKit>C:\Ruby23-x64\bin\gem install milkode
Fetching: os-0.9.6.gem (100%)
Successfully installed os-0.9.6
Fetching: sane-0.25.8.gem (100%)
Successfully installed sane-0.25.8
Fetching: whichr-0.3.6.gem (100%)
Successfully installed whichr-0.3.6
Fetching: thor-0.19.1.gem (100%)
Successfully installed thor-0.19.1
  ~~~省略~~~
Successfully installed haml-4.0.7
Fetching: coderay-1.1.1.gem (100%)
Successfully installed coderay-1.1.1
Fetching: milkode-1.8.7.gem (100%)
Successfully installed milkode-1.8.7
Parsing documentation for os-0.9.6
Installing ri documentation for os-0.9.6
Parsing documentation for sane-0.25.8
Installing ri documentation for sane-0.25.8
Parsing documentation for whichr-0.3.6
Installing ri documentation for whichr-0.3.6
Parsing documentation for thor-0.19.1
Installing ri documentation for thor-0.19.1
Parsing documentation for rack-1.6.4
Installing ri documentation for rack-1.6.4
Parsing documentation for eventmachine-1.2.0.1-x64-mingw32
Installing ri documentation for eventmachine-1.2.0.1-x64-mingw32 ~~~省略~~~ Parsing documentation for coderay-1.1.1
Installing ri documentation for coderay-1.1.1
Parsing documentation for milkode-1.8.7
Installing ri documentation for milkode-1.8.7
Done installing documentation for os, sane, whichr, thor, rack, eventmachine, daemons, thin, highline, termcolor, tilt, rack-protection, sinatra, sass, pkg-config, hashie, groonga-command, gqtp, groonga-client, io-like, archive-zip, rroonga, addressable, launchy, i18n, haml, coderay, milkode after 210 seconds
28 gems installed

無事、インストールできました。

Milkodeを初期化

インストール完了後は、Milkodeを初期化し、ソース検索の対象となるプロジェクトを作成します。

C:\Ruby23-x64\bin>milk init
create     : C:/Users/<ユーザ名>/.milkode/milkode.yaml
create     : C:/Users/<ユーザ名>/.milkode/db/milkode.db created.

プロジェクトは、ローカルのソースが格納されているフォルダを指定することもできますし、インターネット上のソースアーカイブやSVNなんかも指定できるようですが、ここでは割愛します

C:\Ruby23-x64\bin>milk add ソース検索対象のフォルダパス

Milkodeを起動

Milkodeを起動するには、以下のコマンドを実行します。既定のWebブラウザが立ち上がります。

C:\Ruby23-x64\bin>milk web

ところが、上記の手順でインストールこそ完了しているものの、コマンドを実行すると以下のようなエラーが発生しました。

C:\Ruby23-x64\bin>milk web
C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- coderay/scanner (LoadError)
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cdweb/lib/coderay_php_utf8.rb:9:in `<top (required)>'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cdweb/lib/coderay_wrapper.rb:13:in `<top (required)>'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cdweb/lib/command.rb:8:in `<top (required)>'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cdweb/app.rb:16:in `<top (required)>'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby23-x64/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from config.ru:1:in `block in <main>'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
        from config.ru:in `new'
        from config.ru:in `<main>'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `eval'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `new_from_string'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb:40:in `parse_file'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:299:in `build_app_and_options_from_config'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:208:in `app'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:336:in `wrapped_app'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:272:in `start'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cdweb/cli_cdweb.rb:33:in `execute_with_options'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cli.rb:202:in `web'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/lib/milkode/cli.rb:263:in `invoke_command'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/milkode-1.8.7/bin/milk:9:in`<top (required)>'
        from C:/Ruby23-x64/bin/milk:23:in `load'
        from C:/Ruby23-x64/bin/milk:23:in `<main>'

あいにく、Rubyには疎いのですが、エラーを読む限りではC:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\milkode-1.8.7\lib\milkode\cdweb\lib\coderay_php_utf8.rbの冒頭に定義された「require 'coderay/scanner'」という記述が悪さをしているようです。

この定義の実体はC:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\coderay-1.1.1\lib\coderayフォルダにある「scanners.rb」だと思いますが、記述の「scanner」に対し実体のファイル名が「scanners」です。

とりあえず、「scanners.rb」ファイルをコピーし、「scanner.rb」という名前にリネームして同じ場所に置いてあげたら、無事に起動するようになりました。なんだこれ。

Milkodeに外部からアクセス

同一LAN内の他端末からMilkodeにアクセスしたい場合は、起動時のコマンドを以下にすれば良いようです。

C:\Ruby23-x64\bin>milk web --host 0.0.0.0

自端末からはhttp://localhost:9292、他端末からはhttp://<IPアドレス>:9292でアクセスできます。ポート番号は変更可能です。

末尾に-nオプションを付与して起動することで、起動時にブラウザが立ち上がるのを抑止することができます。

その他オプションは-helpから参照可能です。

C:\Ruby23-x64\bin>milk web -help
Usage:
  milk web

Options:
      [--customize], [--no-customize]    # Create customize file.
      [--db=DB]                          # Database dir.
                                         # Default: C:/Users/sh/.milkode
  -n, [--no-browser], [--no-no-browser]  # Do not launch browser.
  -o, [--host=HOST]                      # Listen on HOST.
                                         # Default: 127.0.0.1
  -p, [--port=PORT]                      # Use PORT.
                                         # Default: 9292
  -s, [--server=SERVER]                  # Use SERVER.
                                         # Default: thin
  -u, [--url=URL]                        # Relative URL. (Default: "/")
  -g, [--gomilk], [--no-gomilk]          # Allow "http://127.0.0.1:9292/gomilk"
  -h, [--help], [--no-help]              # Help message.
      [--version], [--no-version]        # Show version.

Startup web interface

 

長くなりましたが、以上です。