「プロを目指す人のためのRuby入門」の著者の伊藤です。本書をお読みいただき、どうもありがとうございます。
最初に本題と関係なところを書きますが、スクショを見ると./lid/rgb
となっていますね。
本書では./lib/rgb
と書いているので、この説明でもlib
で統一します。
(ちなみにlib
はlibrary=ライブラリの略です)
エラーの原因について
otnさんもすでに回答されているとおり、プログラムを実行する場合はカレントディレクトリを意識する必要があります。
つまり、どのディレクトリでruby
コマンドを実行するか、ということが大事です。
本書の説明通りにファイルを作成していくと、以下のようなディレクトリ構成になると思います。
.
├-- lib
│ └-- rgb.rb
└-- test
└-- rgb_test.rb
そして、例題の解答例を実行する場合は下記のディレクトリをカレントディレクトリとして実行する必要があります。
. ←このディレクトリで実行する!!
├-- lib
│ └-- rgb.rb
└-- test
└-- rgb_test.rb
カレントディレクトリを確認するコマンドはpwd
です。また、ls
コマンドを使うと、カレントディレクトリの配下にあるファイルやディレクトリを確認できます。
bash
1$ pwd
2/Users/jnito/dev/private/ruby-book-codes/ruby-book
3
4$ ls
5lib test
上の実行例のように、ls
を実行したときにlib
やtest
が表示されれば、カレントディレクトリが正しいです。
ですが、pome00000さんはおそらく、test
ディレクトリをカレントディレクトリにしてruby
コマンドを実行したんじゃないかと推測します。
.
├-- lib
│ └-- rgb.rb
└-- test ←ここがカレントディレクトリになっていたのでは?
└-- rgb_test.rb
その状態だと、pwd
やls
の実行結果が以下のようになります。
bash
1# "test"で終わっているので、カレントディレクトリがtestディレクトリになっている
2$ pwd
3/Users/jnito/dev/private/ruby-book-codes/ruby-book/test
4
5# "lib"や"test"がなく、テストコードのrgb_test.rbしか表示されない
6$ ls
7rgb_test.rb
また、カレントディレクトリが異なると、テストコードを実行するときのコマンドも微妙に変わってきます。
bash
1# OK: 正しいカレントディレクトリであれば、"test"ディレクトリの下にある"rgb_test.rb"を実行する
2$ ruby test/rgb_test.rb
3
4# NG: "test"ディレクトリがカレントディレクトリだと、"test/"なしで実行することになる
5$ ruby rgb_test.rb
本書で実行例として提示しているのもruby test/rgb_test.rb
です。
require './lib/rgb'
と書いた場合は、「カレントディレクトリの下のlib
ディレクトリの下のrgb.rb
ファイル」を読み込みに行きます。
そのため、カレントディレクトリがtest
ディレクトリになっていると、「test
ディレクトリの下のlib
ディレクトリの下のrgb.rb
ファイル」を探しに行くので、「そんなファイルはありません!」とエラーが発生します。
解決策1(本書を読み進める上では非推奨)
解決策のひとつはotnさんが書かれたように、require './lib/rgb'
の代わりにrequire_relative '../lib/rgb'
のように書くことです。
require_relative
を使うとカレントディレクトリに関係なく、「自分のファイルパスから見た相対パス」を読み込みます。
なので、require_relative '../lib/rgb'
と書いた場合は、「test/rgb_test.rb
のひとつ上のディレクトリに上がり、その下にあるlib
ディレクトリの下にあるrgb.rb
ファイル」を読み込むので、正しくファイルが読み込まれるはずです。
ただし、本書ではrequire_relative
を使っていません。そのため、require_relative
を多用すると、本書を読み進める上では別の予期せぬ問題を引き起こす可能性があります。
解決策2(筆者のお勧め)
筆者としては「できる限り本書と同じコードを書いてもらうのが、予期せぬトラブルを避ける最善の方法」だと考えているので、「正しいカレントディレクトリに移動してruby
コマンドを実行する」がお勧めの解決策になります。
つまり、カレントディレクトリがtest
ディレクトリになっているのであれば、cd ..
コマンドを実行して、ひとつ上のディレクトリに移動してください。それからテストコードを実行すればエラーなく実行できるはずです。
bash
1# カレントディレクトリが"test"ディレクトリになっている
2$ pwd
3/Users/jnito/dev/private/ruby-book-codes/ruby-book/test
4
5# ひとつ上のディレクトリへ移動
6$ cd ..
7
8# ここが正しいカレントディレクトリ
9$ pwd
10/Users/jnito/dev/private/ruby-book-codes/ruby-book
11
12# 念のため、"lib"ディレクトリや"test"ディレクトリが直下に存在することを確認
13$ ls
14lib test
15
16# テストコードを実行する
17$ ruby test/rgb_test.rb
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/06 02:49