プロジェクトで
Rubocopを使って
自動コードレビュー
してみた話
Appirits 吉田啓紀
🌟自己紹介
【会社】アピリッツ
• ゲーム系
• 式姫シリーズ
• アルフヘイムの魔物使い
• 受託系
• EC開発
• ASP提供
!
【個人】@cyber_yoshida
• バンドとか
• ウェブサービス作り
• 書籍管理サービスつくってます
!
【このスライド】
• Azusa Colors 使いました
• http://memo.sanographix.net/post/113681262780
こういう問題
ありませんか?
コードの書き方が
みんなバラバラ!
統一したい!
コーディングルール
作ろうか・・?
でも面倒くさい
そこで
Rubocop
Rubocop
って何ができる?
「メソッド長いよ」
「メソッドが複雑だよ」
「メソッド名良くないよ」
「空白/改行余計だよ」
「こう書けるよ」
などなど
これ、
コーディングルールに
ならない?
やってみた!
Rubocop
を使う
∼プロジェクト編∼
こんな
プロジェクト
です
ECシステムの開発
3∼5ヶ月くらい
5∼7人くらい
• 新卒
• 派遣の方
• Ruby1.9に慣れてる人
• Rails2, 3に慣れてる人
など
こんな
環境です
• Ruby2.1, Rails4.1
• Rubocop 0.24 

(最新は 0.29)
• Redmine
• GitLab
• Jenkins
メモ
!
MethodLength
Max: 30
!
ClassLength:
Max: 300
かんたんな
運用フロー
コードを書く
GitLabで
マージリクエスト
テストが走る
テストが走る
Rubocop も走る
OK ならマージ可能
詳細は
別スライドに!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
http://www.slideshare.net/cakeyoshida/
ss-31147447
わかったこと
☀️ 良い点
キレイに書こう、
と意識できる
コードを統一できる
後から
リファクタリング
しやすい
新しい構文を知る
良い機会
for example:
!
{ :foo => "bar" } => { foo: 'bar' }
!
[:hoge, :piyo] => %i( hoge piyo )
!
raise => fail
!
before_filter => before_action
⛅️ 課題
メンバーとの衝突
Aさん
「Rubocopに合わせる
とかえって汚くなる!」
「実装遅れる!」
無意味な
リファクタリング
Bさん
「メソッドが長い?
わかりました
分割します」
Before
def set_customer	
@customer = Customer.new	
@customer.first_name = params[:customer][:first_name]	
@customer.last_name = params[:customer][:last_name]	
@customer.hoge = params[:customer][:hoge]	
...	
...100行ほど...	
...	
@customer.valid?	
end
※注意:この例は、例として分かりやすくするために誇張したものです
After
def set_customer	
@customer = Customer.new	
set_customer1	
set_customer2	
set_customer3	
@customer.valid?	
end	
!
def set_customer1	
@customer.first_name = params[:customer][:first_name]	
@customer.last_name = params[:customer][:last_name]	
@customer.hoge = params[:customer][:hoge]	
...	
end	
!
def set_customer2	
...	
end	
!
!
def set_customer3	
...	
end
※注意:この例は、例として分かりやすくするために誇張したものです
Rubocopに怒られない
ね、キレイでしょ?
どうしてこうなった。。。
Rubocopは神ではなく
あくまでツール
まとめ
Rubocop、
導入の価値あり
ただし
メンバーの理解と
協力は必須
「やらされる」
では効果がない!
おまけ
Rubocop、
個人でも使ってます
が
初期設定のままだと
リファクタリング
強制ギプス感すごいです
おすすめ!
おわり

プロジェクトでRubocopを使って自動コードレビューしてみた話