なにごとも少しずつ、最初から完璧にやろとうしないのがコツだと思う。
やりたいこと
Github、Rubocop、SideCiを使って既存のプロダクトの糞コードを屠る
手順
# rubocopをインストールし、.rubocop_todo.ymlを作成する
$ gem install rubocop
$ rubocop --auto-gen-config
$ echo 'inherit_from: .rubocop_todo.yml' >> .rubocop.yml
下準備OK
ここでの状態、既存の糞コードを含めて正しい状態として、
$ rubocop
とした時にチェック結果が0になる。
.rubocop_todo.ymlとはすなはちTODOリストになっています。
中身をみるとこんな感じ
# 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
-
.rubocop_todo.ymlから一つチョイス(チームでその規約が必要かどうかはGitHubのIssueなどで議論) -
rubocop -a --only Style/Hogehoge(HogeHogeは1で選んだ規約)、沢山変更がある場合は30〜40ファイルぐらいをコミットして、PullRequest出してマージを、毎日少しずつ行う。(-aオプションは自動で直してくるrubocopの機能) -
2.で行った規約一つが片付いたら、.rubocop_todo.ymlから.rubocop.ymlへ移して、trueにして、本体にマージする。 -
SideCiに登録してリポジトリを登録しておく
-
4.を行うことによりPullRequestに対して、指摘(Githubコメント)をしてくれる様になり、よっぽど人格がネジ曲がったひとがいないかぎり、修正してくれるでしょう。(そのPullReauestのブランチに対して、自動修正のPullRequestを作ってくれる機能もあります。)

-
あとは
.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は無料で使い始められるようです。そんなに高くないので会社に相談してみましょう。