Ruby on Railsで今日の日付を表示する方法【3つの基本方針】

2019年1月7日月曜日

プログラミング

Ruby on Railsでの日付表示

こんにちは、財前航介です。

今日は、Ruby on RailsのWebアプリケーション上で、今日の日付を表示する方法を見ていきましょう。

この記事では、以下の3つの方法で日付を表示する方法について見ていきます。

  • ビューのテンプレートに直接埋め込む

  • コントローラーで取得し、インスタンス変数に格納

  • JavaScript側で取得

Ruby on Rails初心者の方にもRuby on Railsの基本が理解できるように、例を交えてご説明していきます。

それでは一つずつ、見ていきましょう。


Ruby on Railsで今日の日付を表示する方法【3つの基本方針】

Ruby on Railsで日付を表示する方法

例を元に、Ruby on Railsで日付を表示するための、3通りの方法を見ていきましょう。
今回の例では、con1コントローラーact1アクションが呼び出された時に日付を表示するような例を見ていきます。


ビューのテンプレートに埋め込む


ビュー側でRubyコードをテンプレートに埋め込み、直接表示してしまう方法です。

たとえば、以下のようなビューのファイルを作成します。


exampleAPP/app/views/con1/act1.html.erb
<%= Date.current.strftime('%Y/%m/%d') %>
<br>
<%= Date.current.strftime('%Y年 %m月 %d日') %>

Ruby on Railsのビューの中において、HTMLに交じって<%=   %>という記載をすることによって、Rubyの値を文字列に変換して、HTMLとして取り出すことができます。

ここではDate.current.strftime()というRubyのメソッドが日付を取得して、指定したフォーマットで表示する役割を果たしています。

ブラウザからIPアドレスを入力して、表示した結果は以下のようになります。

Ruby on Railsでの日付表示(ビュー)

ちゃんと指定したフォーマットで、今日の日付が表示されていることが分かります。

Date.current.strftime()メソッドを利用すれば、%Yで年、%mで月、%dで日付を取り出すことができますから、例のように、好きなフォーマットで日付を表示することができます。

一般的には、上記のようなビューの中にRubyの処理を書き込むのは、あまり多用するべきではありませんね。

Ruby on RailsはMVCの機能を明確に分けてWebサービスを構築するためのフレームワークですから、ビューにではできるだけ処理を書き込まず、見た目のデザインのみに徹するべきです。

MVCアーキテクチャーにおけるビューやコントローラーの関係について詳しく知りたい方は、以下の過去記事をご覧ください:
コントローラーとビューの関係【Ruby on Rails超入門】>>


コントローラーで取得し、インスタンス変数に格納


日付取得程度の処理であれば、上記のようにビューに直接Rubyのソースコードを書き込んでも良いのですが、一般的には、Rubyの処理はコントローラー側にまとめて書いた方が良いでしょう。

以下のようにコントローラーのクラスのインスタンス変数に値を格納すれば、ビュー側でも簡単に値を使うことができます。

exampleAPP/app/controllers/con1_controller.rb
#con1コントローラー
class Con1Controller < ApplicationController

  #act1アクション
  def act1

    @date1 = Date.current.strftime('%Y/%m/%d')
    @date2 = Date.current.strftime('%Y年 %m月 %d日')

  end
end

上記のコントローラーでは、アットマーク(@)が付いている変数に、指定したフォーマとで取得した日付を格納していますね。

このアットマーク(@)付きの変数はインスタンス変数と呼ばれ、ビュー側からも値を参照できる変数です。
Ruby on Railsにおけるアットマーク(@)の意味について詳しく知りたい方は、以下の過去記事も見てみてください:
アットマーク(@)の意味は?【Ruby on Rails超入門】>>

上記のコントローラーで取得した日付を、ビュー側で表示するためには、以下のようなビューを作成します。


exampleAPP/app/views/con1/act1.html.erb
<%= @date1 %><br>
<%= @date2 %>

上記のコントローラーとビューの実行結果をブラウザで表示すると以下のようになります。

Ruby on Railsでの日付表示(コントローラー)

先ほどと全く同じ結果になっていますね。

しかし、やはりRuby側の処理はコントローラーに書いておいた方がビューがスッキリしますので、たかだか日付の取得といえど、コントローラー側で取得したものをビューで表示した方が良いでしょう。


JavaScript側で取得


この方法はRuby on Railsの機能ではないですが、作成されているWebアプリケーションの設計思想によっては、JavaScript側で処理を行う場合もあるでしょう。

特にSPA(シングルページアプリケーション)に近いようなアプリケーションにおけるサーバー側の技術としてRuby on Railsを採用している場合、JavaScript側に大部分の処理を切り出した方が、スッキリとしたアプリケーションになる場合もあるでしょう。

ビューに直接JavaScriptを書き込むのであれば、以下のようになります。


exampleAPP/app/views/con1/act1.html.erb
<p id="date1"></p>
<p id="date2"></p>

<script>
//Dateオブジェクトの取得
var today = new Date();

//年、月、日付をそれぞれ取得
var year = today.getFullYear();
var month = today.getMonth() + 1;
var date = today.getDate();

//date1の設定
document.getElementById("date1").innerHTML = year + "/" + month + "/" + date;

//date2の設定
document.getElementById("date2").innerHTML = year + "年 " + month + "月 " + date + "日 ";
</script>

上記は、JavaScriptフレームワークjQueryも使っていない、素のJavaScriptでの記載例ですので、お使いのJavaScriptの環境によって、もう少しシンプルに書けるかもしれませんね。

上記のビューの実行結果をブラウザーから見ると、以下のようになります。

Ruby on Railsでの日付表示(JavaScript)

しっかりと日付が取得され、表示されていますね。

しかしJavaScriptが動作するのは、ユーザーが使っているWebブラウザー上です。

つまりこの場合、表示される日付はブラウザ側の環境の日付を参照することになりますから、ユーザー端末側の日付がズレていると、そのままズレた日付が表示されてしまいます。

また、時差がある国外などからWebサイトを見た人は、その人が用いている環境の日付を見ることになります。

Webサーバー側の日付とクライアント側の日付、どちらをWebページに表示させたいかはケースバイケースでしょうから、適した実現方法を採用すると良いでしょう。


まとめ:
Ruby on Railsで今日の日付を表示しよう!

Ruby on Railsで日付を表示しよう!

如何でしたでしょうか?

Ruby on Railsで日付を表示する方法に関して、覚え頂けたでしょうか。

Webサービスに日付を表示する場面は、結構多いのではないかと思います。

また、単純に日付の文字列を表示するだけでなく、カレンダー上で色を変えて表示するような用途で使う方もいらっしゃるかも知れません。

それでも、プログラム上で日付さえ取得できてしまえば、あとは単純な、プログラム上での操作ですね。


Ruby on Railsでは、日付の表示だけでなく、Webサービスに必要な様々な機能を簡単に実現することができます。

Ruby on Railsを用いるメリットやデメリットについて詳しく知りたい方は、以下の記事もご参照ください:
Ruby on Railsのメリット・デメリット【初心者にもわかりやすく解説】>>