Rubyで日付クラス(date)を使いこなす
Rubyでは日付を扱うためのクラスとしてDateクラスが用意されています。Dateクラスを使いこなせば、日付に関わる各種処理を自由に行うことが出来ます。
今回は、Dateクラスの使い方を実際のコードと共に解説していきます。
Dateクラス(日付クラス)の基本
単なる数値や文字列とは異なり、日付の管理は単純なようでいて難しく、考慮すべき事項が多く存在します。うるう年や、ひと月ごとの日数、曜日などの管理は、単なる数字のみで自分で正確に算出するとなると、多くの工数がかかってしまうものです。
この【日付】という概念をプログラミング上で簡単かつ正確に扱えるよう用意されているのが、【Date】クラスです。
プログラミング言語全般におけるDateクラス
【Date】クラスは大半のプログラミング言語に用意されています。【日付】という概念はプログラミングでものづくりを行う際にも度々登場する概念であるため、【Date】クラスはどういったプログラミング言語であっても、欠かせない存在なのです。
プログラマの開発の現場においても、日付に関わる実装は頻繁に求められるため、【Date】クラスに習熟することは活躍できるプログラマ・エンジニアになるための第一歩と言えるでしょう。
RubyにおけるDateクラス
言語によって異なりますが、多くのプログラミング言語のDateクラスは【日時】と【時間】の両方を扱うことが出来ようになっています。
しかし、Python等の一部のプログラミング言語においては、Dateの他に【Time】クラスが用意されており、時刻に関する値の取得は単なるDateクラスからは行うことが出来ないようにされていることもあります。
Rubyの言語仕様は、これについて【後者(DateクラスとTimeクラスに分けられている)】を採用しています。DateクラスとTimeクラスが存在しており、Dateは日付を、Timeは時間を管理するクラスになっています。
また、DateクラスとTimeクラスを合わせて【日付と時刻の双方を扱う】ことができる【Datetime】というクラスも用意されています。
Dateを用いてRubyで現在の日付を取得する
ここからRubyのDateクラスを用いて実際に現在の日付を取得する方法について解説していきます。
Dateクラスを使う前準備(require)
Dateクラスを使う前に、Dateクラス自身をRubyのコード上に引っ張ってくる必要があります。この【必要なものを外からとってくる】ために使われるのが【require】メソッドです。
ここで言う【外】とはつまり【外部ファイル】を意味します。外部ファイルを参照して、そこで定義されているクラスを取得する場合に、【require】はもっとも基礎的となる構文のひとつです。
requireを用いた外部ファイルの取得は次のように書きます。
require “date”
これだけでプログラムは【外部ファイルdate】を取り込むことが出来ます。
上記コードで取得した”date”は【日付に関わるライブラリ】であり、以後のDateクラスの各種解説においては、ここで取得したdateライブラリのDateクラスを利用した日付の取得方法を解説していきます。
Date.todayやDate.parse で今日のDateクラスのオブジェクトを取得する
Dateクラスのインスタンス(オブジェクト)を取得したいとき、Rubyにはいくつかの方法が用意されています。代表的なDateオブジェクト取得方法は【todayメソッド】を使うことです。
todayメソッドでDateオブジェクトを取得する場合、次のようなコードを書きます。
require “date”
today = Date.today
todayメソッドで作成したDateオブジェクトを変数todayに代入しています。
todayメソッドは自動的に【今日の日付】を算出した上でDateオブジェクトを作成しますが、一方でparseメソッドは違います。
parseメソッドもDateオブジェクトを作成しますが、こちらは【引数の文字列をDateオブジェクトに変換して作成する】というものです。
コードとしては以下のように使われます。
require “date”
today_str = “2019-02-10”
today = Date.parse(today_str) # 2019年2月10日のDateオブジェクトが作成される
parseメソッドの引数に指定した文字列の値を解析して、その日付のDateオブジェクトを作成しています。
他にはnewメソッドを使用したこのような方法も存在します。
require “date”
today = Date.new(2019, 2, 10) # 2019年2月10日のDateオブジェクトが作成される
newメソッドは主に【クラスのインスタンスを作成する】ために使われるものであり、日付クラスに限らず様々なクラスのインスタンスを作成することができます。
引数に指定した値をもとにDateオブジェクトを作成します。
parseやnewメソッドなどのような【引数に応じて日付のDateオブジェクトを作成する】メソッドは様々な場面で頻繁に使用されます。
これらを覚えることで、日付オブジェクトの作成を自由に行うことが出来るようになりますので、積極的に使用し、技術を自らのものにしていきましょう。
また、ここで紹介したもの以外にも、Rubyのフレームワーク【Ruby On Rails】には、日付の操作に関わる便利なメソッドがRails独自のものとしていくらか用意されています。
これらRails独自の日付操作メソッドは、Ruby本来の日付操作メソッドと比較して、より可読性や安全性の高いものが用意されている傾向にあるため、今後学習を進めた際にはRails独自の日付操作メソッドについても触れてみることをおすすめします。
Dateオブジェクトから年や月などを取得する
最後に、作成したDateオブジェクトから年や月を取得するコードを紹介します。
require “date”
today = Date.today
today.year # 作成したDateオブジェクトから年を取得
today.mon # 作成したDateオブジェクトから月を取得
today.mday # 作成したDateオブジェクトから日を取得
today.wday # 作成したDateオブジェクトから曜日を数字として取得
上記のように、年や月、日や曜日を取得するメソッドがRubyのDateクラスには様々用意されています。値の取得にあたっては、それら用意されているメソッドを実行するのみで取得可能です。
この他にも【1月1日からの通算日を整数で取得する】という仕様の【yday】メソッドなど、様々なメソッドが用意されていますので、興味のある方はRubyの公式ドキュメントなどに目を通してみることをおすすめします。
まとめ
Rubyにおける日付クラスは、requireメソッドにより外部ファイルで定義されたDateクラスを取得することではじめて使えるようになります。
DateクラスにはDateオブジェクトを作成する様々なメソッドが用意されており、それらを使いこなすことで複雑な日付に関わる操作を誤ることなく簡単に行うことが出来ます。
プログラミングで何を作るにせよ、日付という概念は極めて頻繁に登場する概念です。なのでDateクラスを用いた各種日付操作にはしっかりと目を通し、実際に手を動かしてコードを書いてみることをおすすめします。
この記事のキーワードに関する勉強会・イベントを探す
TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。興味のある方はぜひご参加ください。