IMG_1929
Development

Rubyで生まれた日から何日目なのかを計算してみよう

さて予告通り今回はRubyを使って今日は生まれてから何日目なのかを計算するプログラムを書いてみたいと思います。

ファイルを準備する

まず適当なフォルダを作りテキストエディタでcalc_days.rbという名称の空のテキストファイルを作成します。

スクリーンショット 2014-01-08 15.07.31

今回はデスクトップにdevというフォルダを作りファイルを作成しました。
Rubyでコードを書くファイルの拡張子は .rb にしましょう。

コードを書く

それではコードを書いていきましょう。
要件は

  1. 誕生日(西暦、月、日)を設定
  2. rubyコマンドで動作させると答えのテキストを表示する

これだけです。

誕生日を設定

まずRubyで時間を扱う際にはTimeというオブジェクトを使います。馴染みのない人にはオブジェクトってなんだ?という感じだと思いますがここでは深く考えずに流してしまいましょう。

たとえば僕の生年月日 1985年10月18日 をRubyのTimeオブジェクトを使って表すと以下のようになります。

Time.gm 1985, 10, 18

ただしくRubyとして動作するかを確認するために行頭に p を加えて以下のようにしてみましょう。

p Time.gm 1985, 10, 18

保存したらターミナルから ruby Desktop/dev/calc_days.rb と打ち込んでみます。すると以下のように文字が表示されました。

ruby Desktop/dev/calc_days.rb
1985-10-18 00:00:00 UTC

これで僕の誕生日を認識していることがわかったので、以下のようにして誕生日を何度でも使えるように “変数” という入れ物に収めておきます。

birth_day = Time.gm 1985, 10, 18

こうすることで誕生日を扱う度に Time.gm… と書かずに、birth_dayと書くだけでRubyが認識できる誕生日を作ったことになります。

試しに以下のようにしてみると何度も同じ誕生日を表示できると思います。

birth_day = Time.gm 1985, 10, 18
p birth_day
p birth_day
p birth_day
ruby Desktop/dev/calc_days.rb
1985-10-18 00:00:00 UTC
1985-10-18 00:00:00 UTC
1985-10-18 00:00:00 UTC

現在時刻との差を求める

現在時刻は Time.now と表します。
差を求める場合は算数の引き算をするだけです。

Time.now - birth_day

簡単ですね。ただし答えは引き算の様に右側に書くのではなく式の左側に返ってきます。

diff = Time.now - birth_day

diffはdifferentの略です。こうすることで今度は現在時刻との差をdiffという変数に収めることが出来ました。

diffの中身をおなじみの p を使って確認してみます。

diff = Time.now - birth_day
p diff
ruby Desktop/dev/calc_days.rb
890721908.4752661

なにやら桁数の多い数値が表示されましたね。
これは誕生日から現在までの秒数を表しています。なのでこれを1日分の秒数で割れば何日経っているのかがわかるというわけです。

一日の秒数は 60秒×60分×24時間 で求められるので以下のように表します。

one_day_seconds = 60 * 60 * 24

掛け算は * で行います。
ついでにone_day_secondsという変数に収めておいたのでdiffをこれで割ってみましょう。

days = diff / one_day_seconds

割り算は / で行います。
かなりゴールに近づいてきた感じです。p でdaysの中身を確認してみます。

days = diff / one_day_seconds
p days
ruby Desktop/dev/calc_days.rb
10309.286028564247

小数点以下が長い数値ですね。細かい部分は四捨五入して表示させてみましょう。
days.round と書くと小数点以下を四捨五入してくれます。

days = diff / one_day_seconds
p days.round
ruby Desktop/dev/calc_days.rb
10309

これだけだとちょっと寂しいので最後にメッセージを交えて表示させてみましょう。

days = diff / one_day_seconds
p "あなたが生まれてから#{ days.round }日が経ちました"

Rubyで文字を扱うには ” コーテーションで囲う必要があるのですが、文字列の中で #{ と } を使うと変数を埋め込めるという機能が有ります。
これを実行すると以下のようになります。

ruby Desktop/dev/calc_days.rb
"あなたが生まれてから10309日が経ちました"

いい感じですね。
以上でRubyで生まれた日から何日目なのかを計算するプログラムは完成です。
コード全体は以下のようになります。

birth_day = Time.gm 1985, 10, 18
diff = Time.now - birth_day
one_day_seconds = 60 * 60 * 24
days = diff / one_day_seconds
p "あなたが生まれてから#{ days.round }日が経ちました"

まとめ

プログラミングの未経験者にはこれだけでも少し重い作業かもしれませんが、わりと簡単に数行書くだけで面倒な計算を素早くやってくれることがお分かりいただけたかと思います。
次回以降もRubyを使って徐々に高度なものを作って見たいと思います。

標準