Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 18:25 Rails 8.0におけるassets.quiet config.assets.quietは、アセット関連リクエストのログ出力を無効にするかどうかの設定です。後述のように、Rails 8.0.0でtrueにする以下の設定が削除されましたが、復活させるPRが出ていますので、既存アプリで削除するかには慎重な判断が必要かもしれません。 # Suppress logger output for asset requests. config.assets.quiet = true rails newで生成されるconfig/environments/development.rbにおいて、 8.0.0と8.0.1ではこの設定が削除されています(この変更のPR)。 しかし、この設定を削除するとターミナル出力がとっちらかるので設定を復活させるというPRがマージ済みですので、今後のバージョンでは設定が復活します。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 17:06 Rails 8.0におけるquery_log_tags_enabled config.active_record.query_log_tags_enabledは、SQLクエリのログに実行時情報のコメントを付加する機能を有効にするかどうかの設定です。 rails newで生成されるconfig/environments/development.rbにおいて、 8.0からは以下のようにこの設定が有効になるコードになりました(この変更のPR)。 ちなみに、default値は7.2から変わらずfalseですので、 development.rb内の当該設定を意図的に変更しなければ、既存アプリの挙動が勝手に変わることはありません。 # Append comments with runtime information tags to SQL queries in logs. config.active_record.query_log_tags_enabled = true 確かにdevelopment環境において便利そうな機能ですので、8.0へのアップデートを機に、有効にしても良いかもしれません。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 16:47 Rails 8.0におけるpublic_file_server.headersの設定の変更 rails newで生成されるconfig/environments/test.rbと同development.rbにおいて、 このプルリクエストのマージによって、 config.public_file_server.headersのキーが以下のように小文字になりました。 - config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{2.days.to_i}" } + config.public_file_server.headers = { "cache-control" => "public, max-age=#{2.days.to_i}" } 変更された理由はRack 3への対応のためですので、既存アプリでも設定を変更するのが良さそうです。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 16:40 Rails 8.0におけるdeprecation関連の設定の削除 rails newで生成されるconfig/environments/test.rbと同development.rbにおいて、 7.2以前は以下の設定用コードが存在していましたが、 このプルリクエストのマージによって削除されました。 # Raise exceptions for disallowed deprecations. config.active_support.disallowed_deprecation = :raise # Tell Active Support which deprecation messages to disallow. config.active_support.disallowed_deprecation_warnings = [] 削除された理由は、当該プルリクエストによると、アプリが新規生成された直後は非推奨の問題と無縁であるということからのようです。 ですので、非推奨の問題が出てくる可能性のある既存アプリにおいては適切な設定をしたままにしておくのが良さそうです。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 15:32 Rails 8.0ではfilter_parametersに:cvvと:cvcが追加された rails newで生成されるconfig/initializers/filter_parameter_logging.rbにおいて、 Rails 8.0でconfig.filter_parametersに:cvvと:cvcが追加されました。 この追加に関するプルリクエストはこちらです。 セキュリティの観点からは、確かにクレジットカードのCVCとCVVをフィルタすることは適切であるように思いますので、既存アプリにおいても:cvvと:cvcを追加すると良さそうです。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/22 12:44 Rails 8.0への移行におけるActive Storageのmigration bin/rails app:updateコマンドを実行すると以下の3つのファイルがdb/migrate/に作成されることがありますが、 Active Storageをまだ使用したことがないアプリケーションでは、 これら3つのファイルは単純に削除してしまっても良いはずです。 xxx_add_service_name_to_active_storage_blobs.active_storage.rb xxx_create_active_storage_variant_records.active_storage.rb xxx_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb 詳しくは、「Rails 7.1への移行におけるActive Storageのmigration」のコメントをご覧ください。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/20 21:38 不要であればアイコン画像の削除 bin/rails app:updateコマンドを実行すると以下の2つのアイコン画像ファイルがpublic/に作成されますが、 これら2つのファイルは、rails newで生成される新規railsアプリ用のファイルであるため、既存アプリでは単純に削除してしまい、 従来通りのアイコン画像とアイコン設定(faviconやapple-touch-icon)を用いれば大丈夫です。 (もちろん、既存アプリにおいてアイコン設定が適切に行われている場合の話です。) icon.png icon.svg より詳細な情報はrails 7.2への移行におけるアイコン画像のコメントをご覧ください。
Home Software Libraries Ruby rails rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業 @wakairo 2024/12/20 21:32 基本的にはRailsガイドの手順に従えば良いと思います。 ガイドの手順にもありますが、ぜひbin/rails app:updateコマンドを活用しましょう。 rails 8.0への移行で対応が必要そうな個別の作業について、以下のコメントでそれぞれ取り上げますので、ご参考になれば幸いです。
Home Software Libraries Ruby rails 既存のRailsアプリへのBrakemanの導入 @wakairo 2024/12/20 14:08 bundle binstubs brakemanを用いるやり方に更新しました。
Home Software Libraries Ruby rails rails 7.2で追加されたGitHubワークフローの設定ファイルci.ymlの内容について @wakairo 2024/12/20 11:59 rails 7.2では、新規アプリに対してデフォルトでGitHubワークフローの設定ファイルであるci.ymlが生成されるようになりました。そこで、このci.ymlの内容について簡単に解説します。 なお、ci.ymlの最新のテンプレートはこちらでご覧になれます。 scan_ruby bin/brakemanコマンドを実行するジョブです。 Railsの一般的なセキュリティ脆弱性がないかどうかチェックします。 scan_js bin/importmap auditコマンドを実行するジョブです。 利用しているJavaScriptパッケージにセキュリティ上の脆弱性がないかどうかチェックします。 lint bin/rubocopコマンドを実行するジョブです。 Rubyの静的コード解析を行い設定されているルールに準拠しているかどうかチェックします。 test bin/rails testコマンドを実行するジョブです。なお、skip_system_testオプションが無効であれば、システムテストも実行します。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0におけるassets.quiet
config.assets.quiet
は、アセット関連リクエストのログ出力を無効にするかどうかの設定です。後述のように、Rails 8.0.0でtrueにする以下の設定が削除されましたが、復活させるPRが出ていますので、既存アプリで削除するかには慎重な判断が必要かもしれません。rails new
で生成されるconfig/environments/development.rbにおいて、 8.0.0と8.0.1ではこの設定が削除されています(この変更のPR)。 しかし、この設定を削除するとターミナル出力がとっちらかるので設定を復活させるというPRがマージ済みですので、今後のバージョンでは設定が復活します。rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0におけるquery_log_tags_enabled
config.active_record.query_log_tags_enabled
は、SQLクエリのログに実行時情報のコメントを付加する機能を有効にするかどうかの設定です。rails new
で生成されるconfig/environments/development.rbにおいて、 8.0からは以下のようにこの設定が有効になるコードになりました(この変更のPR)。 ちなみに、default値は7.2から変わらずfalseですので、 development.rb内の当該設定を意図的に変更しなければ、既存アプリの挙動が勝手に変わることはありません。確かにdevelopment環境において便利そうな機能ですので、8.0へのアップデートを機に、有効にしても良いかもしれません。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0におけるpublic_file_server.headersの設定の変更
rails new
で生成されるconfig/environments/test.rbと同development.rbにおいて、 このプルリクエストのマージによって、config.public_file_server.headers
のキーが以下のように小文字になりました。変更された理由はRack 3への対応のためですので、既存アプリでも設定を変更するのが良さそうです。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0におけるdeprecation関連の設定の削除
rails new
で生成されるconfig/environments/test.rbと同development.rbにおいて、 7.2以前は以下の設定用コードが存在していましたが、 このプルリクエストのマージによって削除されました。削除された理由は、当該プルリクエストによると、アプリが新規生成された直後は非推奨の問題と無縁であるということからのようです。 ですので、非推奨の問題が出てくる可能性のある既存アプリにおいては適切な設定をしたままにしておくのが良さそうです。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0ではfilter_parametersに:cvvと:cvcが追加された
rails new
で生成されるconfig/initializers/filter_parameter_logging.rbにおいて、 Rails 8.0でconfig.filter_parametersに:cvv
と:cvc
が追加されました。 この追加に関するプルリクエストはこちらです。セキュリティの観点からは、確かにクレジットカードのCVCとCVVをフィルタすることは適切であるように思いますので、既存アプリにおいても:cvvと:cvcを追加すると良さそうです。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
Rails 8.0への移行におけるActive Storageのmigration
bin/rails app:update
コマンドを実行すると以下の3つのファイルがdb/migrate/
に作成されることがありますが、Active Storageをまだ使用したことがないアプリケーションでは、 これら3つのファイルは単純に削除してしまっても良いはずです。
詳しくは、「Rails 7.1への移行におけるActive Storageのmigration」のコメントをご覧ください。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
不要であればアイコン画像の削除
bin/rails app:update
コマンドを実行すると以下の2つのアイコン画像ファイルがpublic/
に作成されますが、これら2つのファイルは、
rails new
で生成される新規railsアプリ用のファイルであるため、既存アプリでは単純に削除してしまい、 従来通りのアイコン画像とアイコン設定(faviconやapple-touch-icon)を用いれば大丈夫です。 (もちろん、既存アプリにおいてアイコン設定が適切に行われている場合の話です。)より詳細な情報はrails 7.2への移行におけるアイコン画像のコメントをご覧ください。
rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業
基本的にはRailsガイドの手順に従えば良いと思います。
ガイドの手順にもありますが、ぜひ
bin/rails app:update
コマンドを活用しましょう。rails 8.0への移行で対応が必要そうな個別の作業について、以下のコメントでそれぞれ取り上げますので、ご参考になれば幸いです。
既存のRailsアプリへのBrakemanの導入
bundle binstubs brakeman
を用いるやり方に更新しました。rails 7.2で追加されたGitHubワークフローの設定ファイルci.ymlの内容について
rails 7.2では、新規アプリに対してデフォルトでGitHubワークフローの設定ファイルであるci.ymlが生成されるようになりました。そこで、このci.ymlの内容について簡単に解説します。
なお、ci.ymlの最新のテンプレートはこちらでご覧になれます。
scan_ruby
bin/brakeman
コマンドを実行するジョブです。 Railsの一般的なセキュリティ脆弱性がないかどうかチェックします。scan_js
bin/importmap audit
コマンドを実行するジョブです。 利用しているJavaScriptパッケージにセキュリティ上の脆弱性がないかどうかチェックします。lint
bin/rubocop
コマンドを実行するジョブです。 Rubyの静的コード解析を行い設定されているルールに準拠しているかどうかチェックします。test
bin/rails test
コマンドを実行するジョブです。なお、skip_system_testオプションが無効であれば、システムテストも実行します。