Rails 8.0アップグレードの落とし穴 — rails-i18n v8.0.2の日本語金額表記バグ(SmartHR)
概要
SmartHRが大規模Railsアプリケーションを Rails 8.0 にアップグレードした際、rails-i18n v8.0.2 の日本語辞書定義にバグがあり、負の金額表記が「-100円」→「-円100」という誤表示になった問題とその対策を解説。2回のリバートを経て最終的に解決した実例報告。
詳細
- バグの内容: rails-i18n v8.0.2 に新しく追加された
ja.number.currency.format.negative_formatの定義で、数値と通貨記号の順番が逆になっているバグ - 影響:
number_to_currencyメソッドに負の値を渡すと「-円100」という誤表記になる。Rails 7系ではこの定義がなくデフォルト動作だったため問題が顕在化しなかった - 対処法:
config/locales/ja.ymlにja.number.currency.format.negative_format: '-%n%u'を追加してrails-i18nの定義を上書き。筆者はrails-i18n本体にPRを投げてマージ済み - 教訓: テストカバレッジが十分でも全ケースをカバーできない。依存gemのバージョンアップで辞書定義が変わる可能性がある
- 今後の検討: 成熟したプロダクトであればrails-i18nに頼らず自前でi18n辞書を管理するメリットが大きいとの見解
参照
- 出典: https://tech.smarthr.jp/entry/2026/06/05/104421
- はてなブックマーク数: 8