Rails 8.1 リリースノートまとめ
- POST
Rails 8.1 リリースノートについてまとめたものを備忘録として残しておく
Rails 7 リリースノートまとめ Rails 7.1 リリースノートまとめ Rails 7.2 リリースノートまとめ Rails 8 リリースノートまとめ Rails 8.1 のリリースノートは以下の通り
Rails 8.1 系での新機能および変更点 Railties rails credentials:fetch PATH コマンドが追加された フィクスチャで動的 ERB 式の代わりに静的 BCrypt パスワードダイジェストが生成されるようになった .gitignoreエントリが拡張され、すべてのキーファイルが無視されるようになった bin/setupに--reset オプションが追加された GitHub ActionsワークフローテンプレートのRuboCopジョブにRuboCopキャッシュ復元が追加された ActionMailerを使用しないアプリケーションで認証ジェネレータがメーラー関連ファイルの生成をスキップするようになった bin/ciが導入され、テスト、スタイルチェック、セキュリティ監査をローカルまたはクラウドで実行できるようになった 認証ジェネレータ実行時にセッションコントローラテストが生成されるようになった bin/bundler-auditとconfig/bundler-audit.ymlが追加され、アプリケーションgemの既知のセキュリティ問題を発見・管理できるようになった bin/bundlebinstubの生成が停止された SessionTestHelperモジュールが追加され、sign_in_as(user)とsign_outテストヘルパーが提供されるようになった 認証ジェネレータでパスワードリセットのレート制限が追加された rails new --minimalオプションが更新され、最近追加された機能が除外されるようになった アプリケーションレイアウトにapplication-nameメタデータが追加された ローカルでENVまたはcredentialsからsecret_key_baseが使用されるようになった 生成されたci.ymlファイルにRAILS_MASTER_KEYプレースホルダーが導入された 非標準環境でも Rails コンソールプロンプトがカラー化されるようになった 開発環境とテスト環境で YJIT が有効化されなくなった ポリシーが設定されている場合のみPermissionsPolicy::Middlewareが含まれるようになった Action Cable ActionCable::Channel#stream_for に複合チャネルを渡せるようになった 例: stream_for [ group, group.owner ] Redis のサブスクリプション接続識別子に nil を設定できるようになった Action Pack action_controller.loggerを nil または false に設定することで無効化できるようになった .md/.markdownが Markdown 拡張として追加され、デフォルトのmarkdown:レンダラーが追加された エンジンルート検査コマンドにヘッダーが追加された エラーページに「Copy as text」ボタンが追加された rate_limitメソッドにscope:オプションが追加された ActionDispatch::Executorでrack.response_finishedコールバックのサポートが追加された rescue_fromが呼び出されたときにログが生成されるようになった Rails 設定の hosts からのホストリダイレクトが許可されるようになった rate_limit.action_controller通知に追加のペイロードが含まれるようになった 組み込みヘルスコントローラーに JSON サポートが追加された ブラウザからクラッシュでソースファイルを開けるようになった クエリ文字列キーが値と同様に有効なエンコーディングかチェックされるようになった PublicExceptionsとDebugExceptionsで HEAD リクエストの空のボディが常に返されるようになった RFC 9111に従った HTTP Cache-Control リクエストディレクティブの包括的なサポートが追加された assert_in_body/assert_not_in_bodyがレスポンスボディ内のテキストをチェックする最も簡単な方法として追加された クッキー名が最大許可サイズの計算に含まれるようになった RFC 9111に従ったmust-understandディレクティブが実装された JSON レンダラーが HTML エンティティや Unicode 行区切り文字をエスケープしなくなった テストルートを挿入する前に遅延ルートセットが読み込まれるようになった レンダリング後に head が呼び出された場合にAbstractController::DoubleRenderErrorが発生するようになった Cookie Serializerがメッセージパックを使用する際にActive Support SafeBufferをシリアライズできるようになった Rails.application.reload_routes!がほぼすべてのルートをクリアする問題が修正された #resource または#resources に無効な :only または :except オプションが与えられた場合のArgumentErrorにリソース名が追加された 存在しないコントローラーを指すルートが 404 ではなく 500 を返すようになった ActionDispatch::Session::CacheStoreにcheck_collisionsオプションが追加された ExceptionWrapperでビルトインテンプレートとのバックトレース行のマッチングが改善された Mimeタイプ のシンボルでコンテンツタイプを設定できるようになった Action View preload_link_tagで生成される HTML と一致するように Link ヘッダーに fetchpriority が追加された preload_link_tagで生成される Link ヘッダーに CSP nonce が追加された current_page?がmethod:オプションで特定の HTTP メソッドとマッチできるようになった form_tag,token_tag,method_tagで生成される隠し入力から autocomplete=“off” が削除された button_to,check_box,select(multiple付き),file_fieldフォームに含まれる隠しパラメータフィールドから autocomplete=“off” が削除された Action Viewテンプレート間の依存関係を追跡する戦略の設定が有効になった relative_time_in_wordsヘルパーが導入された nonce: falseが javascript_tag, javascript_include_tag, stylesheet_link_tag から nonce 属性を削除するようになった 無制限の数のオブジェクトから dom_id のような文字列を作成する dom_target ヘルパーが追加された collection_checkboxesが隠し<input>を生成する際にhtml_options[:form]が尊重されるようになった レイアウトが render に渡されるローカル変数にアクセスできるようになった テンプレートの strict locals に関連する引数エラーがActionView::StrictLocalsErrorを発生させるようになった ERB テンプレートまたは do-end ブロック内でエラーが発生した場合のマルチライン メソッドのエラーハイライトが改善された コンパイルされたテンプレートでソーステンプレートの終端を超えた行でエラーが発生した場合の ERB テンプレートエラーハイライトのクラッシュが修正された ERB テンプレートエラーハイライトの信頼性が向上し、ハイライトでの無限ループとクラッシュが修正され、代替 ERB ハンドラーの許容性が改善された hidden_fieldとhidden_field_tagがカスタム autocomplete 値を受け入れるようになった content_security_policy_nonce_directives設定オプションで指定されたディレクティブの影響を受けるタグに nonce を自動的に追加する新しい設定content_security_policy_nonce_autoが追加された Action Mailer deliver_all_laterが追加され、複数のメールを一度にエンキューできるようになった Active Record libpq >= 18とpg < 1.6.0の互換性問題により、cancel_any_running_queryでPG::Connection#cancelの呼び出しがスキップされるようになった 新しいデータベース設定オプションkeepalive,max_age、min_connectionsが導入され、 pool が max_connections にリネームされた LIMIT 検証がクエリ生成時から limit() が呼び出された時に移動された ActiveRecord::CheckViolationエラークラスがチェック制約違反用に追加された ActiveRecord::ExclusionViolationエラークラスが排他制約違反用に追加された filter_attributesでフィルタされた属性がfilter_parametersでもフィルタされるようになった connection.current_transaction.isolationAPIが現在のトランザクションの分離レベルをチェックできるようになった #mergeと#orまたは#andと属性と SQL 文字列の混合で不正なクエリが生成される問題が修正された スキーマダンパーが :ruby 形式でダンプする際にActiveRecord.dump_schemasを考慮するようになった update_column/update_columnsメソッドに :touch オプションが追加された Active Record バッチングが範囲を使用する際にさらに最適化された インデックスとテーブル名の長さ検証のエラーメッセージに現在の文字長が含まれるようになった PostgreSQL 用の rename_schema メソッドが追加された アソシエーションの非推奨化サポートが実装された PostgreSQL アダプタの create DB が locale_provider と locale をサポートするようになった PostgreSQL で ntuples を使用して row_count を populateするようになった 永続化されていないレコードが厳密に読み込まれた has_and_belongs_to_many アソシエーションに include? されるかどうかのチェックが修正された ブロック内のすべてのプールのトランザクション分離を変更する機能が追加された 順序に依存するファインダーメソッド(#first、#last)が順序値なしで呼び出された場合にActiveRecord::MissingRequiredOrderErrorが発生するようになった 多態性 belongs_to アソシエーションで :class_name が無効になった db:migrate:reset が複数データベースをサポートするようになった ActiveRecord::Resultに affected_rows が追加された 再試行可能な SqlLiterals を #where に渡すことができるようになった insert_all/upsert_allで主キーのデフォルトが設定されるようになった ActiveRecord::DatabaseConfigurations用のロードフックactive_record_database_configurationsが追加された SQLite クエリで boolean カラムに TRUE と FALSE が使用されるようになった サポートされる SQLite の最小バージョンが 3.23.0 に引き上げられた 割り当てられた Active Record がアソシエーションをルックアップできるようになった 暗号化が属性ごとにsupport_unencrypted_data: trueを設定することをサポートするようになった モデルジェネレータがデータベース接続なしでカラムタイプを検証できるようになった 署名付き ID 検証器がRails.application.message_verifiersで設定可能になった PostgreSQLのstructure_loadでextra_flagsが前置されるようになった implicit_order_columnで主キー/制約の追加をバイパスできるようになった データベース設定でschema_formatを設定できるようになった MySQL v8.0.0+ と MariaDB v10.6.0+でインデックスの無効化がサポートされた ActiveRecord::Relation#reverse_orderでimplicit_order_columnが尊重されるようになった SQLite3 用のActiveRecord::Resultにカラムタイプが追加された 読み取り専用ロールで悲観的ロックを使用した場合にActiveRecord::ReadOnlyErrorが発生するようになった Rails アプリケーション外で SQLite3Adapter の dbconsole メソッドを使用する問題が修正された ActiveRecord::PendingMigrationアクションで複数データベースのマイグレーションが修正された 接続エラーで冪等なアソシエーションクエリの自動再試行が有効になった sql.active_record 計装に allow_retry が追加された PostgreSQL と SQLite3 で JOIN を使用した UPDATE のサポートが改善された ActiveSupport::Testing::Parallelizationに before-fork フックが導入され、既存の接続がクリアされるようになった PoolConfig が接続クラスへの参照を保持しなくなった 非同期クエリを使用する際に SQL 通知が送信されない場合がある問題が修正された PostgreSQL でダンプされたスキーマキャッシュの読み込みクエリが排除された ActiveRecord::Coder::JSONがインスタンス化できるようになった アソシエーション内の永続化されていないレコードでinsert_all/upsert_allを使用することが非推奨になった index_exists?でカラム名がオプションになった sql.active_record通知のペイロード名がeager loadingで「SQL」から「#{model.name} Eager Load」に変更された 接続エラーで冪等な#exists?クエリの自動再試行が有効になった update_allとサポートされていないメソッドの併用が非推奨になった schema.rb内のテーブルカラムがアルファベット順にソートされるようになった スキーマダンパー用のバージョンフォーマッターが導入された シリアライズされた属性が比較可能としてマークできるようになった MySQLのデフォルト関数がカラムのnullabilityを変更する際に削除される問題が修正された SQLite拡張がconfig/database.ymlで設定できるようになった ActiveRecord::Middleware::ShardSelectorが細かいデータベース接続切り替えをサポートするようになった insert_all/upsert_all後にリレーションがリセットされるようになった 並列テストデータベースのサフィックスに_Nが使用されるようになった データベース接続が最近検証されたことを記憶するようになった 複数のレコードのキャッシュカウンターをリセットできるようになった sql.active_record通知にaffected_rowsが追加された グループ化された計算でsumが修正された データベースごとにトランザクションテストの有効/無効がサポートされるようになった URL 設定を使用する際に query_cache 値がキャストされるようになった NULLS NOT DISTINCTがUNIQUE CONSTRAINTとUNIQUE INDEXの両方で動作するようになった PG::UnableToSend: no connection to the serverが接続関連の例外として再試行可能になった Active Storage GCP メタデータサーバーへの不要な呼び出しが削除された ダイレクトアップロードの進行状況がサーバー処理時間を考慮するようになった ActiveStorage::Filename#to_strが#to_sに委譲されるようになった config.active_storage.checksum_implementationを通じて代替MD5実装のサポートが追加された Blob が関連する Attachment を自動保存しなくなった Active Model バリデーションコールバックに except_on: オプションが追加された ActiveRecord::NormalizationがActiveModel::Attributes::Normalizationにバックポートされた Active Support ActiveSupport::Cache::Store#namespace=と#namespaceが追加された 並列テスト実行用のparallel_worker_idヘルパーが作成された ActiveSupport::Cache::Strategy::LocalCache::Middlewareのキャッシュが更新可能になった ActiveSupport::EventReporter用のassert_events_reportedテストヘルパーが追加された ActiveSupport::TimeZone#standard_nameメソッドが追加された Rails.eventでアクセス可能なStructured Event Reporterが追加された ActiveSupport::Loggerが#freezeフレンドリーになった ActiveSupport::Gzip.compressが入力に基づいて決定論的になった ActiveSupport::BacktraceCleaner#clean_locationsメソッドが追加された CurrentAttributesとExecutionContextの状態管理がテストケースで改善された ActiveSupport::BacktraceCleaner#first_clean_locationメソッドが追加された FileUpdateCheckerとEventedFileUpdateCheckerが Gem.path の変更を無視するようになった ActiveSupport::BacktraceCleaner#first_clean_frameメソッドが追加された CurrentAttributesインスタンスが常にクリアされるようになった 並列テストでbefore_fork_hookのパブリック API が追加された 並列テストデータベースの作成をスキップする機能が実装された 最大キャッシュキーサイズの設定が可能になった ActiveSupport::Cache::RedisCacheStoreで非ブロッキング削除にUNLINKコマンドが使用されるようになった Cache#read_counterとCache#write_counterが追加された ActiveSupport::Testing::ErrorReporterAssertions#capture_error_reportsが導入された ActiveSupport::ErrorReporter#add_middlewareが導入された 実行ラッピングがすべての例外(Exceptionを含む)を報告するように変更された ActiveSupport::Testing::Parallelization.before_fork_hookでテストワーカーフォーク直前に呼び出されるコールバックの宣言が可能になった #freeze_timeテストヘルパーが日付または時間引数を受け入れるようになった ActiveSupport::JSONがオプションを受け入れるようになった ActiveSupport::Testing::NotificationAssertionsのassert_notificationがデフォルトでペイロードサブセットとマッチするようになった nil.to_query("key")がkeyを返すようになった ActiveSupport::Cache::RedisCacheStoreで :redis オプションが既に ConnectionPool の場合に Redis を ConnectionPool でラップしないようになった ERB::Util.tokenizeが ERB タグを含まない文字列で完全な入力文字列と :PLAIN トークンを返すように変更された ERB::Util.tokenizeでマルチバイト文字の前に ERB タグがある場合の不正なトークン化バグが修正された ActiveSupport::Testing::NotificationAssertionsモジュールがActiveSupport::Notificationsのテストを支援するために追加された ActiveSupport::CurrentAttributes#attributesが各呼び出しで新しいハッシュオブジェクトを返すようになった ActiveSupport::JSON.encodeがCIDR記法をサポートするようになった ActiveSupport::FileUpdateCheckerが多くのファイル拡張子をチェックする際に高速化された Active Job ActiveJob::Serializers::ObjectSerializers#klassメソッドがパブリックになった ActiveJob::Continuablez を使用してジョブを中断・再開できるようになった enqueue_after_transaction_commitが有効な場合の ActiveJob エンキューコールバックの呼び出しがコミット後に延期されるようになった ActiveJob::Base#retry_onと#discard_onにreport:オプションが追加された ActiveJob::ConfiguredJob#perform_laterがブロックを受け入れるようになった デシリアライゼーション時に以前にシリアライズされたジョブクラスが不明な場合により具体的なエラーが発生するようになった Action Text fill_in_rich_text_areaオプションが Capybara に転送されるようになった アタッチメントアップロードの進行状況がサーバー処理時間を考慮するようになった Trix 依存関係がベンダーファイルではなく action_text-trixgem で満たされるようになった ActionText::RichText#embedsの割り当てが before_save から before_validation に変更された Action Mailbox Mail::Message に reply_to_address 拡張メソッドが追加された 非推奨および削除された機能 Action Pack 以下が削除された パラメータ名の先頭の角括弧([])をスキップする機能 クエリ文字列のセミコロン(;)区切りのサポート 複数のパスに対するルート設定のサポート Rails.application.config.action_dispatch.ignore_leading_brackets が非推奨になった Active Record 以下が削除された SQLite3 アダプターの :retries オプション MySQL の以下のカラムメソッド :unsigned_float :unsigned_decimal Active Storage azure ストレージサービスが削除された Active Job 以下が削除された ActiveJob::Base.enqueue_after_transaction_commit を :never, :always, :default に設定するサポート Rails.application.config.active_job.enqueue_after_transaction_commit 内部の SuckerPunch アダプタ