たくろぐ!

世界一のチラ裏

requireのload_pathについて調べてみた

require './lib/rgb'

なぜカレントディレクトリをさすのに'./'なのか。

Ruby1.8系くらいまではデフォルトでカレントディレクトリをrequireできたらしい。

今は$LOAD_PATH以外のディレクトリ以外を指定するときはrequireメソッドの引数にパスをつけてあげる必要があるらしい。

なぜカレントディレクトリは'./'なのか(2回目)。

rubygemsのようなライブラリは$LOAD_PATHに含まれている

早速$LOAD_PATH変数を出力してみた。
Ubuntuecho $LOAD_PATHしたら何も表示されなかった。
なぜ?

vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ mkdir tmp
vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ touch tmp/require_path.rb
vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ vi tmp/require_path.rb 
vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ cat tmp/require_path.rb 
p $LOAD_PATH
p $: # $LOAD_PATHと同じ意味
vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ ruby tmp/require_path.rb 
["/home/vagrant/.rbenv/rbenv.d/exec/gem-rehash", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0/x86_64-linux", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0/x86_64-linux", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/2.5.0/x86_64-linux"]
["/home/vagrant/.rbenv/rbenv.d/exec/gem-rehash", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0/x86_64-linux", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/site_ruby", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0/x86_64-linux", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/2.5.0", "/home/vagrant/.rbenv/versions/2.5.0/lib/ruby/2.5.0/x86_64-linux"]


vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.7
  - RUBY VERSION: 2.5.0 (2017-12-25 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /home/vagrant/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0
  - USER INSTALLATION DIRECTORY: /home/vagrant/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /home/vagrant/.rbenv/versions/2.5.0/bin/ruby
  - EXECUTABLE DIRECTORY: /home/vagrant/.rbenv/versions/2.5.0/bin
  - SPEC CACHE DIRECTORY: /home/vagrant/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /home/vagrant/.rbenv/versions/2.5.0/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /home/vagrant/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0
     - /home/vagrant/.gem/ruby/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "install" => "--no-ri --no-rdoc"
     - "update" => "--no-ri --no-rdoc"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/vagrant/.rbenv/versions/2.5.0/bin
     - /home/vagrant/.rbenv/libexec
     - /home/vagrant/.rbenv/plugins/ruby-build/bin
     - /home/vagrant/bin
     - /home/vagrant/.local/bin
     - /home/vagrant/.pyenv/shims
     - /home/vagrant/.pyenv/bin
     - /home/vagrant/.anyenv/envs/pyenv/shims
     - /home/vagrant/.anyenv/envs/pyenv/bin
     - /home/vagrant/.anyenv/bin
     - /home/vagrant/.rbenv/shims
     - /home/vagrant/.rbenv/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
     - /usr/games
     - /usr/local/games
     - /snap/bin

'./'のほかの書き方

require './'でカレントディレクトリをロードすることができる。
$:.unshift './lib'でもいいらしい。
実際にちゃんと読み込んでくれていた。

うーん、謎。

Minitestまとめ

errorsの意味

そもそもテストできずにエラーが起こっている。

vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ rb test/rgb_test.rb 
Run options: --seed 53991

# Running:

E

Finished in 0.001330s, 751.8989 runs/s, 0.0000 assertions/s.

  1) Error:
RgbTest#test_to_hex:
NoMethodError: undefined method `to_hex' for #<RgbTest:0x0000561027d4d950>
    test/rgb_test.rb:11:in `test_to_hex'

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips

failureの意味

テストが失敗している。

vagrant@ubuntu-xenial:~/project/cherry_ruby/ruby-book$ rb test/rgb_test.rb 
Run options: --seed 19872

# Running:

F

Finished in 0.002864s, 349.1211 runs/s, 698.2421 assertions/s.

  1) Failure:
RgbTest#test_to_hex [test/rgb_test.rb:12]:
--- expected
+++ actual
@@ -1,2 +1,2 @@
 # encoding: UTF-8
-"#ffffff"
+"#000000"


1 runs, 2 assertions, 1 failures, 0 errors, 0 skips