0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】Rubocopのアップデートとrubocop-rails_configの導入

Posted at

はじめに

未経験からエンジニアに転職して、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をアップデートするときの手順を紹介します。
誰かの参考になれば嬉しいです。

バージョンアップの手順

  1. gem: rubocop-rails_configをインストール
  2. gem: rubocop を最新にアップデート
  3. $ rubocop を実行(auto-correct しないよう注意)
  4. 結果を参照する
  5. correctable が付いているcopを検索して、設定の内容を把握する
  6. railsのリポジトリを見て、railsではどう設定されているのか確認する
  7. 自分のレポジトリに反映させて、auto-correct するか検討する
  8. RuboCopの警告をコメントで無効化する方法などを検討して、必要ないコップは除外する(参考:https://qiita.com/tbpgr/items/a9000c5c6fa92a46c206)
  9. 上記を繰り返して必要な部分だけauto-correct して反映させる
  10. 最後に、スペックを実行する
  11. テストのカバレッジを確認する

このような手順で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 ルール追加時)

ルールをバージョンアップと同時に有効化してもよい場合、以下のように設定します。

rubocop.yml
AllCops:
  NewCops: enable

rubocopの新ルールの適用タイミングについては以下の記事が参考になりました。

新ルールがデフォルトで有効となるタイミング
ドキュメントによると「メジャーバージョンアップによって保留状態のルールが一括で有効化される」とのことなので、RuboCop1.0リリースのタイミングで有効になると思われます。
なお、1.1以降に追加されるルールは0.82~0.93と同様にペンディングとして追加され、2.0で一斉に有効となるようです。
ですので、この記事は今後も有効な内容となると思われます。

最後に

これで安全にrubocopをアップデートできるのではないでしょうか。
そして、railsのアップデートも比較的安全にできるかと思います。

また、rubocopを最新の状態にすると、
Rubyのアップデートに伴う新しい記法を提案してくれたりします。

概要
Ruby >= 2.6 で map.to_hcollect.to_h を使って、 to_h だけで書けるようなものを探します。
NOTE: Style/HashTransformKeysStyle/HashTransformValues は、ハッシュキーやハッシュ値のみを変換する場合にもこのパターンを変更します。

今回の記事が誰かのためになれば嬉しいです!
最後まで読んでいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?