`number_to_delimited` のデフォルト動作を高速パスに統一

rails/rails

NumberToDelimitedConverterDEFAULT_DELIMITER_REGEX を削除し、オプション未指定時も自動的に高速パスが使われるようになりました。これにより、delimiter_pattern: nil を明示しなくてもパフォーマンス最適化の恩恵を受けられます。

背景

コミット 2d485ae により、NumberToDelimitedConverter のパフォーマンス改善が行われました。この変更では、delimiter_patternnil を渡した場合に正規表現を使わない高速なコードパスを実行する仕組みが導入されています。

しかし、delimiter_pattern のデフォルト値として DEFAULT_DELIMITER_REGEX/(\d)(?=(\d\d\d)+(?!\d))/)が定義されたままだったため、number_to_delimited(10000) のようにオプションを省略した通常の呼び出しでは、nil ではなくこの正規表現が渡される状態が続いていました。高速パスを利用するには number_to_delimited(10000, delimiter_pattern: nil) と明示する必要があり、実質的にほとんどのケースで最適化が機能しない状態でした。

本PRはこの挙動を「意図しないもの」と判断し、デフォルトで高速パスが使われるよう修正しています。

技術的な変更

NumberToDelimitedConverter から DEFAULT_DELIMITER_REGEX 定数を削除し、delimiter_pattern メソッドの戻り値をオプションの直接参照に変更しました。

変更前:

DEFAULT_DELIMITER_REGEX = /(\d)(?=(\d\d\d)+(?!\d))/

def delimiter_pattern
  options.fetch(:delimiter_pattern, DEFAULT_DELIMITER_REGEX)
end

変更後:

def delimiter_pattern
  options[:delimiter_pattern]
end

options.fetch(:delimiter_pattern, DEFAULT_DELIMITER_REGEX) は、キーが存在しない場合に正規表現オブジェクトを返すため、高速パスの条件(nil チェック)を満たしませんでした。options[:delimiter_pattern] に変更することで、:delimiter_pattern キーが指定されていない場合は nil が返るようになり、高速パスが確実に使われます。なお、delimiter_pattern: nil を明示的に渡した場合も同様に nil が返るため、従来の明示的な指定との動作に差はありません。カスタムパターンを使いたい場合は引き続き delimiter_pattern: オプションに正規表現を渡せば機能するため、後方互換性も維持されています。

まとめ

この変更は、パフォーマンス改善として導入されたコードパスが実際には大多数のケースで機能していなかったという問題を2行の差分で修正したものです。options.fetch によるデフォルト値の提供から options[] による単純な参照へのシフトにより、明示的なオプション指定なしに高速パスが適用され、元のコミットが意図した最適化が設計全体に一貫して反映されます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
aec98bad

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→背景・技術的な変更(各論)→まとめ(結論)の3部構成が明確に守られています。各セクションの役割が明確で、非常に読みやすい構成です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト、コミットIDの短縮リンク、PR番号のリンクなど、全てのカスタムMarkdown構文が正しく使用されています。

対象読者への適合性 ✓ PASS

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

Ruby on Railsの内部実装に関するトピックであり、専門知識を持つエンジニアを対象とした適切な技術レベルで記述されています。

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

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

各セクション、各パラグラフの構成が模範的です。トピックセンテンスが明確で、1段落1トピックの原則が守られているため、要点を素早く把握できます。

Diff内容との照合 ✓ PASS

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

提示されたDiffの内容を正確に反映しています。変更前後のコード引用は適切であり、ファイルパスも正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「高速パス」「delimiter_pattern」「options.fetch」などの技術用語が、文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

「options.fetch」と「options[]」の挙動の違いと、それが高速パスの選択にどう影響するかの説明が技術的に正確かつ論理的です。

事実の突合 ✓ PASS

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

記事内のすべての主張(以前の最適化、意図しない挙動、具体的な修正内容)は、提供されたPRのDescriptionおよびDiff内容によって完全に裏付けられています。ハルシネーションは見られません。

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

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

PR番号(#57069)とコミットID(2d485ae)が正確に記載されています。

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

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

記事のタイトルはPRのタイトル「Make fast behavior the default for NumberToDelimitedConverter」の内容を的確に要約しており、主題のズレはありません。

外部知識の正確性 ✓ PASS

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

PR情報に記載のない、バージョンサポート状況やリリース日程などの外部知識は含まれておらず、事実に基づいた記述に徹しています。

時間表現の正確性 ✓ PASS

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

過去の変更(「改善が行われました」)と現在の問題(「状態が続いていました」)に関する時間的な前後関係が、PR情報と一致しており正確です。