[rails/rails] String#squishの正規表現最適化で約2倍の高速化を実現
String#squishの正規表現を最適化し、単一スペースを除外することで約2倍の高速化を実現。文字クラス交差演算子を使用し、2文字以上の空白またはスペース以外の空白文字のみをマッチさせる実装に変更。
Deep & Concise - OSS変更の定点観測
String#squishの正規表現を最適化し、単一スペースを除外することで約2倍の高速化を実現。文字クラス交差演算子を使用し、2文字以上の空白またはスペース以外の空白文字のみをマッチさせる実装に変更。
Rails 8.0のActionView::TestCaseで、setupメソッド内で定義したインスタンス変数がビューに公開されない問題を修正。after_setupフックでの変数キャプチャを廃止し、静的な除外リストベースのアプローチに変更することで、テストライフサイクル全体で変数を正しく検出できるようになりました。
Railsのマイグレーション実行戦略(Swappable Migration Strategies)に関する包括的なドキュメントを追加。ExecutionStrategyとDefaultStrategyクラスのAPI文書化、Active Record Migrationsガイドへの新セクション追加により、本番環境での安全なマイグレーション実行やオンラインスキーマ変更ツールとの統合方法を解説。
Active Recordの`type_for_column`メソッドから、過去のリファクタリングで不要になっていた`connection`引数を削除。メソッドシグネチャがシンプルになり、コードの意図がより明確になりました。
Array#in_groupsメソッドに入力値検証を追加し、0以下の値やnilに対して明確なエラーメッセージを返すように改善。類似メソッドin_groups_ofとの挙動の一貫性を確保。
ActiveJobの`retry_on`で、`wait` Procがエラーオブジェクトを第2引数として受け取れるようになりました。APIレート制限エラーなど、エラー自体が持つリトライタイミング情報を活用した動的なリトライ戦略の実装が可能になります。Procのarity(引数の数)をチェックすることで、既存コードとの完全な後方互換性を維持しています。
Rails 8.0でActive JobのResqueアダプタが非推奨化されました。Resque gem v3.0以降が独自のアダプタを提供するため、Rails 9.0での削除に備えてgemのアップグレードが推奨されます。Sidekiqに続く、ジョブキューライブラリへのメンテナンス責任委譲の一環です。
ActionCableのClientTestでPumaが設定するRACK_ENV環境変数がテスト後にクリーンアップされず、LeakCheckerエラーを引き起こしていた問題を修正。with_puma_serverメソッドにRACK_ENVの保存・復元処理を追加し、テストの独立性を確保。
Railsのシステムテストで`RAILS_SYSTEM_TESTING_SCREENSHOT_HTML`環境変数を使用してHTML出力を保存する際、具体的に`1`という値を設定する必要があることがドキュメントに明記されました。ソースコードを調査せずとも正しい設定が可能になります。
Rails 8.0の並列テスト実行機能において、リファクタリング時に誤って削除された`with_info_handler`呼び出しを復元。この修正により、並列実行時のテスト出力制御とレポーター機能が正常に動作するようになりました。
Rails 8.1の並列テスト機能で、誤って削除されていた`with_info_handler`の呼び出しを復元。テスト結果の報告が適切に行われるようになり、カスタムレポーターやCI/CDパイプラインでの詳細なテスト結果取得が正常に機能するようになりました。
ActionController::Liveの読み込みを遅延させ、実際に使用されるまでロードしないように改善。新しいload hook `action_controller_live`を導入し、設定の適用タイミングを最適化。ストリーミング機能を使用しないアプリケーションでは起動時のパフォーマンスが向上します。
Railties のテスト実行時に `--trace` オプションを使用すると、テスト成功後にエラーが発生していた問題を修正。Rake のオプションが Minitest の `at_exit` フックに渡されることを防ぐため、テスト終了時に `ARGV.clear` を実行するように変更。
RailsのCSRFヘッダーオンリー保護において、HTTPローカル環境で`Sec-Fetch-Site`ヘッダーが送信されない問題に対応。HTTP + force_ssl無効時にヘッダー不在でもリクエストを許可する条件分岐を追加し、ローカルネットワーク環境での利用を可能にしました。本番環境のセキュリティレベルは維持されます。
Railsテストスイートにおける環境変数の適切なクリーンアップを実現。ENV.deleteパターン、with_rails_envヘルパー、restore_default_configの活用により、テスト間の状態漏洩を防止し、CI環境での実行安定性を向上。
Rails の change_table bulk: true オプション使用時、マイグレーションの revert 処理で index の削除が失敗する問題を修正。commands.reverse により operations を逆順実行することで、依存関係を保ちながら正しくロールバックできるようになりました。
Railsのマイグレーションで `change_table bulk: true` をロールバックする際、テーブル名のプレフィックス/サフィックスが正しく適用されない問題を修正。`bulk_change_table` 呼び出し時に、元の引数ではなくテーブル定義オブジェクトの `name` プロパティを参照するように変更。
Ruby 3.3以降でRake 13.1.0が標準バンドルされるようになったため、RailsのGemfileから明示的なRakeバージョン制約(>= 13)を削除。依存関係の管理がシンプルになり、Ruby本体の進化に合わせた自然な整理が行われました。
ActiveModel::Errors#added? メソッドで、コールバックオプション(allow_nil、if、unlessなど)を指定したエラーチェックが常にfalseを返す不具合を修正。strict_match?メソッドで、クエリ側のオプションからもコールバックオプションをフィルタリングすることで、対称的な比較を実現。
Rails 8.2で、すべての主要ブラウザがサポートを終了した`X-XSS-Protection`ヘッダーがデフォルト設定から削除されます。このヘッダーは Rails 7.0で無効化(`0`)されていましたが、今回のアップデートで完全に削除され、セキュリティヘッダーの構成がよりシンプルになります。