RuboCop Rails 2.2.1 をリリースした

Rails/TimeZone cop で DateTime まで警告の対象に含んでいたことで困っている声が多かったので、七夕にリリースしていた RuboCop Rails 2.2 系でその auto-correct も改善したバージョン。

github.com

いまのところ RuboCop Rails 2.2 系は 7月の Rails/OSS パッチ会で Time.newTime.zone.new に置き換えるのはともかく、DateTime.newTime.zone.new といった異なるオブジェクトに置き換えるのはおかしいという同一見解を得て対応したものが入っているので、アップグレードしておくのがおすすめです。

RuboCop 0.72がリリースされた

主な変更は以下です。

非互換の変更

Rails cops が削除された

移行期間にしていた RuboCop 0.71 が終わったことから、当初の予定どおり Rails cops が削除されました。

引き続き Rails cops を使う場合の代替は rubocop-rails gem を使うようにしてください。

koic.hatenablog.com

rubocop -R/--rails が消された

上述のとおり Rails cops が削除されたため不要なオプションとなったため削除されました。

Layout/IndentationConsistency cop の EnforcedStyle: rails オプション名が変わった

スタイルを表現する名前として、オルタナティブオプションの名前である EnforcedStyle: railsEnabledStyle: indented_internal_methods になりました。例えば rubocop-rails_config のユーザーに影響が出ます。

github.com

追加された cop

Gemspec/RubyVersionGlobalsUsage cop が追加された

gemspec 中で RUBY_VERSION を使わないようにというもので、pocke さんの提案がベースになったもの。日本語文書としては sue445 さんのエントリに詳しい。

sue445.hatenablog.com

Style/FloatDivision cop が追加された

The Ruby Style Guide に追加された Float Division の実装となる。

rubystyle.guide

デフォルトのルールは以下。

# bad
a.to_f / b.to_f

# good
a.to_f / b
a / b.to_f
a.fdiv(b)

追加されたオプション

Style/IfInsideElse cop に AllowIfModifier オプションが追加された

Rails リポジトリでのカスパーと kamipo さんの話がベースになったオプション。

有効にすると以下のような後置 if を許容するようになる。Breaking change が起きないようデフォルトは無効。

if condition_a
  action_a
else
  action_b if condition_b # ここ
end

その他、多くのバグ修正が含まれています。詳しくはチェンジログを参照してください。

github.com

Ginza.rb 第72回

「Ginza.rb 第72回 もうすぐやってくる!Rails6.0の細かいところも見ておこう」に行った。会場はメドピアさん。

ginzarb.doorkeeper.jp

最近 WEB+DB PRESS にも寄稿されている Rails コミッター y-yagi さんより、Rails 6.0 の Major Features ではない一方で既存コンポーネントでの変更点や留意点にフォーカスしたイントロダクションを中心に進んでいた。y-yagi さん謹製のスライドは以下。

y-yagi.github.io

聞いた中でも Active Record のトピックにあった default_scope を外して検索するためのショートハンドとなる reselect と、暗黙的な ORDER カラムを宣言する implicit_order_column あたりは Rails の長い歴史の用途から現れた API っぽくって印象に残ったので本編ふりかえりでも話を振ったりしていた。

聞きそびれた点として Rails 6.0 がリリースされたあとの Rails 4.2 の立ち位置がどうなるかは気になるところで、機会があれば改めて聞いてみたいところ。

楽しかったです。ありがとうございました。

Asakusa.rb 第519回

Asakusa.rb 第519回だった。同僚の @color_box が会場係を行なってくれてた勤務先の ESM, Inc. が今回の会場。

RuboCop Performance と RuboCop Railsruby-head の CI が落ちていたのを直したり、test-queue で RUBYOPT=-w での警告が出ているのを抑制したり、ほかいくつかのパッチを書いて PR にしたり手元のパッチ袋にしたりしていた。

あとはジョーカーさんと大阪Ruby会議02の CFP どうします?といった話をしていたり、自己紹介タイムで同日開催のとちぎRuby会議08TokyuRuby会議13 のどちらに行くかなど話題になっていたりしていた。

名古屋Ruby会議04で講談した

名古屋Ruby会議04で講談した。会場は名古屋の大須演芸場

regional.rubykaigi.org

勤務先名がせっかく漢字交じりなので、同門の colorboxkunitoo で永和亭を名乗る形で講談した。まくらが難しかったところ、永和亭 此一句を名乗った流れで最初に一句入れてからの入りにしていたスライドは以下。

名古屋Ruby会議に登壇するのは第2回以来の8年ぶり。演芸場で話すのは初めてだったこともあり、いろいろと分からないながらも楽しく話をさせてもらいました。

ぜひまた上がってみたいハコで楽しかったです。ありがとうございました。

RuboCop 本体から Rails Cops が外される

次の RuboCop マイナーバージョンアップとなる 0.72 から Rails Cops が外されます。今後 Rails Cops を使う場合は Gemify された rubocop-rails gem を使うことになるため、昨日リリースされた RuboCop 0.71 から警告が出るようにしています。

github.com

また rubocop -R/--rails オプションも同じタイミングで削除します。

github.com

RuboCop 0.71 は移行期間としているため RuboCop の Rails Cops を使う場合は、以下のような設定を加えてください。

Gemfile に rubocop-rails gem を追加して bundle install する。

gem 'rubocop-rails'

.rubocop.yml に require: rubocop-rails を追加する。例えば以下のように足すことになります。

 inherit_from: .rubocop_todo.yml
 require:
+  - rubocop-rails
   - rubocop-rspec

 AllCops:
   Exclude:
     - 'vendor/**/*'
     - 'spec/fixtures/**/*'
     - 'tmp/**/*'
   TargetRubyVersion: 2.6

このように今後は RuboCop Performance や RuboCop RSpec と同様の使い方になります。

rubocop-rails gem についての詳細は https://github.com/rubocop-hq/rubocop-rails を参照してください。

RuboCop 本体と rubocop-rails gem 両方に実装がある場合、rubocop-rails gem の実装が方が優先される動きになります。

Rails Cops が外されることについての移行スケジュールは以下です。

  • RuboCop 0.71 ... RuboCop のインストール時、ならびに rubocop -R/--rails オプションを使った時に警告が表示します
  • RuboCop 0.72 ... RuboCop Core から Rails Cops を削除します

銀座Rails#9に登壇した

銀座Rails#9@リンクアンドモチベーションに『RuboCop入門』というタイトルで登壇した。ginkouno さんオファーありがとうございました。

ginza-rails.connpass.com

当日の発表スライドは以下です。

なかなか話す機会として作っていなかった RuboCop の実装系ではなく使い方というコンセプトで練ってみた話です。発表時点では最新の安定版であった RuboCop 0.70.0 をベースにしています。発表の裏か直後あたりで RuboCop 0.71.0 がリリースされていますが、現時点で主要な変更は自分が携わっていることもありアウトラインとしてはブレはないと思います。

rubygems.org

質疑応答や懇親会でいくつか RuboCop へのフィードバックとしてもらった点は、今後いくらか調査を進めて形にできるものがあるかもしれませんし、そうならないかもしれなくても何かの折の判断軸の要素になりますので、参加していただいたのもそうですし何よりフィードバックありがとうございました。楽しかったです。