はじめに
未経験からエンジニアに転職して、3ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
今回はRubocopのアップデートで学んだことを残しておこうと思い、記事を書きます。
rubocop-rails_config の導入
こちらがrubocop-rails_configというgemです。
「何かしらRuboCop設定のレールが欲しいよね〜」というところで閃き、「だったらrailsチームの用意した公式rubocop.ymlを使えばいいじゃない」ということで冒頭のRailsとほぼ同じ設定を持ったrubocop-rails gemを作りました。(https://blog.toshimaru.net/rubocop-rails/)
このgemを使用することで↓の設定とほぼ同じrubocop.ymlファイルが作れるというものです!
なにが嬉しいのか
- rubocopをレールに乗せて使用できる(可能性が上がる)
- チームごとの設定を決める時間を短縮できる
- Railsのアップデートを比較的安全にできる
私の場合は3つ目がこのgemを採用する主な理由となりました。
railsのアップデート作業の前にrubocopの設定を整えました。
大元のrailsと同じrubocopの設定を使用すれば、予期せぬバグを減らすことができるだろうという見込みです。
rubocop のアップデート
私がrubocopをアップデートするときの手順を紹介します。
誰かの参考になれば嬉しいです。
バージョンアップの手順
- gem: rubocop-rails_configをインストール
- gem: rubocop を最新にアップデート
- $ rubocop を実行(auto-correct しないよう注意)
- 結果を参照する
- correctable が付いているcopを検索して、設定の内容を把握する
- railsのリポジトリを見て、railsではどう設定されているのか確認する
- 自分のレポジトリに反映させて、auto-correct するか検討する
- RuboCopの警告をコメントで無効化する方法などを検討して、必要ないコップは除外する(参考:https://qiita.com/tbpgr/items/a9000c5c6fa92a46c206)
- 上記を繰り返して必要な部分だけauto-correct して反映させる
- 最後に、スペックを実行する
- テストのカバレッジを確認する
このような手順で1つずつ慎重にアップデートしました。
大元のrailsの設定と自分のプロジェクトの設定で齟齬がある場合は、下記のように個別に設定を上書きしていくことになります。(4~8あたりの部分でやります)
Layout/EmptyLinesAroundAccessModifier:
Enabled: true
EnforcedStyle: around
留意点(rubocop コマンド実行時)
RuboCop 0.87からの変更点です。
結論↓を実行するのが安全です。
$ rubocop -a
$ rubocop -a
$ rubocop --auto-correct
↑を使った場合に、自動修正を備えたすべての Cop が適用されていました。
つまり、安全に修正できない可能性があるコードまで自動修正されていました。
RuboCop 0.87以降では、安全に修正できる(Safeのみ)コードのみが自動修正されるようになりました。
つまり RuboCop 0.59 で導入された rubocop --safe-auto-correct が自動修正のデフォルトになったということです。
unsafe なコードも自動修正したい場合は↓をすればOKです。
$ rubocop -A
$ rubocop --auto-correct-all
参考:(https://koic.hatenablog.com/entry/rubocop-safe-autocorrect-by-default)
さらに、RuboCop 1.30 で非推奨になった自動修正オプションがあります。
RuboCop 1.30 で、自動修正する際のオプションである --auto-correct と --auto-correct-all は非推奨になり、それぞれ --autocorrect と --autocorrect-all になりました。
安全な自動修正
rubocop -a
rubocop --autocorrect
安全でない自動修正
rubocop -A
rubocop --autocorrect-all
参考:(https://koic.hatenablog.com/entry/change-rubocop-auto-correct-to-rubocop-autocorrect)
結論↓を実行するのが安全です。
$ rubocop -a
留意点(rubocop ルール追加時)
ルールをバージョンアップと同時に有効化してもよい場合、以下のように設定します。
AllCops:
NewCops: enable
rubocopの新ルールの適用タイミングについては以下の記事が参考になりました。
新ルールがデフォルトで有効となるタイミング
ドキュメントによると「メジャーバージョンアップによって保留状態のルールが一括で有効化される」とのことなので、RuboCop1.0リリースのタイミングで有効になると思われます。
なお、1.1以降に追加されるルールは0.82~0.93と同様にペンディングとして追加され、2.0で一斉に有効となるようです。
ですので、この記事は今後も有効な内容となると思われます。
最後に
これで安全にrubocopをアップデートできるのではないでしょうか。
そして、railsのアップデートも比較的安全にできるかと思います。
また、rubocopを最新の状態にすると、
Rubyのアップデートに伴う新しい記法を提案してくれたりします。
概要
Ruby >= 2.6 でmap.to_h
やcollect.to_h
を使って、to_h
だけで書けるようなものを探します。
NOTE:Style/HashTransformKeys
とStyle/HashTransformValues
は、ハッシュキーやハッシュ値のみを変換する場合にもこのパターンを変更します。
今回の記事が誰かのためになれば嬉しいです!
最後まで読んでいただきありがとうございました!