外部プログラムの取り込み
requireメソッド
Rubyのソースコードが大きくなった時に複数のファイルに分割できる。
別のファイルにかかれたプログラムをソース中に取り込むときにrequireメソッドを使う。
自分で作った便利なクラスをmylibrary.rbとかに保存しておけばそれを取り込んで使える。
require “mylibrary” # ファイルの拡張子は省略できる。
Rubyには標準ライブラリというライブラリが付属している。
その機能を使う時もrequireメソッドを使う。
open-uriライブラリを使うとopenメソッドが拡張され、ウェブサイトの内容をファイルを読み込むように取得できる。
require "open-uri"
open("http://www.oiax.jp") do |f|
f.each_line { |line| puts line }
end
requireに指定するファイルは現存のフォルダかRubyがファイルを探しに行くフォルダにないとダメ。
Rubyが検索するフォルダの場所は「puts $:」のようにグローバル変数$:を見ると良い。
「puts $:」でパスの確認できるってことやで。
Active Supportの日付と時刻
requireにメソッドを使うとGemパッケージのプログラムを取り込める。
Railsを構成するパッケージの1つActive Supportの機能を取り込んで見る場合は下記。
require "active_support/all"
Active Supportは数値クラスを拡張して時刻を扱えるようにしている。
2.days.agoの書き方で二日前の時刻を取り出せる。
例:1年前、10日前、1時間半後の時刻を取り出す
require "active_support/all"
puts 1.years.ago
puts 10.days.ago
puts (1.5).hours.from_now
また、Active SupportはTimeクラスも拡張している。
beginning_of_◯◯メソッドでその時刻の月の初め
next_◯◯メソッドやprev_◯◯メソッドで次の月や前の週を取り出せる。
例:今週の始めの時刻と翌月の一日目を表示
require "active_support/all"
now = Time.now
puts now.beginning_of_week
puts now.next_month.beginning_of_month
ちなみにRailsではActive Supportは自動的に読み込まれるので
requireを書かなくても便利なメソッドを利用できる。
前の日、次の日
yesterdayメソッドやtomorrowメソッドで前の日や次の日を取り出せる
puts Time.now.tomorrow.beginning_of_day # 明日の午前0時を取り出す
avanceメソッドに「days: 日数」を指定するとその日数だけ時刻を進めることができる。
「hours: 3」(三時間後)「days: -2」(2日前)のような指定もできる。
puts Time.now.beginning_of_day.advance(days: 3) # 3日後の午前0時を取り出す。
今日はここまでにしとくか。
本記事は下記本の勉強記事です。初学者にとても良い本です。