【不定期配信】最新のRuby & Railsへのバージョンアップ時の注意点 (~ 2021-10-31)
Ruby と Rails を安定して使い続けるために 最新の Ruby と Rails に対して行われた変更がバージョンアップするときに問題になるかどうか という観点で情報をまとめています。
情報が多いので時間がない人は Rubyの仕様変更の一覧 と Railsの仕様変更の一覧 を見てください。
Ruby の最新情報は nagachikaさん (@nagachika) / Twitter が ruby trunk changes で公開してくださっています。
Rails の最新情報は Pull requests · rails/rails でマージされた PR を確認できるのと、y-yagiさん (@y_yagi) / Twitter が なるようになるブログ と TechRacho|BPS株式会社のRuby on Rails開発情報サイト が 週刊Railsウォッチの記事一覧|TechRacho by BPS株式会社 で公開してくださっています。
これらは大変有益な情報です。本当にありがたいことです。
Google広告
Ruby
Rubyの仕様変更の一覧
ruby 3.0
- openssl 2.2.0 から 2.2.1 にバージョンアップ
以下、変更点の詳細です。
ruby trunk
ruby-trunk-changes 2021-10-29 - ruby trunk changes
OK
ruby-trunk-changes 2021-10-30 - ruby trunk changes
OK
Clarify docs about magic comments placement · ruby/ruby@09bdb43
これすごくありがたい。自分は知っているけど…をきちんとドキュメント化して他人に伝える気遣い、これ大事。
ruby-trunk-changes 2021-10-31 - ruby trunk changes
OK
Argument forwarding definition without parentheses [Bug #18267] · ruby/ruby@13a9597
以下のようにメソッド定義で ...
を使うときにカッコを省略できるようになりました。こういう修正がサラッとできる nobu さんがすごいです。
def call a, ...
a.nil?(...)
end
ruby 3.0
【仕様変更】
openssl 2.1.3 のバグ修正と追加でいくつかの修正をしたものが 2.2.1 としてリリースされており、それを ruby 本体にマージしたとのこと。
ruby trunk へのマージはともかくこういったバグ修正も 3.0 に入るのですね。
opensslだとセキュリティホールが気になりますが、そのようなものはなさそうです。
OK: バージョンのみ
OK: バージョンのみ
OK: バージョンのみ
[ruby/fcntl] Bump up fcntl version to 1.0.1 · ruby/ruby@f96517e
OK: バージョンのみ
OK: バージョンのみ
OK: バージョンのみ
OK: testのみ
ruby 2.7
変更なし。
Google広告
Rails
Railsの仕様変更の一覧
- ActiveRecord
- whereなどのRangeにFloat::INFINITYのようにinfinity?がtrueの値を指定している場合
以下、変更点の詳細です。
Pull requests
Pull requests · rails/rails 2021-10-29
日本語の解説: rails commit log流し読み(2021/10/29) - なるようになるブログ
Add :day_format option to date_select by shunichi · Pull Request #43567 · rails/rails
OK
date_select
に日付のラベルを指定する day_format
が追加されました。主な用途は日本のロケールで「10日」のように「日」をつけることです。
year_format
があるので day_format
も追加します、ってことだけど、月は month_format_string
なのですよね。
Rails なら year_format
, year_format_format
, month_format
, month_format_string
, day_format
, day_format_string
のようにすべて対応してもいいかもしれません。
ただ、その場合はどちらも設定されたときの優先度を決めないといけませんし、そのときに警告を出すかどうかも悩みます。かといって month_format_string
を month_format
にするのは互換性を壊すのでやってほしくないです。互換性を変えるならRails 7のリリースタイミングだよな〜と思いつつ、なにもしません…
OK: doc
delivery_job
が deliver_later
を呼び出したときに使われる Job のクラス名で、 deliver_later_queue_name
がそのキューの名前のようです。
OK: Output Action Cable JS without transpiling and as ESM by dhh · Pull Request #42856 · rails/rails の修正漏れ
OK: v7.0.0.alpha2 のデグレ解消。
Inflector::Methods#underscore
において Accountsv2N2Test
が accountsv2n2_test
になるデグレを解消して accountsv2_n2_test
となるようにしている。
ナイス!
Properly handle impossible cases in (not_)between by fschwahn · Pull Request #43547 · rails/rails
【仕様変更】
バグ修正でとても良いことなのですが、いちおう挙動が変わるので仕様変更としています。
修正前は以下のように Range の開始が infinity?
が true となるようなケースですべてのレコード示すリレーションを返していました。これを修正して、すべてにマッチしないリレーションを返すようになりました。
user = User.create!(age: 20)
User.where(age: Float::INFINITY..).to_a
#=> [user]
これ自体はとても良い修正です。でも、思わぬデグレが起きそうなので、 INFINITY を使っているものがあれば要チェックです。
Pull requests · rails/rails 2021-10-30
日本語の解説: rails commit log流し読み(2021/10/30) - なるようになるブログ
ActionMailer Docs: Include name in from address by matt17r · Pull Request #43572 · rails/rails
OK: doc
ふむふむ、 email_address_with_name('notification@example.com', 'Example Company Notifications')
で名前付きのメールアドレスを生成できるのですね。学び。
Pull requests · rails/rails 2021-10-31
日本語の解説: rails commit log流し読み(2021/10/31) - なるようになるブログ
変更がありませんでした。
Google広告
今回のおまけ
お試しで Anker Eufy Lumi Dual-Bright Night Light (コンパクトLEDセンサーライト)【どこでも設置可能 / モーションセンサー搭載 / コンパクトサイズ / 3個セット】 を買って試していましたが、とても良いので買増することにしました。
便利ではありますが、反応するまでに1秒弱かかるので少し多めに設置すると良さそうです (だから買い増しです)。