📕

Railsでモデル名・カラム名をUIに出力するときにi18nを使うべき理由

に公開

1. ユビキタス言語を揃えるためにi18nを使う

ドメイン駆動設計(DDD)でも強調されるように、チームが共通して理解できる「ユビキタス言語」を使うことは重要です。

config/locales/ja.yml
ja:
  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        email: メールアドレス
        created_at: 作成日
        user: ユーザー
        user_id: ユーザーID

これにより、User.model_name.humanUser.human_attribute_name(:email) を使ってUIに出す表記を統一できます。
特に user_id のように外部キーがある場合は、関連先モデル名(user)と外部キーそのもの(user_id)の両方を定義しておくと便利です


2. インスタンスメソッドの表記もi18nに定義する

単にカラム名やモデル名だけでなく、アプリケーションによっては「属性のように使うインスタンスメソッド」もあります。

氏名の例

class User < ApplicationRecord
  def full_name
    "#{last_name} #{first_name}"
  end
end

UIでこの full_name を表示する際、
「氏名」や「お名前」といった表記をコード内に直書きしてしまうと、別の画面で「名前」と出したいときに整合性が取れなくなります。

こうした場合も ja.yml に定義しておくと便利です。

config/locales/ja.yml
ja:
  activerecord:
    attributes:
      user:
        full_name: 氏名

生年月日と年齢の例

例えば、カラムとして birthday を持ち、メソッドで age を算出している場合があります。

class User < ApplicationRecord
  def age
    ((Time.zone.today - birthday) / 365).to_i
  end
end

この場合も同様に、birthdayage の両方を ja.yml に定義しておくとUIでの表記を揃えられます。

config/locales/ja.yml
ja:
  activerecord:
    attributes:
      user:
        birthday: 生年月日
        age: 年齢

これにより、フォームでは「生年月日」、一覧画面やプロフィール表示では「年齢」といった自然な表記を実現できます。


3. メリットのまとめ

  • UIの表記を統一できる
    → 「メールアドレス」と「Eメール」のような揺れを防ぐ。
  • コードと表示名の責務を分離できる
    → カラム定義やメソッド定義からUI表記を切り離せる。
  • ユビキタス言語を実現できる
    → 開発者と利用者が同じ言葉を共有できる。

まとめ

RailsアプリでUIに表示するモデル名・カラム名は、i18nを通すべきです。
さらに、インスタンスメソッドのように「属性っぽく使うもの」も、同様に ja.yml に定義しておくと、表記の揺れを防ぎ、ユビキタス言語を維持できます。

特に、user_id のような外部キーや、birthday カラムと age メソッドのように関連する属性は、両方をja.ymlに定義しておくことで用途に応じた柔軟なラベル表示が可能になります。

Discussion