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

9 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 trunk

  • Enumerable#to_a にキーワード引数を指定した場合
  • ‘net/http’
    • 以下の定数がdeprecated
    • Net::ProxyMod
    • Net::NetPrivate::HTTPRequest
    • Net::HTTPSession
    • Net::HTTPInformationCode
    • Net::HTTPSuccessCode
    • Net::HTTPRedirectionCode
    • Net::HTTPRetriableCode
    • Net::HTTPClientErrorCode
    • Net::HTTPFatalErrorCode
    • Net::HTTPServerErrorCode
    • Net::HTTPResponseReceiver
    • Net::HTTPResponceReceiver

以下、変更点の詳細です。

ruby trunk

ruby-trunk-changes 2021-11-05 - ruby trunk changes

[ruby/net-http] Reset keep_alive timer on new connection · ruby/ruby@5f2c4e3

OK: これはすごい!

10年前に導入された @last_communicated に起因するバグ修正。Net::HTTPの keep_alive の時間測定が間違ってしまう可能性があったとのことで、よく見つけてくださいました。

[ruby/net-http] Fix the typo in a constant name · ruby/ruby@b49dbe0
[ruby/net-http] Warn deprecated old constants · ruby/ruby@3d8e1ee

【仕様変更】
問題ないとは思いますが、2001年からタイプミスだった Net::HTTPResponceReceiver を deprecated とし、タイプミスを修正した Net::HTTPResponseReceiver が追加されました。

また、以下の古い定数も合わせて deprecated になりました。(結局↑の Net::HTTPResponseReceiver も deprecated になってしまった)

  • Net::ProxyMod
  • Net::NetPrivate::HTTPRequest
  • Net::HTTPSession
  • Net::HTTPInformationCode
  • Net::HTTPSuccessCode
  • Net::HTTPRedirectionCode
  • Net::HTTPRetriableCode
  • Net::HTTPClientErrorCode
  • Net::HTTPFatalErrorCode
  • Net::HTTPServerErrorCode
  • Net::HTTPResponseReceiver

以上の定数を使っているか要チェック。

ruby-trunk-changes 2021-11-06 - ruby trunk changes

Delegate keywords from Enumerable#to_a to #each · ruby/ruby@e83c02a

【仕様変更】
Enumerable#to_a にキーワード引数を指定したときにruby 2.4はdelegate、ruby 2.7はdelegateするが警告、ruby 3.0はArgumentErrorとなっていた不具合を修正。ナイス!
ruby 3.0からは仕様変更ですが、さすがにArgumentErrorだったものを修正したので影響はないはずです。とはいえ、いちおうto_aの引数を要チェック。

ruby-trunk-changes 2021-11-07 - ruby trunk changes

OK

ruby 3.0

[merge revision(s) a4d5ee4f31bf3ff36c1a8c8fe3cda16aa1016b12: Backport… · ruby/ruby@75e7499

OK: TracePointのメモリリークの修正

merge revision(s) d0a05fd4b40ff0f88728c4897e67b68185128f54: · ruby/ruby@6d540c1

OK: テストの修正のみ

ruby 2.7

変更なし。

Google広告


Rails

Railsの仕様変更の一覧

rails 7.0

  • ActiveJob
    • ActiveJob::TestHelper#assert_enqueued_with のメッセージ

以下、変更点の詳細です。

Pull requests

Pull requests · rails/rails 2021-11-05

日本語の解説: rails commit log流し読み(2021/11/05) - なるようになるブログ

Replace CSS references with inline basics for scaffolds by dhh · Pull Request #43597 · rails/rails

OK: scaffoldのテンプレートの修正

Fix has_many inversing recursion on models with recursive associations by gmcgibbon · Pull Request #41552 · rails/rails

【仕様変更】
Rails.application.config.active_record.has_many_inversing が true のときでかつ、以下のような association が定義されている場合に期待通りに動作するようになっています。

class Branch
  has_many :branches
  belongs_to :branch, optional: true
end

Rails.application.config.active_record.has_many_inversing が true のときは要チェック。

Pull requests · rails/rails 2021-11-06

日本語の解説: rails commit log流し読み(2021/11/06) - なるようになるブログ

マージされたPRなし。

Pull requests · rails/rails 2021-11-07

日本語の解説: rails commit log流し読み(2021/11/07) - なるようになるブログ

fix typo of using where instead of were by dorianmariefr · Pull Request #43607 · rails/rails

【仕様変更】
ActiveJob::TestHelper#assert_enqueued_with の assert に失敗したときのメッセージのタイプミスを修正。 wherewere にしています。
このメッセージをチェックしているようなテストコードはないと思いますが、いちおう assert_enqueued_with を使っているかをチェック!

Google広告


今回のおまけ

大江戸Ruby会議09出前Editionにて、過去のRubyKaigiの講演動画 が公開されました。

これはすごいですね。
全部をみるのは難しいので、まずはまつもとさんのキーノートをおっかけてみようと思います。

タグ: ,

カテゴリー:

更新日時: