LoginSignup
15
15

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-03-28

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

やりたいこと

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

2019/06/04 追記

↓こちらの記事で自動化できるようです(神)
まだ .rubocop_todo.yml で消耗してるの? - Feedforce Developer Blog

  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でコーディングルールを変更する

15
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15