2020年6月17日水曜日

Rubyのrequire_relative

Rubyのrequire_relativeは、どこからの相対パスなのか。

例えば、以下のようにスクリプトを配置している場合。

main.rb
sub0.rb
sub1/foo.rb
sub2/bar.rb
main.rbからsub0.rb, sub1/foo.rbをロードするには以下。まあ、これは直感的。
require_relative 'sub0'
require_relative 'sub1/foo'

では、main.rbからロードしているsub1/foo.rbからsub2/bar.rbをロードするにはどうするか。答えは以下。

require_relative '../sub2/bar'
大元のmain.rbがあるディレクトリからの相対パスではなく、直接require_relativeしているfoo.rbがあるsub1/からの相対パスとなる。直接起動したスクリプトがあるディレクトリを基点にするわけではない。ちょっと考えてみれば、ロード元スクリプトによって基点が変わるようでは、サブスクリプト間でロードしづらくてたまらないから、まあ正解な仕様だろう。

0 件のコメント:

コメントを投稿