Rails週次ニュース:コンソールでのクエリキャッシュ無効化と複数のバグフィックス
Rails週次ニュースの最新版が公開されました。主な内容として、Active Recordのクエリキャッシュがコンソールでデフォルト無効化され、頭字語の扱いやcomposite primary keyに関するバグフィックスが実施されています。
コンソールでのクエリキャッシュ無効化
#56678 により、Railsコンソールにおける Active Recordのクエリキャッシュ がデフォルトで無効化されました。クエリキャッシュを有効にしたい場合は、--query-cache フラグを指定してコンソールを起動します。
変更後の挙動:
rails console # クエリキャッシュ無効(デフォルト)
rails console --query-cache # クエリキャッシュ有効
この変更により、開発者はコンソールで実行したクエリが実際にデータベースに送信されることを確認できるようになります。キャッシュが必要な場合のみ、明示的にフラグを指定することでオプトインできます。
頭字語の活用形処理の改善
#56679 により、重複する頭字語の扱いが改善されました。ActiveSupport::Inflector が、より長い頭字語を優先して処理するようになっています。
変更後の動作:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym "USD"
inflect.acronym "USDC"
end
"USDC".underscore # => "usdc"
"USDC" という文字列が "USD" と "C" に分割されず、単一の頭字語として正しく処理されるようになりました。これにより、暗号通貨やその他の技術用語で、既存の頭字語を含むより長い頭字語を定義できます。
insert_all!における不要なインデックス検索の削除
#56666 により、insert_all! メソッドにおける unique indexの検索処理 が削除されました。
insert_all! は on_duplicate: :raise を使用し、ON CONFLICT 句なしのプレーンなINSERTを実行します。以前は find_unique_index_for が無条件に呼び出されていましたが、このメソッドでは unique index は必要ありません。
影響を受けるケース:
この不要な検索処理は、composite primary key を持つテーブルで、model.primary_key がスキーマの主キーカラムと異なる場合に問題を引き起こしていました。この修正により、そのようなテーブルでも insert_all! が正常に動作するようになります。
他のメソッドへの影響:
insert_all(on_duplicate: :skip)と upsert_all(on_duplicate: :update)は、conflict target句の生成のために引き続き unique index を必要とします。これらのメソッドの動作は変更されていません。
まとめ
今週のRails週次ニュースでは、開発体験の向上とバグフィックスに焦点を当てた変更が報告されました。コンソールでのクエリキャッシュ無効化により開発時のデバッグが容易になり、頭字語処理と insert_all! の修正により、より多くのユースケースで安定した動作が保証されます。