【不定期配信】最新のRuby & Railsへのバージョンアップ時の注意点 (~ 2021-10-28)
Ruby と Rails を安定して使い続けるために 最新の Ruby と Rails に対して行われた変更がバージョンアップするときに問題になるかどうか という観点で情報をまとめています。
情報が多いので時間がない人は Rubyの仕様変更の一覧 と Railsの仕様変更の一覧 を見てください。
Ruby の最新情報は nagachikaさん (@nagachika) / Twitter が ruby trunk changes で公開してくださっています。
Rails の最新情報は Pull requests · rails/rails でマージされた PR を確認できるのと、y-yagiさん (@y_yagi) / Twitter が なるようになるブログ で公開してくださっています。
これらは大変有益な情報です。本当にありがたいことです。
Google広告
Ruby
Rubyの仕様変更の一覧
ruby trunk
- OpenSSL::PKey::EC::Point#make_affine! が deprecated
Enumerable#each_slice
,Enumerable#each_cons
とそれを呼び出しているメソッド- typeprof 0.20.0 が 0.20.1 にバージョンアップ
以下、変更点の詳細です。
ruby trunk
ruby-trunk-changes 2021-10-25 - ruby trunk changes
[ruby/openssl] pkey/ec: deprecate PKey::EC::Point#make_affine! and ma… · ruby/ruby@555788b
【仕様変更】
OpenSSL::PKey::EC::Point#make_affine! が deprecated になりました。で、これはなにをするメソッドなんだ?コミットログには実際には使われていないはず、と書いてある。とりあえず仕様変更に挙げるけど影響はなさそう。
Fix
Enumerable#each_cons
andEnumerable#each_slice
to return a re… · ruby/ruby@dfb47bb
【仕様変更】
Enumerable#each_slice
, Enumerable#each_cons
とそれを呼び出しているメソッドが nil を返していたのを receiver をそのまま返すように変更されています。
Enumerable#each
などと同じようにするためだと想像できますが、 nagachikaさん が以下のコメントをされているのが気になりました。
少し探したんですが対応するチケットがないみたいでした。
なにきっかけで修正しようと思ったのでしょうかね。それなりに影響ありそうな修正なので。
【仕様変更】
変更内容がたくさんあるので追いかけることができませんでした。
変更点の詳細はこちら: typeprof/compare/v0.20.0…v0.20.1
挙動は変わっているのでとりあえず仕様変更としますが、いうても TypeProf なので影響はないでしょう。
ruby-trunk-changes 2021-10-26 - ruby trunk changes
OK
ruby-trunk-changes 2021-10-27 - ruby trunk changes
OK
気になったのは以下の機能追加。
Class#descendantsの追加。こういうメソッドが好きです。
pack.c: add an offset argument to unpack and unpack1 · ruby/ruby@e5319dc
バイナリを解析するときに使えそう。
ruby-trunk-changes 2021-10-28 - ruby trunk changes
OK
Comparing v0.20.1…v0.20.2 · ruby/typeprof が変更点。TypeProf は運用には使っていないものだと思うのでOKとしています。
Add changes Enumerable#each_cons and each_slice in NEWS [ci skip] · ruby/ruby@d51ba1e
OK
Fix Enumerable#each_cons and each_slice to return a receiver by MakeNowJust · Pull Request #1509 · ruby/ruby でも書かれていますが、なぜその変更をしたのか?って疑問に思いますよね。バグだから直したってのはリリースしてしばらく立つと賛同をえにくいのでしょうかね。
今回は戻り値が変更になるだけで、元々 nil が返っていたので多くの場合に問題ないと判断できるものでしたね。
このコメント で知ったのですが knu さんが元々の Enumerable#each_cons and each_slice
の author だったのですね。感謝。
ruby 3.0
変更なし。
ruby 2.7
変更なし。
Google広告
Rails
Railsの仕様変更の一覧
rails trunk
- ActiveRecord
ActiveRecord::QueryLogs#with_tag
ActiveRecord::QueryLogs#update_context
- Railties
- 自動テストのrailsメソッド
- ActiveSupport
ActiveSupport::DescendantsTracker.direct_descendants
ActiveSupport::DescendantsTracker#direct_descendants
以下、変更点の詳細です。
Pull requests
Pull requests · rails/rails 2021-10-25
日本語の解説: rails commit log流し読み(2021/10/25) - なるようになるブログ
OK: doc
Enum with strings by elfassy · Pull Request #43529 · rails/rails
OK: doc & test
Better spacing in environments/production.rb file by ytkg · Pull Request #43509 · rails/rails
OK: generator の coding style
OK: Digest::UUID.uuid_from_hash
のバグ修正
config.active_support.use_rfc4122_namespaced_uuids=
に true を設定したときだけバグ修正後の挙動になります。そのため既存のものへの影響はありません。
とはいえ、 Digest::UUID.uuid_v5(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
のように namespace 引数を指定している箇所は思わぬ不具合があるかもしれませんので要チェックです。
Pull requests · rails/rails 2021-10-26
日本語の解説: rails commit log流し読み(2021/10/26) - なるようになるブログ
OK: doc
Remove with_tag from QueryLogs by keeran · Pull Request #43541 · rails/rails
【仕様変更】
ActiveRecord::QueryLogs#with_tag
を削除。同じことを実現するための方法が用意されているため。
代替手段は以下です。
- ActiveRecord の annotate: Rails6 のちょい足しな新機能を試す91(ActiveRecord annotate編) - Qiita
ActiveRecord::QueryLogs#set_context
OK: doc
Refactor ActiveRecord::QueryLogs context API by casperisfine · Pull Request #43535 · rails/rails
【仕様変更】
ActiveRecord::QueryLogs#update_context
が削除されました。今後は ActiveRecord::QueryLogs#set_context
を使ってください。
OK: DB の設定ファイルで schema_dump
を指定できるようになりました。 shards を使うときに便利です。
Pull requests · rails/rails 2021-10-27
日本語の解説: rails commit log流し読み(2021/10/27) - なるようになるブログ
Revert “Call Executor#wrap around each test” by byroot · Pull Request #43553 · rails/rails
Call Executor#wrap around each test by casperisfine · Pull Request #43546 · rails/rails
OK: いったん修正されたけど、すぐにrevertされた。
OK: 高速化
OK: テスト用の修正
OK
Add available_records
argument to Associations::Preloader · octatone/rails@2a3f175 で導入した available_records
が STI だと期待通りに動作していなかったので修正。リリース前にみつかってよかった。
Use the native
Class#descendants
if available by byroot · Pull Request #43481 · rails/rails
OK: ruby 3.1 の Class#descendants
を使う。対応早すぎ。
Pull requests · rails/rails 2021-10-28
日本語の解説: rails commit log流し読み(2021/10/28) - なるようになるブログ
Rebalance Railties tests by casperisfine · Pull Request #43559 · rails/rails
OK: Rails本体のtestに関する修正
Setup bootsnap to speedup TestRunnerTest by casperisfine · Pull Request #43558 · rails/rails
【仕様変更】
自動テストで rails コマンドを使っている場合に cache (bootsnap) を使うようになっています。自動テストの中で rails メソッドで rails コマンドのテストを行っている場合は問題ないことを確認しましょう。
そもそも rails メソッドの存在を知りませんでした。
Call Executor#wrap around each test by casperisfine · Pull Request #43550 · rails/rails
OK
テストに関する修正。テスト単位で状態をリセットするようになります。よさそうな挙動なのですが active_support.executor_around_test_case = true
を指定したときだけ有効になるようです。(rails new した場合は有効)
Don’t
SELECT * FROM information_schema.tables
by cgriego · Pull Request #43549 · rails/rails
OK: ありがたい修正。
【仕様変更】
以下が deprecated になりました。通常は使っていないと思いますが、使っている人は要チェック。といいつつ、GitHubで検索しても使っているケースはヒットしませんでした。
ActiveSupport::DescendantsTracker.direct_descendants
ActiveSupport::DescendantsTracker#direct_descendants
Google広告
今回のおまけ
今読んでいる本は チームが機能するとはどういうことか ― 「学習力」と「実行力」を高める実践アプローチ です。
実は私、縦書きの本が読めないのです。この本が縦書きだと知らなくて買ってしまいました。
字を下まで追いかけていって、目線を上に持っていくときにどの行かわからなくなるんですよね…orz。
いつになったら縦書きの本がすらすら読めるようになるのか。トレーニングも兼ねてがんばります!
(Kindle 版だと縦書きと横書きを変更できたりするのでしょうかね。電子書籍リーダーによってはできたりするのかな? そうだとしたら紙の書籍を超えていますね)