なにごとも少しずつ、最初から完璧にやろとうしないのがコツだと思う。
やりたいこと
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の
-a
optionが効くには(自動で修正してくれる)、規約が対応している必要がある
.rubocop_todo.yml
に# Cop supports --auto-correct.
と書いてあれば大丈夫
書いてなければ、規約自体をONにして新しく違反が増えないようにしつつ、ちょくちょく既存のコードを手動で直す必要がある(涙)
まとめ
- 現状上記のフローで徐々にコードを綺麗にできていっています。
- こつ
- 1回1回の作業にちゃんと意味があるので、気長にすこしずつやることに意味があるかなと思います。
-
SideCi
が可視化してくれるので、品質が保たれるし、何より指摘が普通に勉強になります。
- SideCiは無料で使い始められるようです。そんなに高くないので会社に相談してみましょう。