✌️
カスタムバリデーション名にはmust_かvalidate_をつけよう
先に結論
- カスタムバリデーションメソッド名には
must_
かvalidate_
をつけよう- メソッド名だけでバリデーション用メソッドであることが明確に分かる
- 文型を定めることで命名を考えるコストが下がる
-
must_
かvalidate_
かはコード規約でどちらかに統一するのがベストそう - 下記はRails Style Guideの命名例
invoice.rb
# ...
# also good - explicit prefix
validate :validate_birthday_in_past
validate :validate_sufficient_quantity
validate :must_have_owner_with_no_other_items
validate :must_have_shipping_units
# bad
validate :birthday_in_past
validate :owner_has_no_other_items
must_
などをつけない場合の問題点
invoice.rb
class Invoice < ApplicationRecord
def expiration_date_cannot_be_in_the_past
# something
end
def active_customer
# something
end
end
- bool値を返すメソッドなのか、バリデーションなのかメソッド名から判断できない
- → 読みにくい
- 上記例の
expiration_date_cannot_be_in_the_past
とactive_customer
はどちらもカスタムバリデーションメソッドであるにも関わらず、命名に共通項がない- → 裁量が大きいので、命名を考えるコストが高い
- → 個人の裁量に任され、カオスになりがち
must_
かvalidate_
か
must_
- メリット
- 短くて読みやすい
- デメリット
- 自然な英文としては S + must + V のため、prefixにならないことがある
e.g.birthday_must_be_in_past
- ↑ その場合は
must_have_カラム名_状態
にするといった規約を設定することでprefix化が可能そうではあるが、やや冗長?
e.g.must_have_birthday_in_past
- 自然な英文としては S + must + V のため、prefixにならないことがある
validate_
- メリット
- バリデーションであることが明らか
-
validate_カラム名_状態
という記法が直感的
- デメリット
-
validate :validate_something
とモデルに記述することになるため、validateがダブる - mustより文字数が多い
-
所感
- bool値メソッドとバリデーションメソッドを規約的に差別化したいと思い、調べたらRails Style Guideにちゃんと載っていた
-
must_
かvalidate_
かは最終的には好みだと思われる
Discussion