Mry を使って RuboCop のアップデートを楽しよう
TL;DR
- GitHub - pocke/mry: Mry Migrates .Rubocop.Yml
- Mry を使うと、コマンド一発で非互換にやられた
.rubocop.yml
をアップデート出来る
前置き
RuboCop のバージョンをご存知でしょうか? 現在(2017/04/24)の RuboCop の最新バージョンは、0.48.1 です。バージョン 1.0.0 未満です。
これが何を指しているのかと言うと、バージョン 1.0.0 が来ていないことを理由に、RuboCop は積極的に Breaking Changes を入れてきます。
つまり、あなたが今使っている.rubocop.yml
は、次の RuboCop のバージョンアップの際にはそのままでは使えないものになっている可能性があるということです(事実、RuboCop の次期リリースには特大の非互換が予定されています)。
これは RuboCop のユーザーが RuboCop をアップデートする際の大きな障壁となります。
今までは RuboCop のユーザーはアップデートの度に設定ファイルのエラーと戦い、CHANGELOG を見比べて Breaking Change に対応してきました(あるいは、RuboCop のバージョンを塩漬けにしてきました)。
Mry の登場
この問題を解決するために、Mry は生まれました。 以下の動画をご覧いただくと、Mry の動作がわかると思います。
Mry は .rubocop.yml
に含まれる古い記述を、自動的に新しい記述に変更することが出来ます。
例えば、上記の動画ではLint/Eval
がSecurity/Eval
にリネームされています。
これは RuboCop 0.47.0 での名前の変更に伴う修正です。
Installation & Usage
Mry は Rubygems.org に公開されているため、gem install mry
でインストールすることが可能です。
実行する際は、.rubocop.yml
のパスを指定します。
また、特定のバージョンまでのアップデートを行いたい場合、--target
オプションを指定します。
$ gem install mry Successfully installed mry-0.48.1.0 1 gem installed # 最新の RuboCop に対応する .rubocop.yml にアップデートしたい場合 $ mry .rubocop.yml # RuboCop 0.47.0 に対応する .rubocop.yml にアップデートしたい場合 $ mry --target=0.47.0 .rubocop.yml
まとめ
Mry を使うと、従来では人間が CHANGELOG を確認して.rubocop.yml
を手で直さなければいけなかった作業を、自動化することが可能です。
これを期に RuboCop のバージョンを上げてみてはいかがでしょうか?