teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明の改善

2020/05/06 00:28

投稿

jnchito
jnchito

スコア357

answer CHANGED
@@ -80,14 +80,15 @@
80
80
  `require './lib/rgb'`と書いた場合は、「カレントディレクトリの下の`lib`ディレクトリの下の`rgb.rb`ファイル」を読み込みに行きます。
81
81
  そのため、カレントディレクトリが`test`ディレクトリになっていると、「`test`ディレクトリの下の`lib`ディレクトリの下の`rgb.rb`ファイル」を探しに行くので、「そんなファイルはありません!」とエラーが発生します。
82
82
 
83
- ## 解決策1(筆者としては非推奨)
83
+ ## 解決策1(本書を読み進める上では非推奨)
84
84
 
85
85
  解決策のひとつはotnさんが書かれたように、`require './lib/rgb'`の代わりに`require_relative '../lib/rgb'`のように書くことです。
86
86
  `require_relative`を使うとカレントディレクトリに関係なく、「自分のファイルパスから見た相対パス」を読み込みます。
87
87
  なので、`require_relative '../lib/rgb'`と書いた場合は、「`test/rgb_test.rb`のひとつ上のディレクトリに上がり、その下にある`lib`ディレクトリの下にある`rgb.rb`ファイル」を読み込むので、正しくファイルが読み込まれるはずです。
88
88
 
89
+ ただし、本書では`require_relative`を使っていません。そのため、`require_relative`を多用すると、本書を読み進める上では別の予期せぬ問題を引き起こす可能性があります。
90
+
89
91
  ## 解決策2(筆者のお勧め)
90
- ただし、本書では`require_relative`を使っていません。そのため、`require_relative`を多用すると、別の予期せぬ問題を引き起こす可能性があります。
91
92
  筆者としては「できる限り本書と同じコードを書いてもらうのが、予期せぬトラブルを避ける最善の方法」だと考えているので、「正しいカレントディレクトリに移動して`ruby`コマンドを実行する」がお勧めの解決策になります。
92
93
 
93
94
  つまり、カレントディレクトリが`test`ディレクトリになっているのであれば、`cd ..`コマンドを実行して、ひとつ上のディレクトリに移動してください。それからテストコードを実行すればエラーなく実行できるはずです。

1

コメント修正

2020/05/06 00:28

投稿

jnchito
jnchito

スコア357

answer CHANGED
@@ -66,10 +66,10 @@
66
66
  また、カレントディレクトリが異なると、テストコードを実行するときのコマンドも微妙に変わってきます。
67
67
 
68
68
  ```bash
69
- # 正しいカレントディレクトリであれば、"test"ディレクトリの下にある"rgb_test.rb"を実行する
69
+ # OK: 正しいカレントディレクトリであれば、"test"ディレクトリの下にある"rgb_test.rb"を実行する
70
70
  $ ruby test/rgb_test.rb
71
71
 
72
- # "test"ディレクトリがカレントディレクトリだと、"test/"なしで実行することになる
72
+ # NG: "test"ディレクトリがカレントディレクトリだと、"test/"なしで実行することになる
73
73
  $ ruby rgb_test.rb
74
74
  ```
75
75