PostgreSQL設定の`schema_order`オプションを非推奨化

rails/rails

RailsのPostgreSQLアダプターにおいて、旧来のエイリアスである schema_order オプションが非推奨となりました。Rails 8.3での削除に向け、schema_search_path への移行が求められます。

背景

schema_orderschema_search_path が現在の名称として定まる以前から存在していた旧来のエイリアスです。PostgreSQLのスキーマ検索パスを指定するという機能は同一ながら、オプション名の乖離が続いていました。今回の変更は、この命名の不整合を解消し、設定キーを一本化するために行われています。

これまで postgresql_adapter.rb のドキュメントコメントでは schema_search_path の説明に「schema_order オプションとの後方互換性あり」と明記されていましたが、今回の非推奨化に伴いその記述は削除されています。

技術的な変更

非推奨警告は configure_connection メソッド内で、スキーマ検索パスを設定するロジックの直前に追加されました。

変更前:

unless @config[:schema_search_path] == false
  self.schema_search_path = @config[:schema_search_path] || @config[:schema_order]
end

変更後:

unless @config[:schema_search_path] == false
  if @config[:schema_order]
    ActiveRecord.deprecator.warn(<<~MSG.squish)
      The `schema_order` option in PostgreSQL database configurations is
      deprecated and will be removed in Rails 8.3. Use `schema_search_path` instead.
    MSG
  end
  self.schema_search_path = @config[:schema_search_path] || @config[:schema_order]
end

schema_order を設定している場合に ActiveRecord.deprecator 経由で警告を発するという構造で、警告発行後も @config[:schema_order] は引き続きフォールバックとして参照されます。これにより、Rails 8.3の削除までは実際の動作に変化はなく、移行猶予が与えられています。

テストコードでは、schema_order: "public" を渡して接続した際に非推奨警告が発生し、かつ schema_search_path が正しく "public" に設定されることを assert_deprecatedassert_equal で検証しています。

設計判断

ActiveRecord.deprecator を経由した警告方式は、Railsが標準的に採用している非推奨化パターンです。ActiveSupport::Deprecation の仕組みを利用することで、アプリケーション側での警告の抑制・集約・カスタマイズが可能になります。

機能を即座に削除するのではなく、警告を挟む移行期間を設けることで、既存の設定ファイルを持つアプリケーションへの影響を最小化しています。schema_search_pathschema_order が両方指定された場合は schema_search_path が優先される既存の || による評価順序も維持されています。

まとめ

この変更は機能追加ではなく、命名の統一に向けた整理です。database.yml などで schema_order を使用しているプロジェクトは、Rails 8.3の削除前に schema_search_path へのキーの置き換えを行うことで、将来の破壊的変更を回避できます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
89e1c2a4

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→セクション群(各論)→まとめ(結論)の3部構成が明確に適用されており、非常に分かりやすい構成です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(```言語:ファイルパス)とPR番号のリンク記法が正しく使用されています。

対象読者への適合性 ✓ PASS

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

専門用語が適切に使用されており、Railsエンジニアという対象読者に適した技術レベルで記述されています。

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

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

各セクションが総論→各論の構成になっており、各段落もトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られています。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiffの内容(追加コード、ファイルパス)と正確に一致しています。テストコードに関する説明もDiffと整合性が取れています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`schema_order`, `schema_search_path`, `ActiveRecord.deprecator` などの技術用語が正確に使用されています。

説明の技術的正確性 ✓ PASS

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

非推奨化の仕組み、フォールバックの動作、既存ロジックへの影響など、技術的な説明はすべて正確かつ論理的です。

事実の突合 ⚠ WARNING

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

「設計判断」セクションで述べられている`ActiveRecord.deprecator`の利点は、PR情報には記載がなく、Railsの一般的な知識に基づいています。ハルシネーションではありませんが、PRから直接裏付けられる事実ではありません。

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

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

PR番号(#57080)とバージョン番号(Rails 8.3)がPR情報と正確に一致しています。

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

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

記事のタイトルは、PRのタイトル「Deprecate `schema_order` option in PostgreSQL database configurations」の内容を正確に反映しています。

外部知識の正確性 ⚠ WARNING

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

「設計判断」セクションにおける `ActiveSupport::Deprecation` の仕組みに関する説明は、PRに記載のない外部知識(フレームワークの一般的機能)です。重大な捏造ではありませんが、PRの範囲を超えています。

時間表現の正確性 ✓ PASS

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

「Rails 8.3での削除」という将来の事象について、PR情報(CHANGELOG、警告メッセージ)と一致した正確な時間表現が用いられています。