Railsでモデル名・カラム名をUIに出力するときにi18nを使うべき理由
1. ユビキタス言語を揃えるためにi18nを使う
ドメイン駆動設計(DDD)でも強調されるように、チームが共通して理解できる「ユビキタス言語」を使うことは重要です。
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
email: メールアドレス
created_at: 作成日
user: ユーザー
user_id: ユーザーID
これにより、User.model_name.human や User.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 に定義しておくと便利です。
ja:
activerecord:
attributes:
user:
full_name: 氏名
生年月日と年齢の例
例えば、カラムとして birthday を持ち、メソッドで age を算出している場合があります。
class User < ApplicationRecord
def age
((Time.zone.today - birthday) / 365).to_i
end
end
この場合も同様に、birthday と age の両方を ja.yml に定義しておくとUIでの表記を揃えられます。
ja:
activerecord:
attributes:
user:
birthday: 生年月日
age: 年齢
これにより、フォームでは「生年月日」、一覧画面やプロフィール表示では「年齢」といった自然な表記を実現できます。
3. メリットのまとめ
-
UIの表記を統一できる
→ 「メールアドレス」と「Eメール」のような揺れを防ぐ。 -
コードと表示名の責務を分離できる
→ カラム定義やメソッド定義からUI表記を切り離せる。 -
ユビキタス言語を実現できる
→ 開発者と利用者が同じ言葉を共有できる。
まとめ
RailsアプリでUIに表示するモデル名・カラム名は、i18nを通すべきです。
さらに、インスタンスメソッドのように「属性っぽく使うもの」も、同様に ja.yml に定義しておくと、表記の揺れを防ぎ、ユビキタス言語を維持できます。
特に、user_id のような外部キーや、birthday カラムと age メソッドのように関連する属性は、両方をja.ymlに定義しておくことで用途に応じた柔軟なラベル表示が可能になります。
Discussion