Rista Tech Blog

株式会社リスタの技術?ブログ

rubocopのPending Copsについて

リモートワークにも徐々になれてきましたが、横で嫁が同じように仕事してるからやらないといけない気分になるけど、一人だと絶対家で仕事なんてできないだろうなと思う@mikedaです。

rubocopのバージョン0.80から、実行時に以下のような警告が表示されるようになりました。

The following cops were added to RuboCop, but are not configured.
Please set Enabled to either `true` or `false` in your `.rubocop.yml` file:
 - Layout/EmptyLinesAroundAttributeAccessor (0.83)
 - Layout/SpaceAroundMethodCallOperator (0.82)
 - Lint/RaiseException (0.81)
 - Lint/StructNewOverride (0.81)
 - Style/HashEachMethods (0.80)
 - Style/HashTransformKeys (0.80)
 - Style/HashTransformValues (0.80)
 - Style/SlicingWithRange (0.83)
For more information: https://docs.rubocop.org/en/latest/versioning/

「バージョンアップごとに新しいCopがデフォルト有効で追加され、毎回CIがぶっ壊れていた。 新しく追加されるCopは次のメジャーバージョンリリースまでPending状態になるようにし、明示的に有効・無効が指定されていない場合は警告メッセージを表示するようにした。」

というようなことらしいです。

docs.rubocop.org

※次のメジャーバージョンアップというと1.0のことだと思うのですが、いつになるんでしょうか。

明示的な有効・無効の指定には、CopごとにEnabled: <true|false> を指定してもいいですが、

Style/HashEachMethods:
  Enabled: true

.rubocop.ymlで NewCops: <enable|disable>を指定することで一括指定が可能です。

AllCops:
  NewCops: enable

リスタでは、良さそうなCopは随時取り入れる方針のため、この設定をenableにしています。

ちなみに、リスタで管理しているgithubレポジトリのgemは、railsなどごく一部のgemを除いてGemfileでバージョンが固定されておらず、circleci-bundle-update-prを使って、毎週自動的に更新可能な全てのgemをバージョンアップするPRが自動作成されます。

f:id:mikeda:20200519143951p:plain

各レポジトリの管理者は更新内容を確認して、問題なさそうならマージ&デプロイをします。 この際、新しいCopの追加でCIがこけていた場合は、みんなで正式に追加するしないの相談、追加する場合はコードの修正を行います。
※ package.jsonも同様に自動更新されています。

毎週アップデートするのはそれはそれで手間がかかりますが、新しいセキュリティパッチや機能追加はすぐに取り込みたいですし、ためてためて、セキュリティ関連の問題やrailsバージョンアップがあった時などに一気に更新するのはたいへんなので、出来る限り細かく・継続的にライブラリの更新をしています。