Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby on Rails: 個人のサービスをRails v7.1にアップデートしたのでやったこととかメモ📝

2023/10/05にRuby on Rails v7.1がリリースされました🎉

rubyonrails.org

個人のwebサービスなので以下のように規模はかなり小さめですがやったこととかをメモ📝

+----------------------+--------+--------+---------+---------+-----+-------+
| Name                 |  Lines |    LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers          |    572 |    425 |      21 |      71 |   3 |     3 |
| Helpers              |     51 |     37 |       0 |       8 |   0 |     2 |
| Jobs                 |     31 |     23 |       3 |       2 |   0 |     9 |
| Models               |   1100 |    712 |      32 |     102 |   3 |     4 |
| Mailers              |      6 |      4 |       1 |       0 |   0 |     0 |
| Views                |    393 |    371 |       0 |       0 |   0 |     0 |
| JavaScript           |   3033 |   2195 |       0 |       2 |   0 |  1095 |
| Libraries            |    262 |    214 |       5 |      18 |   3 |     9 |
+----------------------+--------+--------+---------+---------+-----+-------+
| Total                |   5448 |   3981 |      62 |     203 |   3 |    17 |
+----------------------+--------+--------+---------+---------+-----+-------+

やったこと

installするRailsのバージョンを更新

dependabotのPRが作成されていたので、それを利用しました🤖

bundle update --conservativeを使って最低限のgemだけあげた方が安全。

--conservative Use bundle install conservative update behavior and do not allow indirect dependencies to be updated. https://bundler.io/v2.4/man/bundle-update.1.html

設定周りをRails v7.1に合わせて更新

config.load_defaults 7.1に更新してRails 7.1の設定を反映するようにしたのと、 Rails v7.1時のRails newのdiffを確認し以下の変更を追加した。

https://railsdiff.org/7.0.8/7.1.0

config.autoload_libのignoreオプションを利用するように修正

config.autoload_lib(ignore:)という新しい設定メソッドが導入されました。 このメソッドは、デフォルトでは自動読み込みパスに含まれていないlibディレクトリをアプリケーションの自動読み込みパスに追加するために利用されます。 また、新しいアプリケーションではconfig.autoload_lib(ignore: %w(assets tasks))が生成されます。 https://railsguides.jp/v7.1/7_1_release_notes.html

config.cache_classesconfig.enable_reloadingに変更

3.2.13 config.cache_classes 後方互換性のためにサポートされている古い設定であり、!config.enable_reloadingと同等です。 https://railsguides.jp/configuring.html

config.action_controller.raise_on_missing_callback_actionsをtrueに設定

onlyやunlessで既存のメソッドに存在しないシンボルを指定した場合にコールバックでエラーを発生するようになった。 https://techracho.bpsinc.jp/hachi8833/2023_09_27/135156

config.active_job.verbose_enqueue_logsをtrueに設定

3.15.8 config.active_job.verbose_enqueue_logs バックグラウンドジョブをエンキューするメソッドのソースコードの場所を、 関連するエンキューログ行の下にログ出力するかどうかを指定します。 デフォルトは、development環境ではtrue、それ以外の環境ではfalseです。 https://railsguides.jp/configuring.html

config.action_dispatch.show_exceptions:rescuableに設定

Deprecate true and false values for config.action_dispatch.show_exceptions in favor of :all, :rescuable, or :none. https://edgeguides.rubyonrails.org/7_1_release_notes.html#action-pack-deprecations

警告が出ている部分のFIX

アプリケーション起動時に以下のような警告が出ていましたが、どちらもDevise起因ぽかったので一旦無視しました。

DEPRECATION WARNING: DeprecatedConstantAccessor.deprecate_constant without a deprecator is deprecated (called from <top (required)> at /app/config/application.rb:16)
DEPRECATION WARNING: `Rails.application.secrets` is deprecated in favor of `Rails.application.credentials` and will be removed in Rails 7.2. (called from <top (required)> at /app/config/environment.rb:7)

DeprecatedConstantAccessor.deprecate_constant側はissueが上がっている模様。

github.com

DEPRECATION WARNINGの調査はconfig.active_support.deprecation = :raise にするとスタックトレースが出るので発生箇所が調査しやすい。

おわりに

Rails v7.1はasync queriesや複数主キーのサポートなどいい感じの機能が楽しみですね✨

参考

techracho.bpsinc.jp

inside.pixiv.blog