`in_paginated_batches` スペックを `lease_connection` に移行し `permanent_connection_checkout = :disallowed` に対応

activeadmin/activeadmin

permanent_connection_checkout = :disallowed が有効な環境下でテストが失敗する問題を修正するため、ActiveRecord::Base.connectionActiveRecord::Base.lease_connection に置き換えました。

背景

spec/support/rails_template.rb では、テスト環境を含むすべての環境に対して config.active_record.permanent_connection_checkout = :disallowed が設定されています。この設定が有効な場合、ActiveRecord::Base.connection を直接呼び出すとエラーが発生します。

in_paginated_batches のスペックでは、クエリキャッシュが無効化されていることを確認するために ActiveRecord::Base.connection.query_cache_enabled を呼び出していました。この呼び出しが上記の設定と衝突し、テストが失敗する原因となっていました。

permanent_connection_checkout = :disallowed は、コネクションを明示的にチェックアウトせずに connection を呼び出す実装上の問題を検出するための設定であり、この設定をすべての環境に適用することで潜在的なコネクション管理の問題を早期に発見できます。

技術的な変更

spec/unit/resource_controller/data_access_spec.rb 内の1行を置き換えることで対応しています。

変更前:

expect(ActiveRecord::Base.connection.query_cache_enabled).to be_falsy

変更後:

expect(ActiveRecord::Base.lease_connection.query_cache_enabled).to be_falsy

lease_connection は Rails 7.2 で導入された API で、permanent_connection_checkout = :disallowed の設定下でも安全にコネクションを取得できます。connection との違いは、リクエストやトランザクションのスコープに縛られない一時的なコネクションの借り出しを行う点にあります。

rails_template.rb 側の変更はなく、permanent_connection_checkout = :disallowed の設定は意図的にすべての環境に適用され続けます。

設計判断

テスト設定を緩和するのではなく、テストコード側を修正する方針が採用されました。

permanent_connection_checkout = :disallowed の設定を外す、あるいはテスト環境だけ除外するという選択肢もありましたが、本PRではその設定を維持したまま呼び出し側を修正しています。これは、同設定が本来の目的である「不適切なコネクション呼び出しの検出」を果たし続けるようにするための判断です。

テストの厳格さを下げることなく、Rails 7.2+ の推奨 API に沿った実装へ移行した変更といえます。

まとめ

1行の変更ながら、permanent_connection_checkout = :disallowed という厳格なコネクション管理ポリシーをテスト環境でも維持するための重要な修正です。lease_connection への移行は、Rails 7.2+ の推奨 API への準拠であり、コネクション管理の問題を隠蔽せず適切に検出できる状態を保ちます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
167e92fd

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)→セクション群(各論)→まとめ(結論)の構成が明確です。特に、PRには明示されていなかった「設計判断」セクションを設けることで、変更の意図がより深く理解できるようになっています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きのシンタックスハイライト(```ruby:ファイルパス)およびPR番号のリンク記法([#8958](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

`permanent_connection_checkout`や`lease_connection`といった専門用語を前提としており、対象読者である専門知識を持つエンジニアに適した内容となっています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクション、各パラグラフが総論→各論の構成になっており、段落の冒頭にトピックセンテンスが置かれているため、非常に読みやすいです。1段落1トピックの原則も守られています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内のコードブロックは、提供されたDiff情報を正確に反映しており、ファイルパスも一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`lease_connection`、`permanent_connection_checkout`、`query_cache_enabled`などの技術用語がPR情報と一致しており、文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

`connection`から`lease_connection`への変更理由、`permanent_connection_checkout`設定の影響など、技術的な説明はすべて正確で、PR情報によって裏付けられています。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張は、PRのDescriptionやDiffの内容に基づいています。「設計判断」セクションの内容も、PRの「config intentionally applies to all environments」という記述から導かれる妥当な解説であり、ハルシネーションは見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#8958)が正確に記載・リンクされています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルは、元のPRのタイトル「Use `lease_connection` in `in_paginated_batches` spec to support `permanent_connection_checkout = :disallowed`」の内容を的確に要約しており、整合性が取れています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

「Rails 7.2で導入された」という情報はPR Descriptionにも「Rails 7.2+ API」として記載されており、PR情報に基づいています。PRに記載のない外部知識の追記は見られませんでした。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

記事内に時間表現に関する記述はなく、事実を客観的に述べているため問題ありません。