平成.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 の立ち位置がどうなるかは気になるところで、機会があれば改めて聞いてみたいところ。

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

WEB+DB PRESS Vol.111

WEB+DB PRESS Vol.111

  • 作者: 松田明,y-yagi,佐藤建太,夜道,村田賢太,伊藤英明,見川孝太,新井剛,関陽介,海老原圭吾,長田洸明,大原壯太,藤原俊一郎,松本宏太,末永恭正,久保田祐史,牧大輔,笹田耕一,竹馬光太郎,池田拓司,はまちや2,竹原
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/06/24
  • メディア: 単行本
  • この商品を含むブログを見る

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 を削除します