2026年4月24日号: Active Record の改善が続く週次レポート
2026年4月24日付の「This Week in Rails」では、PostgreSQL最小サポートバージョンの引き上げ、主キーのnull: trueに対するバリデーション強化、extendingのパフォーマンス改善、接続リース管理のバグ修正、ActiveStorageのffmpeg TTOUハング修正など、5件の注目変更が報告されました。
背景
今週号は Claudio Baccigalupo が執筆を担当し、Active Recordの品質・性能・正確性に関わる複数の変更が取り上げられています。Rails Worldスピーカー募集と2026年コミュニティサーベイへの参加告知も含まれており、コミュニティの活発な動きが伝わる内容です。
技術的な変更
PostgreSQL 最小サポートバージョンを 10.0 に引き上げ
#55282 により、Rails mainが要求する PostgreSQL の最小バージョンが 10.0 に引き上げられました。これまでのRailsはPostgreSQL 9.3のサポートを主張していましたが、2025年にリリースされたPostgreSQL 18との非互換性が問題となっていました。pg gem v1.6がすでに最小要求バージョンを引き上げていたことも背景にあり、今回の変更でRails本体の宣言もそれに追従する形となりました。
add_column で主キーに null: true を指定した場合のエラー化
#57204 は、主キーカラムへの null: true 指定を明示的なエラーとして扱う 変更です。主キーには無条件で NOT NULL 制約が付与されるため、null: true を渡しても実際には無視されるという不整合がありました。この変更により、ユーザーが指定した null: true が黙って無視されるのではなく、呼び出し自体が無効であることをエラーで明示するようになります。意図せずに誤った移行スクリプトを書いてしまうリスクが低減されます。
ActiveRecord::Relation#extending の高速化
#57199 では、extending メソッドによるActive Recordリレーションの拡張処理が最適化されました。PRによれば、extending の呼び出しが最大2倍速くなるとされており、リレーションの拡張を多用するコードベースに対して効果が見込まれます。
lease_connection と with_connection のネスト時の不具合修正
#57207 は、接続リース管理のスティッキーフラグが誤ってクリアされるバグを修正しています。lease_connection で接続を永続的にリースした状態で with_connection(prevent_permanent_checkout: true) をネストして呼び出すと、スティッキーフラグが誤ってクリアされ、外側の with_connection ブロック終了時に本来リースしたままのはずの接続が解放されてしまっていました。
ActiveStorage でのffmpegスポーン時のTTOUハング修正
#57201 は、ActiveStorageでの動画プレビュー生成時にRailsプロセスがハングする問題を修正しています。ffmpegはキー入力(例: q で終了)を監視するサブプロセスとして起動されますが、Railsが独自のプロセスグループで実行されている環境(例: overman使用時)では、TTOU シグナルがRailsプロセスに送信され、無期限のハングを引き起こしていました。
設計判断
今週の変更群に共通するのは、暗黙の動作を排除して明示的な失敗・正確な状態管理を優先する姿勢です。null: true のサイレント無視をエラーに昇格させた変更と、スティッキーフラグのクリアというステート管理バグの修正は、いずれも「意図しない動作が検出されずに継続してしまう」ことへの対処です。PostgreSQLの最小バージョン引き上げについても、すでにpg gem側で進んでいた事実に公式サポート宣言を合わせる形であり、実態と宣言のズレを解消するアプローチです。
まとめ
今週のRailsは、動作の正確性向上とエッジケースのバグ修正が中心でした。特にadd_columnの主キーバリデーション強化と接続リース管理の修正は、マイグレーションや接続プールを扱うアプリケーションの堅牢性に直結する変更です。暗黙の挙動を減らし、問題を早期に顕在化させる方向性が一貫して見受けられます。