【不定期配信】最新のRuby & Railsへのバージョンアップ時の注意点 (~ 2021-10-31)

10 minute read

Ruby と Rails を安定して使い続けるために 最新の Ruby と Rails に対して行われた変更がバージョンアップするときに問題になるかどうか という観点で情報をまとめています。

情報が多いので時間がない人は Rubyの仕様変更の一覧Railsの仕様変更の一覧 を見てください。

Ruby の最新情報は nagachikaさん (@nagachika) / Twitterruby 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: import v2.2.1 · ruby/ruby@00e89fe

【仕様変更】
openssl 2.1.3 のバグ修正と追加でいくつかの修正をしたものが 2.2.1 としてリリースされており、それを ruby 本体にマージしたとのこと。
ruby trunk へのマージはともかくこういったバグ修正も 3.0 に入るのですね。

opensslだとセキュリティホールが気になりますが、そのようなものはなさそうです。

* 2021-10-30 [ci skip] · ruby/ruby@7388a4b

OK: バージョンのみ

Bump patchlevel. · ruby/ruby@c9bc91b

OK: バージョンのみ

Bump up zlib version to 2.0.0 · ruby/ruby@e5babb1

OK: バージョンのみ

[ruby/fcntl] Bump up fcntl version to 1.0.1 · ruby/ruby@f96517e

OK: バージョンのみ

[ruby/drb] Bump up drb version to 2.0.5 · ruby/ruby@519e3bd

OK: バージョンのみ

Bump patchlevel. · ruby/ruby@5afb947

OK: バージョンのみ

test_gc.rb: relax criterion · ruby/ruby@b1696c8

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_stringmonth_format にするのは互換性を壊すのでやってほしくないです。互換性を変えるならRails 7のリリースタイミングだよな〜と思いつつ、なにもしません…

ActionMailer: Document delivery_job and deliver_later_queue_name by c960657 · Pull Request #43560 · rails/rails

OK: doc

delivery_jobdeliver_later を呼び出したときに使われる Job のクラス名で、 deliver_later_queue_name がそのキューの名前のようです。

Action Cable: use non-deprecated entrypoint for JS package by georgeclaghorn · Pull Request #43556 · rails/rails

OK: Output Action Cable JS without transpiling and as ESM by dhh · Pull Request #42856 · rails/rails の修正漏れ

Fix (Inflector::Methods#underscore): small regression by Thornolf · Pull Request #43552 · rails/rails

OK: v7.0.0.alpha2 のデグレ解消。
Inflector::Methods#underscore において Accountsv2N2Testaccountsv2n2_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秒弱かかるので少し多めに設置すると良さそうです (だから買い増しです)。

タグ: ,

カテゴリー:

更新日時: