【一人 Ruby Advent Calendar 2017】Ruby で外部ファイルを読み込むメソッドいろいろ【23日目】
一人 Ruby Advent Calendar 2017 23日目の記事になります。
今回は require
などの外部ファイルを読み込むメソッドを簡単にまとめてみます。
Kernel.#require
引数の Ruby のライブラリを読み込みます。
ここでいう Ruby のライブラリとは、
などのファイルを指します。
# Ruby のスクリプロファイルを読み込む require "hoge.rb" # 動的ライブラリを読み込む require "foo.o"
また、拡張子を省略して記述することも出来ます(その場合は *.rb
を優先して両方のファイルを検索します。
# hoge.rb を優先しつつ hoge.o などを読み込む require "hoge"
同じファイルは複数回読み込みません。
ファイルが絶対パスの場合はそのファイルを、相対パスの場合は組み込み変数 $:
から検索し、最初に見つかったファイルを読み込みます。
また、『require
してるファイルのカレントディレクトリ』は検索の対象にならないので『require
しているファイルからの相対パス』で読み込みたい場合は注意してください。
# こんな感じで require しているファイルからの相対パスでファイルは読み込めない require "../hoge/foo"
Kernel.#require_relative
『現在のファイルからの相対パス』で require
します。
以下のような挙動とほぼ同じです。
require File.expand_path({ファイル名}, File.dirname(__FILE__))
『require
しているファイルからの相対パス』のファイルを読み込みたい場合は require
ではなくて require_relative
を使用してください。
Kernel.#load
require
と違い再ロード可能です。
相対パスの場合は『カレントディレクトリ』も含めて検索します。
また、require
は拡張子を省略した場合は自動的に *.rb
などを補完しますが、load
は『拡張子を補完しない』ので拡張子を記述する必要が有ります。
Kernel.#autoload
指定した定数の名前を最初に参照した時に自動で require
を行います。
# この時点ではまだ "hoge" は読み込まれない autoload(:Hoge, "hoge") # 最初に Hoge を参照した時に require("hoge") が実行される p Hoge
まとめ
メソッド名 | 検索対象 | 拡張子 | 再ロード |
---|---|---|---|
require |
$: のパス |
省略化 | されない |
require_relative |
現在のファイルからの相対パス | 省略化 | されない |
require |
$: とカレントディレクトリ |
省略不可 | される |
基本的に『ライブラリを読み込む際は require
』を使い、『相対パスで読み込みたい場合は `require_relative』を使う、みたいな感じで使い分けるとよいと思います。