ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

ソースコードレビューシステム 宍道湖を入れてみました

つらつらと眺めていたら、ちょっと気になる文章を見まして。

Chromeの開発に使用されているツール・・・自動ビルド・自動単体テストのためにBuildbot、コードレビューのためにrietveldというツールが使用されている


そういや、コードレビューソフトで、MOONGIFTさんが宍道湖というソフトを出されてたなぁ。と思い出しました。
でまぁ、ちょっくら入れてみようかな?と思った次第。

情報源

参考となる情報源は、以下ですね。


意外と少ないなぁ。コードレビューって興味を引くソフトでは無いのですかね?
…まぁ、身の回りの業○でもコードレビューって、あまり見聞きしないからなぁ。
でも、著名な開発管理の本を読むと、一番効率の良い品質の上げ方は「コードレビュー」(と類するやり方)なんですよね。

最初に

え〜、先に言うと、かなり試行錯誤して入れた為、「これでOKだろう」と言えるパターンを確立していません。(すんません、Rubyは不勉強なんです)
なので、試行錯誤の順番だけをメモ書きしますです。


ちなみに、ruby 1.8.6とgemが使える環境に入れてます。

インストールして動かすまでの順番

1.まず、開発の本山からSVNソースコードを取得します。

上記サイトのInstall項で、'$ svn checkout http://shinjiko.googlecode.com/svn/trunk/ shinjiko'と書かれているので、TortoiseSVN等を使って取得してください。


2.宍道湖は、railsの上で動くそうなので、以下のようにしてrailsを入れます。

$ gem install -v=2.0.2 rails
Bulk updating Gem source index for: http://gems.rubyforge.org
Install required dependency rake? [Yn]
Install required dependency activesupport? [Yn]  y
Install required dependency activerecord? [Yn]  y
Install required dependency actionpack? [Yn]  y
Install required dependency actionmailer? [Yn]  y
Install required dependency activeresource? [Yn]  y
Successfully installed rails-2.3.2
...


3.他にも色々と入れる必要があるようです。
今回は、以下のコマンドを叩いて入れました。

$ gem install gettext diff-lcs
...
$ gem update --system
...
$ gem install gettext -v 1.10.0
...
$ gem install sqlite3-ruby -v 1.2.3
...
$ gem install will_paginate
...


4.次に、 config/environments のフォルダに、development_sample.rb があるので、development.rb にリネームします。


5.次に、 config フォルダに、database.yml を用意します。
まぁ、database.sample.yml があるので、これをリネームすれば良いでしょう。
ただ、このサンプル。MySQLをデータベースに使う設定になっていますので、sqliteをデータベースに使うには、少々変更の必要ありです。
今回は、database.ymlを以下のようにしました。

# SQLite version 3.x
#   gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db\production.sqlite3
  timeout: 5000


6.database.ymlを準備したら、rakeコマンドで データベースを作ります。

$ rake db:migrate
(in F:/Wacky/Test/review_tool/shinjiko/src)
== 1 CreateUsers: migrating ===================================================
-- create_table("users", {:force=>true})
   -> 0.1250s
...


7.よしよし、と思って'ruby script\server'すると、以下で止まります。

$ ruby script\server
=> Booting WEBrick...
c:/tool2/ruby18/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_ori
ginal_require': no such file to load -- gettext/rails (MissingSourceFile)
        from c:/tool2/ruby18/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:3
1:in `require'
...

この解決法ですが、GEM_HOME環境変数が関係するそうです。

ちなみに、自分の場合、コードの修正ではうまく行かなかったので、直接コマンドラインから環境変数を設定して逃げました。

$ set GEM_HOME=C:\tool2\ruby18\lib\ruby\gems\1.8


8.ここまで来ると、'ruby script\server'で、WEBrickが「ある程度」まで起動できます。

$ ruby script\server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2009-06-20 17:47:45] INFO  WEBrick 1.3.1
[2009-06-20 17:47:45] INFO  ruby 1.8.6 (2007-03-13) [i386-mswin32]
[2009-06-20 17:47:45] INFO  WEBrick::HTTPServer#start: pid=6768 port=3000
F:/Wacky/Test/review_tool/shinjiko/src/app/controllers/issue_controller.rb:20: w
arning: don't put space before argument parentheses
...

上の'warning: don't put space before argument parentheses'ってのは何だろう?と思ったのですが、答えは以下のsiteに書いてあります。
つまり、メソッドと引数の間に空白を入れるな。と。


9.上記対応で、ブラウザに何か表示できる所まで進みますが、何かおかしい。
logフォルダに、development.logファイルが出来ているので開くと、以下のメッセージがあります。

/!\ FAILSAFE /!\  Sat Jun 20 17:59:16 +0900 2009
  Status: 500 Internal Server Error
  You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    c:/tool2/ruby18/lib/ruby/1.8/cgi.rb:1166:in `[]'
...

これも、答えがありました。

config\environment.rb の最後に、以下のコードを突っ込む事で対応できます。

require 'will_paginate'
require 'smtp_tls'

class CGI
  module QueryExtension
    alias index_without_fix :[]
    def [] (key)
      return nil unless @params[key]
      index_without_fix(key)
    end
  end
end


10.ここまで来ると、以下のログイン画面が出るようになります。

1
1 posted by (C)wacky

$ ruby script\server -e development
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2009-06-21 00:12:42] INFO  WEBrick 1.3.1
[2009-06-21 00:12:42] INFO  ruby 1.8.6 (2007-03-13) [i386-mswin32]
[2009-06-21 00:12:42] INFO  WEBrick::HTTPServer#start: pid=7768 port=3000
127.0.0.1 - - [21/Jun/2009:00:12:44 東京 (標準時)] "GET / HTTP/1.1" 302 101
- -> /
127.0.0.1 - - [21/Jun/2009:00:12:45 東京 (標準時)] "GET /account/login HTTP/1.1"
 200 2301
- -> /account/login
127.0.0.1 - - [21/Jun/2009:00:12:45 東京 (標準時)] "GET /stylesheets/styles.css?
1245474226 HTTP/1.1" 304 0
http://localhost:3000/account/login -> /stylesheets/styles.css?1245474226
127.0.0.1 - - [21/Jun/2009:00:12:45 東京 (標準時)] "GET /javascripts/script.js?1
245474225 HTTP/1.1" 304 0
http://localhost:3000/account/login -> /javascripts/script.js?1245474225
127.0.0.1 - - [21/Jun/2009:00:12:45 東京 (標準時)] "GET /images/rails.png?124547
4225 HTTP/1.1" 304 0
http://localhost:3000/account/login -> /images/rails.png?1245474225

安心するのは早くて、実はログイン画面の先に進もうとすると、以下のエラーが出ます。

2
2 posted by (C)wacky


11.「no such file to load -- svn/client」というエラーは、svnrubyバインディングをインストールする必要があるようです。
とりあえず画面だけ見たい!という場合は、app/models/issue.rb の所を少し修正すればOKです。

require 'net/http'
require 'net/https'
#require 'svn/client'
...

3
3 posted by (C)wacky

おぉ、うまくログインできました。

ごめんなさい

すんません、ここまで動かすので一杯一杯でした。
本当は、Subversionとのリポジトリ連携とかの設定を掛けて試すべきなんでしょうけど、それらしいドキュメントが何も見当たらなかったので、投げ出してしまいました。