2019/5/14 追記
タイトルがガバガバなのでコメント欄でご指摘をいただきました。
ただただ感謝するとともに、そちらもご覧くださいませ〜。
環境
読んでる本:たのしいRuby 4版
Ruby : ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18]
requireにハマる
別ファイルを「require」で読み込みたかった。
ファイル構成とサンプルコードはこんな感じ。
tree
.
└── tanoshii_ruby
├── main.rb
└── sub.rb
main.rb
require './sub'
goodnight()
sub.rb
def goodnight
puts 'good night, world'
end
この状態で実行すると、
termial
$ ruby tanoshii_ruby/main.rb
Traceback (most recent call last):
2: from tanoshii_ruby/main.rb:1:in `<main>'
1: from
(中略)
`require': cannot load such file -- ./sub (LoadError)
あるぇ??
「実行ディレクトリ + requireに指定された相対パス」が有効
もしや…と思いつつ、main.rbのディレクトリに移動してから再実行すると成功。
terminal
$ cd tanoshii_ruby/
$ ruby chapter-03.rb
goodnight, world
ということで、requireは「実行ディレクトリ + requireに指定された相対パス」で評価してるみたい。
実行するときにハマらないよう気をつけよう。
おまけ:ファイルからの相対パスはrequire_relative
ディレクトリ移動しなくても、requireをrequire_relativeにすることでファイルからの相対パスでイケる。
なんにも考えずに書きたければこっちの方が無難かな。
main.rb
# require './sub' # => LoadError
require_relative './sub' # => OK!
goodnight()