LoginSignup
1
1

More than 5 years have passed since last update.

requireは実行ディレクトリからの相対パス

Last updated at Posted at 2019-05-09

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()
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1