Ateam Finergy Inc. Advent Calendar 2019の10日目です。
11月5日にRails6.0.1がリリースされましたが、11月27日には早くも6.0.2rc1がリリースされています。
Rails6.0.1から6.0.2への変更点をまとめました。
1. Active Support
1-1. initialize時に訳文(i18n
)をeager load
する
Rails6.0.1までは、i18n
の読み込みによってアプリケーションの初期レスポンスが遅くなっていました。そこでRails6.0.2からは、アプリケーションのinitialize時にi18n
をeager load
することで、レスポンス速度の低下を避けるようになりました。
具体的には、以下の変更が追加されています。
config.eager_load_namespaces << I18n
config.eager_load_namespaces
は元々Railsに存在しているオプションで、ここに名前空間を設定するとconfig.eager_load
オプションをtrue
にしている場合に読み込まれます。
1-2. ActiveSupport::Notifications
でスレッドごとのCPUタイムクロックを使用するように
ActiveSupport::Notifications::Instrument
クラスで、CPU時間の取得にProcess::CLOCK_THREAD_CPUTIME_ID
を使用するようになりました。
Rails6.0.1まではProcess::CLOCK_PROCESS_CPUTIME_ID
を使用していましたが、これでは一般的によく使われているマルチスレッドのWebサーバにおいて、現在のリクエストだけでなく他のリクエストにも時間を費やしてしまうリスクがあります。そこで、Process::CLOCK_THREAD_CPUTIME_ID
に変更されました。
またこの変更に伴い、Process::CLOCK_THREAD_CPUTIME_ID
が定義されているかをチェックするようになっています。
- 参照
2. Active Job
2-1. Sidekiq
がActive Job
クラスのsidekiq_options
にアクセスできるように
Sidekiq
がActive Job
クラスにアクセスすることにより、そのActive Job
タイプに設定されているsidekiq_options
にアクセスすることができるようになりました。
Rails6.0.1まではActive Job
のクラス名をto_s
していたため文字列型になってしまい、sidekiq_options
にはアクセスできませんでした。Rails6.0.2からはto_s
を無くしたことで、アクセスできるようになりました。
3. Action Pack
3-1. Railsエンジンにマウント可能なルーティングヘルパーを、システムテストで使えるように
Rails6.0.1のシステムテストにおいて、Railsエンジンにマウント可能なルーティングヘルパー(ex: engine_name.root_url
)を呼び出すと、未定義のエラーが発生します。
Rails6.0.2では、このエラーを解消しています。
- 参照
4. Railties
4-1. Scaffold
ジェネレーターの衝突チェックを修正
Scaffold
で新たに生成したクラスと既に存在するクラス名が衝突した場合のチェックの処理が、修正されています。
- 参照
4-2. 各環境ごとにautoload_paths
とautoload_once_paths
とeager_load_paths
が設定できるように
各環境の設定ファイル(config/environments/*.rb
)で、autoload_paths
とautoload_once_paths
とeager_load_paths
の値が設定できるようになりました。
5. 最後に
今回はマイナーバージョンアップなので、細かなバグ修正やパフォーマンス向上がほとんでしたね。
今後もRails6の品質とパフォーマンスが、より向上していくことを期待しています。