Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 7.2.0 Railties CHANGELOG(全項目リンク付き)

概要

MITライセンスに基づいて翻訳・公開いたします。

なお、機能削除のエントリについては、原則として7.2での削除プルリクではなく、その機能が非推奨化されたときの過去のプルリクへリンクしています。

Rails 7.2.0 Railties CHANGELOG(全項目リンク付き)

更新45件(うち非推奨削除4件)

🔗 Make devcontainers opt in and create a devcontainer command by andrewn617 · Pull Request #51880 · rails/rails

  • DevContainerジェネレータを作成

アプリケーションの現在の設定を元にdevcontainerをセットアップする。

使い方:

bin/rails devcontainer

Andrew Novoselac

🔗 Add rubocop and GitHub Actions to plugin generator by excid3 · Pull Request #51822 · rails/rails

  • プラグインジェネレータにRuboCopとGitHub Actionsを追加

--skip-rubocop--skip-ciでスキップ可能。

Chris Oliver

🔗 Clean up database generators implementation by andrewn617 · Pull Request #51765 · rails/rails

  • rails newコマンドとrails db:system:changeコマンドから、oraclesqlserver、JRuby固有のデータベースアダプタのサポートを削除

サポートされるオプションはsqlite3mysqlpostgresqltrilogy

Andrew Novoselac

🔗 Turn app:update into a command to add --force by etiennebarrie · Pull Request #51690 · rails/rails

参考: 週刊Railsウォッチ20240513: bin/rails app:updateをRakeタスクからRailsコマンドに変更して--forceオプションを追加

  • bin/rails app:updateにオプションを追加

bin/rails app:updateコマンドで、ジェネレータと同じ以下の汎用オプションをサポートするようになった。

  • --force: 既存ファイルへの変更をすべて受け入れる
  • --skip: 既存ファイルへの変更をすべて拒否する
  • --pretend: 追加・変更を行わない
  • --quiet: 変更ログをターミナルに出力しない

Étienne Barrié

🔗 Build Rails console on top of IRB's latest official APIs by st0012 · Pull Request #51705 · rails/rails

参考: 週刊Railsウォッチ20240513: Railsコンソールが最新のIRB APIに移行

  • RailsコンソールコマンドとヘルパーをIRB v1.13の拡張APIで実装

これにより、Railsコンソールでhelpercontrollernew_sessionappがIRBヘルプメッセージのHelper methodsカテゴリに表示されるようになった。また、reload!コマンドは新しいRails consoleコマンドカテゴリに表示されるようになった。

この変更の前は、RailsコンソールのコマンドやヘルパーメソッドはIRBのプライベートコンポーネント経由で追加されていたため、ヘルプメッセージに表示されず、機能がとても見つけにくかった。

Stan Lo

🔗 (削除)Deprecate behaviour constant by gmcgibbon · Pull Request #45180 · rails/rails

  • 非推奨化されていたRails::Generators::Testing::Behaviourを削除。

Rafael Mendonça França

🔗 (削除)Move dbconsole logic to Active Record connection adapter. by gmcgibbon · Pull Request #46093 · rails/rails

  • コンソールの非推奨化されていたfind_cmd_and_execヘルパーを削除。

Rafael Mendonça França

🔗 (削除)Deprecate config.enable_dependency_loading · rails/rails@cbfe735

  • 非推奨化されていたRails.config.enable_dependency_loadingを削除。

Rafael Mendonça França

🔗 (削除)Deprecate calling Rails.application.secrets by p8 · Pull Request #48472 · rails/rails

  • 非推奨化されていたRails.application.secretsを削除。

Rafael Mendonça França

🔗 Add require: "debug/prelude" after debug's Gemfile entry by st0012 · Pull Request #51692 · rails/rails

  • 生成されるGemfileでdebug gem用のrequire: "debug/prelude"が含められるようになった

    debug gemを直接requireすると自動的に有効になるため、デバッグセッションに入らなくてもオーバーヘッドとメモリ使用量が増える可能性が生じる。

代わりにBundlerでdebug/preluderequireすることで、開発者はdebuggerbinding.breakなどのブレークポイントメソッドに引き続きアクセス可能になり、かつデバッガはブレークポイントに到達するまで有効にならなくなる。

Stan Lo

🔗 Conditionally skip test job in ci.yml by stevepolitodesign · Pull Request #51289 · rails/rails

  • 新規アプリケーションで--skip-testオプションを指定した場合に、ci.ymlでのtestジョブ生成をスキップするよう修正

Steve Polito

🔗 Bump NODE_LTS_VERSION to 20.11.1 by stevepolitodesign · Pull Request #51393 · rails/rails

  • 新規アプリケーションで条件付きで生成される.node-versionファイルのバージョンを20.11.1に更新

Steve Polito

🔗 railties: configure sanitizer vendor in 7.1 defaults more robustly by flavorjones · Pull Request #51267 · rails/rails

  • Rails 7.1でサニタイザのデフォルトベンダ設定を修正

アプリでrails-html-sanitizer gemがeager loadingされなかった場合、デフォルトのサニタイザがRails::HTML5::Sanitizerになるはずが、最終的にRails::HTML4::Sanitizerになってしまうことがあった。

Mike Dalessio, Rafael Mendonça França

参考: 週刊Railsウォッチ20240313後編: SprocketsからPropshaftに乗り換えたらサニタイザがHTML4版にフォールバックした(その後修正)

rails/rails-html-sanitizer - GitHub

🔗 Set action_mailer.default_url_options values in development and test by stevepolitodesign · Pull Request #51191 · rails/rails

参考: 週刊Railsウォッチ20240312: development/test環境でdefault_url_optionsをデフォルトで設定するよう修正

  • development環境とtest環境でdefault_url_optionsをデフォルトで設定するよう修正

このコミットより前は、新規Railsアプリケーションでメイラーに含まれるURLが*_pathヘルパーでビルドされるとActionView::Template::Errorが発生することがあった。

Steve Polito

🔗 Introduce Rails::Generators::Testing::Assertions#assert_initializer by stevepolitodesign · Pull Request #51176 · rails/rails

参考: 週刊Railsウォッチ20240312: assert_initializerを追加

  • Rails::Generators::Testing::Assertions#assert_initializerを導入

既存のinitializerジェネレータのアクションを補完する。

assert_initializer "mail_interceptors.rb"

Steve Polito

🔗 Generate devcontainer files by default by andrewn617 · Pull Request #50914 · rails/rails

参考: 週刊Railsウォッチ20240228: rails newで.devcontainer用ファイルをセットアップするようになった

  • 新規Railsアプリの作成時に.devcontainerフォルダとその内容を生成するようになった

この.devcontainerフォルダには、リモートコンテナ内でアプリを起動して開発するのに必要なものがすべて含まれる。

コンテナのセットアップには以下が含まれる。

  • redisコンテナ(KredisやAction Cableなど向け)
  • データベース(SQLite、PostgreSQL、MySQL、MariaDBのいずれか)
  • ヘッドレスChromeコンテナ(システムテスト用)
  • Active Storage(ローカルディスク利用設定済み、プレビュー機能も動く)
  • アプリのセットアップでこれらのオプションのいずれかをスキップすると、コンテナのコンフィグに含まれなくなる。

--skip-devcontainerオプションを指定することでファイルをスキップできる。

Andrew Novoselac & Rafael Mendonça França


  • システムテストのアプリケーションサーバーを設定するSystemTestCase#served_byメソッドを導入

デフォルトではlocalhostに設定される。このメソッドを使うことで、以下のようにホスト名とポートを手動で指定可能になる。

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  served_by host: "testserver", port: 45678
end

Andrew Novoselac & Rafael Mendonça França

🔗 Don't load *_test.rb file from the "fixtures" folder: by Edouard-chin · Pull Request #51068 · rails/rails

bin/rails testを実行したときに、*_test.rbという名前のファイルがfixturesフォルダにある場合は読み込まないようになった

Edouard Chin

🔗 Don't pop logger tags in Rails::Rack::Logger until request is finished by KJTsanaktsidis · Pull Request #50992 · rails/rails

  • config.log_tagsで設定したロガータグが、request.action_dispatchハンドラの処理中に無効にならないよう修正

KJ Tsanaktsidis

🔗 Setup jemalloc in default Dockerfile to optimize memory allocation by northeastprince · Pull Request #50943 · rails/rails

参考: 週刊Railsウォッチ20240221: RailsのDockerfileでjemallocがデフォルトで使われるようになった

  • メモリ最適化のため、Dockerfileでjemallocをセットアップするようになった

Matt Almeida, Jean Boussier

🔗 Commented out lines in .railsrc file should not be treated as arguments by williantenfen · Pull Request #50904 · rails/rails

参考: 週刊Railsウォッチ20240221: .railsrcファイルのコメントアウトが効いていなかったのを修正

.railsrcファイル内でコメントアウトされた行は、rails new generatorコマンドで引数として扱うべきではない。#以降のテキストを無視するようにARGVScrubberを更新する。

Willian Tenfen

🔗 Skip CSS when creating APIs. by ruyrocha · Pull Request #50907 · rails/rails

参考: 週刊Railsウォッチ20240221: API生成時にCSSファイルを生成しないよう修正

  • APIの生成時にCSSをスキップするようになった

Ruy Rocha

🔗 Update rails console prompt by st0012 · Pull Request #50825 · rails/rails

  • RailsコンソールのプロンプトにRailsの現在の環境名を表示するようになった
my-app(dev)>    # RAILS_ENV=developmentの場合
my-app(test)>   # RAILS_ENV=testの場合
my-app(prod)>   # RAILS_ENV=productionの場合
my-app(my_env)> # RAILS_ENV=my_envの場合

なお、このアプリケーション名はconfig/application.rbのアプリケーションモジュール名から導出される。たとえば、MyAppはプロンプトでmy-appと表示される。

さらに、ターミナルでサポートされている場合は、環境名が development(青)、test(青)、production(赤)でそれぞれ表示される。

Stan Lo

🔗 Ensure only directories exist in Rails default load paths by aeroastro · Pull Request #50723 · rails/rails

参考: 週刊Railsウォッチ20240215: デフォルトの読み込みパスにファイルが含まれないよう修正

  • Railsエンジンでの初期化で、以下の読み込みパスにディレクトリ以外のものが含まれないよう修正
    • autoload_paths
    • autoload_once_paths
    • eager_load_paths
    • load_paths

修正前は、appディレクトリ以下のファイルが含まれてしまうことがあった。

Takumasa Ochi

🔗 Prevent unnecessary application reloads in development by aeroastro · Pull Request #50708 · rails/rails

参考: 週刊Railsウォッチ20240206: オートロードパスにないファイルの再読み込みをdevelopment環境で防止するよう修正

  • developmentモードでアプリケーションを不必要に再読み込みしないよう修正

従来は、オートロードパスの外にある一部のファイルによって不要な再読み込みがトリガーされていた。この修正によって、アプリケーションがRails.autoloaders.main.dirsに沿って再読み込みされるようになり、不要な再読み込みを防止する。

Takumasa Ochi

🔗 Add oven-sh/setup-bun to GitHub CI when generating an app with bun by tangrufus · Pull Request #50636 · rails/rails

参考: 週刊Railsウォッチ20240206: bunを使うアプリがGitHub CIでbunをセットアップするよう修正

  • bunを有効にして生成したアプリが、GitHub CIでoven-sh/setup-bunを使うよう修正

TangRufus

oven-sh/bun - GitHub

🔗 Do not generate pidfile in production environments by hschne · Pull Request #50644 · rails/rails

参考: 週刊Railsウォッチ20240206: production環境ではserver.pidファイルを生成しないようになった

  • production環境でPIDファイルを生成しないようになった

Hans Schnedlitz

🔗 refactor: default annotate_rendered_view_with_filenames to true in development by adrianthedev · Pull Request #50436 · rails/rails

  • development環境ではconfig.action_view.annotate_rendered_view_with_filenamestrueに設定するようになった

Adrian Marin

参考: §3.11.16 config.action_view.annotate_rendered_view_with_filenames -- Rails アプリケーションの設定項目 - Railsガイド

🔗 Add BACKTRACE env variable to turn off backtrace by ghiculescu · Pull Request #50563 · rails/rails

  • バックトレースのクリーニングを無効にするBACKTRACE環境変数をサポート

これは以下のようにフレームワークのコードをデバッグするときに有用。

BACKTRACE=1 bin/rails server

Alex Ghiculescu

🔗 Raise ArgumentError when reading from config.x with arguments by seanpdoyle · Pull Request #50050 · rails/rails

  • 以下のようにコンフィグ値の読み取りで引数が渡されたら、ArgumentError扱いするようになった
config.x.this_works.this_raises true # ArgumentErrorになる

Sean Doyle

🔗 Add default pwa manifest and service worker file by dhh · Pull Request #50528 · rails/rails

参考: 週刊Railsウォッチ20240123: PWA用のマニフェストファイルとサービスワーカーファイルをデフォルトで追加する

  • app/views/pwaから配信され、ERBで動的にレンダリング可能なマニフェストとサービスワーカー用のデフォルトPWAファイルを追加する

生成されるルーティングファイル内のデフォルトルーティングを用いて、これらのファイルを明示的にrootにマウントする。

DHH

🔗 Switch to headless chrome by default by dhh · Pull Request #50512 · rails/rails

  • 新規アプリケーションのシステムテストでヘッドレスChromeをデフォルトで利用するよう更新

DHH

🔗 Default to creating GitHub CI files by dhh · Pull Request #50508 · rails/rails

参考: 週刊Railsウォッチ20240123: GitHub CI向けの設定ファイルをデフォルトで追加するようになった

  • dependabot、brakeman、rubocop、およびテスト実行用のGitHub CIファイルを追加する

--skip-ciを指定することでスキップ可能。

DHH

🔗 Add Brakeman by default to new apps by vipulnsward · Pull Request #50507 · rails/rails

  • brakeman(セキュリティ脆弱性の静的解析用gem)がデフォルトで追加されるようになった

--skip-brakeman optionオプションでスキップ可能。

vipulnsward

🔗 Add rubocop-rails-omakase to new Rails applications by zzak · Pull Request #50486 · rails/rails

  • rubocop-rails-omakase gemを用いてRuboCopルールがデフォルトで追加されるようになった

--skip-rubocopでスキップ可能。

DHH and zzak

🔗 Add runner script option to disable Executor wrap by bensheldon · Pull Request #50223 · rails/rails

参考: 週刊Railsウォッチ20240117: Railsのランナーに--skip-executorオプションが追加された

  • bin/rails runner--skip-executorオプションを指定することで、ランナースクリプトをExecutorでラップせずに実行可能になった

Ben Sheldon

🔗 Make isolated engines aware of ActiveRecord::Base table name prefix by chaadow · Pull Request #50247 · rails/rails

参考: 週刊Railsウォッチ20231222: Rails::Engineisolate_namespaceメソッドを修正

注: これはRails 7.1.3でリリース済みです。

  • 分離したエンジンにActiveRecord::Base.table_name_prefixコンフィグが反映されるよう修正

これにより、エンジンが定義するモデル(Active Storageなど)がActive Recordのテーブル名プレフィックスを尊重するようになる。

Chedli Bourguiba

🔗 Fix running db:system:change with no Dockerfile by skipkayhil · Pull Request #49988 · rails/rails

注: これはRails 7.1.2でリリース済みです。

  • アプリにDockerfileがない場合にdb:system:changeを実行するとエラーになる問題を修正。

Hartley McGuire

🔗 Ignore inline attachments and show attached emails in attachment list by c960657 · Pull Request #49828 · rails/rails

参考: 週刊Railsウォッチ20231122: Action Mailerのプレビューでインライン添付ファイルを別表示にした

  • Action Mailerのプレビューで、インライン添付ファイルを通常の添付ファイルと分けて表示するようになった。

例:

Attachments: logo.png file1.pdf file2.pdf

上は以下のように表示される。

Attachments: file1.pdf file2.pdf (Inline: logo.png)

Christian Schmidt and Jonathan Hefner

🔗 Only show SMTP envelope recipient when relevant by c960657 · Pull Request #48782 · rails/rails

参考: 週刊Railsウォッチ20231122: SMTP-To:を必要な場合にのみ表示するよう修正

  • Action Mailerのプレビューで、ToCcBccの和集合と一致しない場合にのみSMTP-To:を表示するようになった

Christian Schmidt

🔗 Enable YJIT by default if running Ruby 3.3+ by byroot · Pull Request #49947 · rails/rails

参考: 週刊Railsウォッチ20231122: Ruby 3.3以上でRailsアプリを実行するとYJITがデフォルトで有効になる

  • Ruby 3.3以上で実行される新規アプリケーションでYJITがデフォルトで有効になる

追加されるconfig/initializers/enable_yjit.rbイニシャライザは、Ruby 3.3以上で実行される場合にYJITを有効にする。

Jean Boussier

🔗 ActionMailer Email Preview - show date header when present by sampatbadhe · Pull Request #49790 · rails/rails

参考: 週刊Railsウォッチ20231122: メールにDateヘッダーが存在する場合はAction Mailerのプレビューで日付を表示

  • Action Mailerのプレビューで、メッセージのDateヘッダーが存在する場合は日付を表示するようになった

Sampat Badhe

🔗 Non-zero exit status on migration file creation errors by kyoshidajp · Pull Request #49644 · rails/rails

参考: 週刊Railsウォッチ20231114: マイグレーションファイル作成に失敗したら0以外のステータスを返すよう修正

  • マイグレーションファイル作成に失敗したら0以外のステータスを返すよう修正

Katsuhiko YOSHIDA

🔗 Make Dockerfile template compatible with Kubernetes rootless pods by ivanfed0t0v · Pull Request #49742 · rails/rails

参考: 週刊Railsウォッチ20231114: rails newで生成されるDockerfileがKubernetesでエラーになる問題を修正

  • DockerfileテンプレートないのUIDとGIDを数値形式に変更

rails newで生成されるDockerfileでは、デフォルトのユーザー名とグループ名をUID:GIDではなく名前で設定していた。このため、Kubernetesで以下のエラーが発生することがあった。

container has runAsNonRoot and image has non-numeric user (rails), cannot verify user is non-root

この変更によって、ユーザーとグループが数値で設定されるようになる。

Ivan Fedotov

🔗 Use Thor's enum for class_options by p8 · Pull Request #49609 · rails/rails

  • rails newのオプションに無効な値を渡せないよう修正

rails new--databaseオプション、--asset-pipelineオプション、--cssオプション、--javascriptオプションに渡す引数はそれぞれ異なる。この修正はそれらの引数をバリデーションする。

Tony Drake, Akhil G Krishnan, Petrik de Heus

参考: 週刊Railsウォッチ20231024前編: rails new--databaseオプションなどに誤った値を渡すと通知するようになった

🔗 Conditionally print $stdout when invoking run_generator by stevepolitodesign · Pull Request #49448 · rails/rails

  • run_generatorが呼び出された場合に$stdoutに出力するかどうかを指定可能になった

ジェネレータテストをデバッグしやすくするため、$stdoutをキャプチャする代わりに条件付きで出力する機能を追加した。

これにより、binding.irbputsの呼び出しが期待通りに動作する。

RAILS_LOG_TO_STDOUT=true ./bin/test test/generators/actions_test.rb

Steve Polito

🔗 Remove config.public_file_server.enabled from environment templates by Adrian-Hirt · Pull Request #49851 · rails/rails

  • すべての環境でジェネレータのconfig.public_file_server.enabledオプションを削除するようになった

この値はどの環境でも同じであるため。

Adrian Hirt

以前の変更については7-1-stableのChangelogを参照。

関連記事

Rails 7.1.0 Railties CHANGELOG(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。