RuboCop Rails 2.3.0 をリリースした

RuboCop Rails 2.3.0 をリリースした。

github.com

New features

#78: Add new Rails/EnumHash cop. (@fedeagripa, @brunvez, @santib)

pocke さんによる提案を Rootstrap 社のオープンソースハッカソンで実装された cop となる。

bad と good は以下で、例えば中間の要素を削除した場合にデータベースへの値がずれることを予防するため Hash 記法を推奨するもの。

# bad
enum status: [:active, :archived]

# good
enum status: { active: 0, archived: 1 }

auto-correct 付き。

Bug fixes

#53: Fix a false positive for Rails/SaveBang when implicitly return using finder method and creation method connected by ||. (@koic)

Rails/SaveBang cop でデフォルトとなっている AllowImplicitReturn: true で暗黙的な戻り値となる find(**opts) || #{method}(**opts) のような || 演算子による戻り値のケースでの false positive を修正している。

#97: Fix two false negatives for Rails/EnumUniqueness. 1. When enum name is not a literal. 2. When enum has multiple definitions. (@santib)

Rails/EnumHash cop のレビューの過程で pocke さんが指摘した既存の Rails/EnumUniqueness cop にある false negative を修正している。

Changes

#98: Mark Rails/ActiveRecordAliases as SafeAutoCorrect false and disable autocorrect by default. (@prathamesh-sonpatki)

Rails/ActiveRecordAliases cop が自分で定義した update_attributesupdate に auto-correct するということで、Rails イシューチームメンバーより SafeAutoCorrect: false と変更している。

SafeAutoCorrect については以下のエントリを参照のこと。

koic.hatenablog.com

#101: Mark Rails/SaveBang as SafeAutoCorrect false and disable autocorrect by default. (@prathamesh-sonpatki)

同上で Rails/SaveBang cop を SafeAutoCorrect: false と変更している。

#102: Include create_or_find_by in Rails/SaveBang cop. (@MaximeLaurenty)

Rails/SaveBang cop に対して、Rails 6.0 で導入される create_or_find_by への対応を含めている。

Asakusa.rb 第524回

カラボメンバーが会場係をしてくれたおかげで勤務先が会場だったので 20:30 頃まで参加していた。翌日の銀座Rails #11 の登壇準備をしていた @yahonda さんrsim/oracle-enhanced#1900rails/rails#36471Oracle 対応について、現在の Oracle (19c) だと NoDatabaseError を検知することはできないということで、rsim/oracle-enhanced#1900 のクローズと以下の PR をオープンする実装方針についての相談をしていたりした。

github.com

平成.rb #6

@mtkasimaに招待を頂いて平成.rb #6 でゲスト LT をしてきた。

heiseirb.connpass.com

RubyConf 2018 の際に LT の順番がまわって来ずにお蔵入りになっていたスライドをカスタマイズして発表した。当日のスライドは以下。

平成と掛けて何をトークするか悩んでいたところ、勤務先の永和と新元号の令和を掛けて「"I come from /eiwa/" ということである意味で令和から来ました」から正規表現を使ったバグ事例に繋げていたりしている。

スライドについて英文の添削などは受けていないので所々間違っていたりもすると思うけれど、自身の PR のやりとりではだいたいこんな英文で行なっている。

LT 応募枠のトークでは JIT の紹介からコードフォーマット、Open API などどれも興味深いテックトークだったことに加えて、スポンサートークでもアジャイルソフトウェア開発の話を聞けたりして幅広いテーマで楽しかったです。ありがとうございました。

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 のどちらに行くかなど話題になっていたりしていた。