概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事:Using strftime in a Rails view is probably a mistake - Andy Croll
- 原文公開日: 2019/07/14
- 著者:Andy Croll
Rails: ビューでstrftimeを使うとよくない場合がある(翻訳)
strftimeメソッドはさまざまな言語にありますが、いずれもC言語が由来です。書式を指定する引数の(ほとんど暗号のような)構文は長年変わっておらず、驚くほど多くの言語で一貫しています。
Rubyのstrftimeの書式はTimeクラスで網羅されています。
ただし、strftimeをビューで使うと動作が一貫せず混乱する可能性が高まります。
以下のように書くのではなく
ビューで日付や時刻の書式をstrftimeで設定する。
<%= @user.last_signed_in_at.strftime("%m-%e-%y %H:%M") %>以下のように書く
日付や時刻の書式はRailsの組み込みメソッドで設定する。
つまり私がやったようにDateやTimeで独自の:stampフォーマットを作成する。
config/initializers/time_formats.rb
Date::DATE_FORMATS[:stamp] = "%Y%m%d" # YYYYMMDDTime::DATE_FORMATS[:stamp] = "%Y%m%d%H%M%S" # YYYYMMDDHHMMSS続いてビューで以下のように書く。
<%= @user.last_signed_in_at.to_s(:stamp) %>そうする理由
引数がややこしくて間違えそうになるメソッドをビューに直書きすると、一貫性が落ちる原因になります。
日付や時刻の書式をアプリケーショングローバルに定義する主なメリットは、後から参加する開発者(未来の自分も含む)が助かることです。これによって、現在時刻の表現方法を事前に少数の方法にまとめてアプリケーション全体で一貫させることができます。今後参加する開発者も独自のフォーマットを構築できます。
表記が一貫することで、アプリケーションのユーザーもメリットを得られます。日付や時刻が常に同じ方法で表現されれば、ユーザーが日付や時刻を読み解く手間も削減されます。「11 Jun」ではなく常に「Jun 11」で統一するのは一見些細なことではありますが、手間をかける価値があります。
自分の欲しい日付フォーマットをずばり見つけられる便利なサイトもいろいろありますので、ここでいくつかご紹介します。
strftimeのフォーマット文字列をビジュアル表示で気持ちよく参照できます。アプリケーション全体で使える実際のデータ形式を生成できます。
実際の文字列で表現された日付や時刻をコピペすると、その文字列の書式を設定できるstrftime形式の日付文字列を得られます。
DateやTimeがデフォルトで提供するフォーマットは私には到底覚えられませんし、そもそもドキュメントがめったに見当たりません。そこで、RailsのDateやTimeフォーマットをスペルアウトする以下のサイトを自分でこしらえました。
そうしない理由があるとすれば
ビューでstrftimeを呼び出しても実際のパフォーマンスは低下しません。この記事の方法は一貫性と整理のためのものです。
訳注
以下の記事ではDATE_FORMATS[:default]は改変しない方がよいと指摘されています。なお上の記事は改変ではなく独自の:stampを追加しています。
また同記事では、I18nを使う方法も紹介されています。
localeに足すのもアリだな (localeまともに使ったことなし)https://t.co/yHp88Cfkia
— うなすけ (@yu_suke1994)December 18, 2018
おたより発掘
イトウサンモ、ニタヨウナキジカイテルヨー。イトウサンノオススメはl(I18n.l)メソッドダヨー。
【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう - Qiitahttps://t.co/app3dGb6zqhttps://t.co/IfFplzg7dk
— Junichi Ito (伊藤淳一) (@jnchito)November 22, 2019
関連記事
hachi8833
X:@hachi8833GitHub:@hachi8833コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。これまでにRuby on Rails チュートリアル第2版のコンテンツ監修、Railsガイドのコンテンツ作成を担当。かと思うと、正規表現の粋を尽くした日本語エラーチェックサービスenno.jpを運営。Claude Codeに夢中になりすぎないための方法を模索中。ブログ:note.com/hachi8833、Amazonウィッシュリスト:https://bit.ly/32aAmiI
hachi8833の書いた記事一覧へ
本記事の内容へのお問い合せはTwitterで@techrachoへMentionまたはDMにてご連絡頂くか、運営会社であるBPS株式会社のお問い合せフォームよりお問い合せ下さい。













