Rails Best Practices を CI (Jenkins) で確認する
- 2011.09.15
- CI

こんにちは。ほりいです。 今日は rails-bestpractices の話をします。
Ruby on Rails で開発するときのベストプラクティスをまとめている Rails Best Practices というサイトがあります。先日の RubyKaigi 2011 で、このサイトのベストプラクティスに従っていないコードを指摘してくれる gem である rails_best_practices についての 発表がありました 。
今回はそれを CI に組み込んでみた話をしたいと思います。
とりあえず rails_best_practices を実際のプロジェクトのソースに対して使ってみることにします。(一応使われている項目の確認はしておきましょう)
インストール〜実行
gem install rails_best_practices cd path/to/rails/root rails_best_practices
ほとんどが 行末のスペースを除去せよ と render に与えるオプションが古い というエラーでしたが、257 箇所エラーだよと教えてもらいました。
んー
多いですね。
Jenkins
このプロジェクトではこのエラー(?)を少しずつ直していこうということになりました。とはいえ、現状 rake spec と関連もないため、「たまに回してみる」などという不確実な方法になりがちです。
そこで、CI のレベルでトラッキングします。弊社では Jenkins を使っているので、このプラグインを利用して記録を取ることにします。
Rails の指標を測るために使われる Jenkins のプラグインには RubyMetrics plugin というものがあります。これを使えば、 rcov によるカバレッジの測定などはすぐ組み込むことができます。
できればこれに組み込めるのが理想なので、上記ソースを見ましたが、大変そうなので今回はパスし、汎用的なプラグインを利用します。
Plot Plugin
Jenkins の汎用的なグラフ描画プラグインに Plot Plugin というものがあります。今回はこれを利用します。
まず、 Jenkins のプラグインマネージャーから「Plot Plugin」を探してインストールします。
次に、プロジェクトの設定を書きます。
まずは Plot Plugin の設定。
- 「ビルドデータのプロット」にチェックします。
- 「プロットを追加」して設定の追加を開始します。
- 重要なのは「データ系列ファイル」の部分で、このファイルに結果を出力します。
- 「プロパティファイルからデータを読み込む」にして、この形式に合うような結果出力を行うよう、調整していきます。
ここでは reports/rails_best_practices.properties に出力することにしています。このファイルに指定されたデータ形式で結果を出力するようなスクリプトを書きます。
https://gist.github.com/1173288
#!/bin/sh cd `dirname $0`/.. OUTDIR=reports OUTFILE=$OUTDIR/rails_best_practices.properties TMPFILE=`mktemp $OUTDIR/rails_best_practices.XXXXXX` mkdir $OUTDIR 2> /dev/null rails_best_practices > $TMPFILE STATUS=$? if [ $STATUS -eq 0 ]; then echo "YVALUE=0" > $OUTFILE else NUM=`awk '/^Found [0-9]+ errors/{ print $2; }' < $TMPFILE` echo "YVALUE=$NUM" > $OUTFILE fi rm $TMPFILE
あとは、このスクリプトをビルドの途中で実行しておきます(もちろん、Jenkins でのビルド環境で rails_best_practices をインストールしておくのを忘れずに)
結果表示
うまくいっていれば左メニューの「プロット」からこのようなグラフを見ることができるはずです。
まとめ
rails_best_practices で確認できるプラクティスは “Rails Best Practices” の一部ですが、それでも指標を出せることは意義が大きいと思います。そして、それを CI 見える化しておくことはとても参考になると思います。
あとは誰か RubyMetrics で使えるようにしてくれると……(他力本願)。
それではまた。
-
前の記事
Aiming 開発者ブログを開設致しました 2011.08.04
-
次の記事
インターンシップ体験記 2011.09.20