Date.today と Date.current の違いに注意!
Ruby と Railsでは タイムゾーンの管理が異なります。Railsで開発を行うなら、Date.todayは使わない!
Date.today
Rubyのメソッドで、ENV もしくはシステムのタイムゾーンを参照する。
ENV['TZ']
Date.current
Railsのメソッドで、Rails の configを参照する。Date.yesterday や Date.tomorrow も Rails のメソッドです。
config.time_zone = 'Asia/Tokyo'
どうする?
日付の管理を二重に行うのは、メンテナンス性も損なわれるし、意図した結果にならないことがあります。Active Support コア拡張機能にもあるように、日付の比較を行う場合には特に注意が必要です。
Railsを利用して開発を行うなら、Date.currentを利用し、Date.todayは使わないのが良い。
間違って利用しないように RuboCop で Date.today を違反扱いにすると良いかもしれません。
# lib/custom_cops/no_more_date_today.rb
return unless defined?(::RuboCop)
module CustomCops
class NoMoreDateToday < ::RuboCop::Cop::Base
MSG = "Do not use `Date.today`".freeze
def on_send(node)
if node.source.include?("Date.today") && node.receiver.const_name == "Date" && node.method_name == "today"
add_offense(node)
end
end
end
end
# .rubocop.yml
require:
- ./lib/custom_cops/no_more_date_today.rb
CustomCops/NoMoreDateToday:
Enabled: true