質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

3785閲覧

「プロを目指すためのRuby入門」No such file or directory 実行できない

moe-hou

総合スコア1

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/08/13 12:00

##実行するためのファイルはどのように特定するのか?
「プロを目指すためのRuby入門」という本を用いて学習をしています。現在4章の例題を解いているのですが、プログラムの実行ができなくなってしまいました。
どうすれば実行するためのファイル名が特定できるのでしょうか。

このプログラムのファイル名はrgb_test.rbです。
上記の本で示されている通り、以下のような階層構造になっています。
ruby-book/
|--lib/
| |--rgb.rb
|--test/
| |--rgb_test.rb
|

No such file or directory

require "minitest/autorun" require "./lib/rgb" class RgbTest < Minitest::RgbTest def test_to_hex assert_equal "#000000",to_hex(0,0,0) assert_equal "#ffffff",to_hex(255,255,255) end end ```上記のプログラムを「ruby rgb_test.rb」と実行すると Traceback (most recent call last): ruby: No such file or directory -- rgb_test.rb (LoadError)というエラーメッセージが表示されるようになってしまいました。 ### 試したこと いくつか思い当たるファイル名で実行しましたがいずれも実行できませんでした。 ### 補足情報(FW/ツールのバージョンなど) macでvscodeを用いています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

パスに空白が入っているのでおかしくなってますね。エラーは同じではないでしょう。
No such file or directory  まではおなじでしょうがその先が。

  1. ruby "/Users/maruyamahotaro/Desktop/My Ruby/ruby-book/test/rgb_test.rb" とすれば通るかな
  2. cd "/Users/maruyamahotaro/Desktop/My Ruby/ruby-book/test/rgb_test.rb" してから ruby ./test/rgb_test.rb

2の方を薦めます。このさきrgb.rbを読み込むという処理が入りますが、そのとき ./lib を探します。
ので、 ls した時に lib があるdirで実行しなければなりません。
「プロ」が書くとそんなヘマはしませんが。
誤解を招く舌足らず、追記します
プロが書くときは起動dirがどこでも問題が出ないように書きます。そうなるようになってください。
本でそういう書き方になっていないのは、そのように書いてしまうとこの単元で伝えたいこととは異なる異質なcodeが入るので、読者が混乱しかねないので避けたのでしょう。
どこで起動するか、で変わりますのでその点に留意して読めばどこでどのコマンドで、がわかるようになっていると思います

投稿2020/08/13 13:25

編集2020/08/13 23:03
winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moe-hou

2020/08/13 17:59

回答ありがとうございます。2の通りに実行したところ以下のようなメッセージが表示されました。 Traceback (most recent call last): 2: from rgb_test:2:in `<main>' 1: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- ./lib/rgb (LoadError) 試しにrgb.rbの方で簡易的なプログラムを作って実行したところ正常に実行できたので、問題があるとしたら、rgb_test.rbの方だと思うのですが… 何かわかることはありますでしょうか、よろしくお願いします。
winterboum

2020/08/13 23:06 編集

require "./lib/rgb.rb" にして試してください ん?待てよ。 「試しにrgb.rbの方で簡易的なプログラムを作って実行したところ」ってと testするときには作ってなかったのでは?
moe-hou

2020/08/14 03:48 編集

testする際に使うrgb.rbの方のプログラムを一旦消して、puts 'Hello' に書き換えました。そして、rgb_test.rbではなく、rgb.rbの方だけを実行してみました。 これは全体がおかしいのかrb_test.rbがおかしいのかを確かめるためです。 今回は全て書き換えて実行しました。その際に、My Ruby -> MyRuby 、 rgb.rb -> rgb 、 rgb_test.rb -> rgb_test に書き換えました。 rgbを実行した時には、cd /Users/maruyamahotaro/Desktop/MyRuby/ruby-book/lib としてから、ruby rgb で実行したところうまくいきました。 しかし、cd /Users/maruyamahotaro/Desktop/MyRuby/ruby-book/test としてから、ruby rgb_test で実行してもうまくいきません。
winterboum

2020/08/14 04:28

cd /Users/maruyamahotaro/Desktop/MyRuby/ruby-book としてから、ruby ./test/rgb_test で実行
moe-hou

2020/08/14 12:32

何度も申し訳ありません。 教えていただいた通りに実行したのですが、以下のようなメッセージが表示されました。 Traceback (most recent call last): 2: from ./test/rgb_test:2:in `<main>' 1: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- ./lib/rgb (LoadError) ファイルではなくプログラムのrequireの部分に問題があるのでしょうか。よろしくお願いします。
moe-hou

2020/08/14 13:52

require 'minitest/autorun' require './lib/rgb.rb' class RgbTest < Minitest::Test def test_to_hex assert_equal '#000000',to_hex(0,0,0) assert_equal '#ffffff',to_hex(255,255,255) end end 皆さんのアドバイスをもとに手を入れて、ruby-book % ruby ./test/rgb_test.rbで実行したところうまく作動しました。様々なところに深い理解が必要だということをしっかり感じられました。ありがとうございました。
guest

0

相対パスは、カレントディレクトリが相対の起点となるので、カレントディレクトリーの概念の理解なしには使えません。

理解できるまでは、ずべて絶対パス(/で始まるパス名)を使いましょう。

シェルのコマンドラインでの操作の時は、pwdコマンドで表示される物がカレントディレクトリです。
rgb_test.rbの絶対パスが/xxx/yyy/rgb_test.rbだとして、もしカレントディレクトリが/xxx/yyyなら、/xxx/yyy/rgb_test.rbのうち/xxx/yyy/の部分を省略した相対パスつまりrgb_test.rbに出来ます。カレントディレクトリと共通部分が無いときは省略できません。

投稿2020/08/13 12:13

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moe-hou

2020/08/13 13:03

My Ruby | ruby-book/ |--lib/ | |--rgb.rb |--test/ | |--rgb_test.rb | ruby-bookの上はこのようにMy Rubyとなっているのですが、この場合だと絶対パスは以下のようになり、 /Users/ユーザー名/Desktop/My Ruby/ruby-book/test/rgb_test.rb 実行する場合は、「ruby /Users/maruyamahotaro/Desktop/My Ruby/ruby-book/test/rgb_test.rb」となるという事でしょうか。このようにしたのですが、同じエラーメッセージが表示されてしまいます…
otn

2020/08/13 13:36

空白を含んだパスは " " で囲みます。 面倒なので普通はそういう名前のディレクトリやファイルは作りません。
moe-hou

2020/08/14 03:47

ご回答ありがとうございます。 実行する時を考えて、原則は空白のあるファイルは作るべきではないということですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問