https://github.com/rails/rails
MySQLのDDL操作において、`algorithm:`と`lock:`オプションがカラム操作(`add_column`、`change_column`、`remove_column`、`rename_column`)にも指定できるようになりました。これまで生SQLで記述せざるを得なかった大規模テーブルへのオンラインスキーマ変更が、Railsマイグレーションの範囲内で完結します。
Railsが生成するDockerfileテンプレート(`Dockerfile.tt`)とテストフィクスチャ(`Dockerfile.test`)に対し、2つのレイヤー最適化が適用されました。`rm -rf node_modules`をassets precompileステップに統合することで約13秒、`chown -R`を`COPY --chown`に置き換えることで約50秒、合計60〜70秒のビルド時間短縮が見込まれます。
`activerecord`の11件のテストが`ActiveSupport::Testing::NotificationAssertions`の`capture_notifications`ヘルパーを使用するよう簡素化されました。手動でのサブスクライバ管理や`ensure`ブロックによるクリーンアップが不要になり、フィルタリングや変換は標準の`Enumerable`メソッドチェーンに委ねる設計で、購読解除漏れのリスクを構造的に排除しています。
`activesupport/test/cache/behaviors/cache_store_behavior.rb` の2つのInstrumentationテストが `capture_notifications` ヘルパーを使う形にリファクタリングされました。手動のサブスクライバー登録と `ensure` ブロックによるクリーンアップが不要になり、キャプチャスコープがブロックで明示されることでテストの意図が構造から読み取れるようになっています。
SQLiteの仮想テーブルが `ActiveRecord::SchemaDumper.ignore_tables` の設定を無視してスキーマダンプに出力されていたバグが修正されました。`sqlite3/schema_dumper.rb` の `virtual_tables` メソッドに1行の `reject` を追加し、既存の `ignored?` メソッドを活用することで、FTS5やSpatialiteが生成する仮想テーブルも通常テーブルと同様にフィルタリングできるようになります。
Action TextのMarkdownパイプラインで、危険なURIスキーム(`data:text/html` など)を含む `<action-text-attachment>` 要素が未検証のままMarkdown画像リンクとして出力される問題を修正。`MarkdownConversion.markdown_link` に `Rails::HTML::Sanitizer.allowed_uri?` チェックを追加し、スキームが許可されない場合はリンクの代わりにエスケープされたテキスト `\[title\]` を返すようにした。`image:` オプションの統合により呼び出し側の処理も一元化されている。
SQLite の仮想テーブル検出に使用している `VIRTUAL_TABLE_REGEX` の正規表現を `.+` から `.*` に修正し、`USING module()` のように括弧内が空のケースでも正しくマッチするようになりました。SpatiaLite 拡張を GpkgMode で使用した際に壊れた `schema.rb` が生成される問題(#56969)が解消されています。
`async_query_executor` に `:global_thread_pool` を使用している環境で、スレッドプールが飽和して `caller_runs` フォールバックが発動すると、`execute_or_skip` が `IsolatedExecutionState` のインストゥルメンターを `EventBuffer` に置き換えたまま復元せず、以降の `sql.active_record` 通知がサイレントに消える問題を修正。`EventBuffer` のセットアップ前に既存のインストゥルメンターを保存し、`ensure` ブロックで確実に復元する2行の変更で対処しています。
`FutureResult#execute_or_skip`が`caller_runs`フォールバックポリシーで呼び出しスレッド上で実行された際に、`IsolatedExecutionState`のインストゥルメンターが`EventBuffer`で上書きされたまま復元されないバグを修正。2行の保存・復元処理の追加により、スレッドプール飽和時でも`sql.active_record`通知が正常に配信されるようになります。
`FutureResult#execute_or_skip` がスレッドプール飽和時に `caller_runs` フォールバックでカレントスレッド上で実行された際、`EventBuffer` で上書きされたインストゥルメンターが復元されずスレッド汚染が発生する不具合を修正しました。ミューテックス取得直後に既存のインストゥルメンターを保存し、`ensure` ブロックで復元する2行の変更で、`sql.active_record` 通知の配信保証を回復しています。
`--skip-action-mailer`でRailsアプリを作成後に`authentication`ジェネレータを実行すると、ActionMailer関連のテストが生成されエラーが発生する問題を修正しました。テンプレートに`defined?(ActionMailer::Railtie)`チェックを追加し、ActionMailerが無効な環境では`create`アクション関連のメールテストを生成しないよう変更しています。
`actionpack/test/controller/redirect_test.rb`内の`ActiveSupport::Notifications`関連テストを`NotificationAssertions`ヘルパーへ移行するリファクタリングです。`capture_notifications`ヘルパーの導入により、手動でのサブスクライバー登録・解除(`ensure`ブロック)が不要になり、テストコードがより簡潔になりました。機能変更は伴いません。
`AbstractAdapter.dbconsole` クラスメソッド内の `NotImplementedError` メッセージで `self.class` を使っていたため、アダプタークラス名ではなく `Class` という文字列が表示される不具合を修正しました。`#{self.class}` を `#{self}` に変更する1行の修正で、クラスメソッドにおける `self` の正しい挙動に合わせ、エラーメッセージに正確なクラス名が表示されるようになります。
`Reflection#foreign_key` が常に frozen/interned な String または Array を返すという型保証に基づき、`counter_cache` 処理内の不要な `.to_s` / `.to_sym` 変換と `_foreign_keys_equal?` ヘルパーメソッドが削除されました。機能的な変更はなく、型の保証をコードに直接反映させたクリーンアップです。
`ActiveRecord.raise_on_missing_required_finder_order_columns` のデフォルト値が、コピー&ペーストのミスにより `false` ではなく `nil` になっていた不具合を修正。`nil` と `false` はどちらもfalsy値のため動作への影響はないが、Railsガイドに記載された公式デフォルト値とコードの乖離が解消される。
Ruby 4.1.0dev での比較エラーメッセージ末尾への追加情報付加(`coercion was not possible` 等)により、Rails Nightly CI で `test_validates_comparison_of_incomparables` が失敗するようになりました。テストの完全一致を正規表現の前方一致(`/\Acomparison of Integer with String failed/`)に変更し、`assert_equal` を `assert_match` に統一することで、メッセージのプレフィックス検証を維持しつつ将来のメッセージ変更に耐性を持たせています。
PostgreSQL 9.5で追加された`array_position`関数を利用するコードが#55654で導入されていたにもかかわらず、バージョンチェックのしきい値が9.3のままだった不整合を修正。`check_version`メソッドのしきい値を`9_05_00`に更新し、関連ドキュメント3箇所のバージョン表記も合わせて9.5に統一しました。
`ActiveSupport::TestCase` における `run_order` メソッド定義のガード条件で、`respond_to?` のレシーバーが `Minitest` モジュールから正しい対象である `Minitest::Runnable` クラスへ修正されました。Minitest 6のAPIへの対応コードが、実際にメソッドを持つオブジェクトへ正しく問い合わせるようになります。
`config.action_dispatch.x_sendfile_header` が `nil` の場合、`Rack::Sendfile` ミドルウェアをスタックへ追加しないよう変更されました。このミドルウェアはヘッダー未設定時にnoopとして動作するため、デフォルト構成から除外することでミドルウェアスタックを簡潔に保ちます。`x_sendfile_header` を明示的に設定しているアプリケーションへの影響はありません。
`File.binread` でロードされたテンプレートで strict locals に非ASCII文字のデフォルト値を使用した際に発生する `Encoding::CompatibilityError` を修正しました。`strict_locals!` が `encode!` より先にキャプチャした `@strict_locals` が ASCII-8BIT タグを引き継ぐことが原因で、`force_encoding(Encoding.default_external)` の追加によりエンコーディングタグを揃えることで解消しています。