Rails
GitHub
RuboCop
SideCI

既存のRailsクソコードの品質を機械的に上げていく(Github、Rubocop、SideCi)

More than 1 year has passed since last update.

なにごとも少しずつ、最初から完璧にやろとうしないのがコツだと思う。

やりたいこと

Github、Rubocop、SideCiを使って既存のプロダクトの糞コードを屠る

手順

console
#rubocopをインストールし、.rubocop_todo.ymlを作成する
$ gem install rubocop
$ rubocop --auto-gen-config
$ echo 'inherit_from: .rubocop_todo.yml' >> .rubocop.yml

下準備OK

ここでの状態、既存の糞コードを含めて正しい状態として、

console
$ rubocop

とした時にチェック結果が0になる。

.rubocop_todo.ymlとはすなはちTODOリストになっています。

中身をみるとこんな感じ

.rubocop_todo.yml
# Offense count: 95
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, SupportedStyles.
# SupportedStyles: with_first_parameter, with_fixed_indentation
Style/AlignParameters:
  Enabled: false

既存のコードで引っか掛かるチェック項目をfalseにしている。

つまり、このTODOリストをtrueにして一つづつこなしていこうというものです。
以下クソコード撲滅ワークフロー

キュクレイン撲滅ワークフロー(ノムリッシュ翻訳Lv4

  1. .rubocop_todo.ymlから一つチョイス(チームでその規約が必要かどうかはGitHubのIssueなどで議論)
  2. rubocop -a --only Style/Hogehoge(HogeHogeは1で選んだ規約)、沢山変更がある場合は30〜40ファイルぐらいをコミットして、PullRequest出してマージを、毎日少しずつ行う。(-aオプションは自動で直してくるrubocopの機能)
  3. 2.で行った規約一つが片付いたら、.rubocop_todo.ymlから.rubocop.ymlへ移して、trueにして、本体にマージする。
  4. SideCiに登録してリポジトリを登録しておく
  5. 4.を行うことによりPullRequestに対して、指摘(Githubコメント)をしてくれる様になり、よっぽど人格がネジ曲がったひとがいないかぎり、修正してくれるでしょう。(そのPullReauestのブランチに対して、自動修正のPullRequestを作ってくれる機能もあります。)
    image

  6. あとは.rubocop_todo.ymlがなくなるまで、1.~3.を繰り返すだけで、少しずつ、少しずつコードが綺麗になります。

※注意点追記
- 2.で行う時は.rubocop_todo.yml,.rubocop.ymlで実行される状態にしておかないとできないっぽい
- rubocopの-aoptionが効くには(自動で修正してくれる)、規約が対応している必要がある

.rubocop_todo.yml# Cop supports --auto-correct.と書いてあれば大丈夫
書いてなければ、規約自体をONにして新しく違反が増えないようにしつつ、ちょくちょく既存のコードを手動で直す必要がある(涙)

まとめ

  • 現状上記のフローで徐々にコードを綺麗にできていっています。
  • こつ
    • 1回1回の作業にちゃんと意味があるので、気長にすこしずつやることに意味があるかなと思います。
    • SideCiが可視化してくれるので、品質が保たれるし、何より指摘が普通に勉強になります。
  • SideCiは無料で使い始められるようです。そんなに高くないので会社に相談してみましょう。

参考URL

はちびる日記:Rubocopでコーディングルールを変更する