pockestrap

Programmer's memo

Mry を使って RuboCop のアップデートを楽しよう

TL;DR

前置き

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 の登場

github.com

この問題を解決するために、Mry は生まれました。 以下の動画をご覧いただくと、Mry の動作がわかると思います。

f:id:Pocke:20170424142826g:plain

Mry は .rubocop.yml に含まれる古い記述を、自動的に新しい記述に変更することが出来ます。
例えば、上記の動画ではLint/EvalSecurity/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 のバージョンを上げてみてはいかがでしょうか?