Twitterをよく見ると、ツイートした時間の表示は○○前とか約○○時間前みたいなかなりアバウトな時間表示になっています。Ruby on Railsではago_ago_in_wordsメソッドを使うことで簡単に実装することができます。ここではその使い方について。

ヘルパーに追加

Viewでこの関数を使うときに、直接、Viewに書いてしまうのは、見た目とロジックの分離という視点で、MVCの考え方の上ではあまりよろしくないので、helperに書きましょう。全てのViewで使いたいときはapp/helper/application_helper.rbに書けばいいと思います。

これで、Viewの中で<%= datetime(post.created_at) %>みたいに読み込んでやると、今からどのくらい前かを表示することができます。

ただ、このままだと、”2days前”みたいな喧嘩売ってるとしか思えないような表記になるので、日本語化してやりましょう。

言語の設定

まず、このアプリケーションで使用する言語を選択します。ここでは日本語を選択しようと思うのでconfig/application.rbの中に以下のような文を書き込みましょう。たぶん、この部分は最初:deの状態でコメントアウトされていると思います。

次に、日本語の翻訳ファイルを作成します。翻訳用のファイルはconfig/localesの中に入っています。その中にja.ymlを作成して、

という風に書き込んでやりましょう。そうすれば、約1時間前みたいな感じの表記になると思います。

まとめ

基幹システムとかじゃない限り、正直、正確な時間が必要なときなんてめったにないですよね。更新頻度が高いサービスとかの場合だと、どのくらい前なのか、とかのほうがパッと把握できる有意義な情報です。そういう○○前という情報をパッと書けるのはありがたいです。