読者です 読者をやめる 読者になる 読者になる

103

たのしいRuby第3版 〜 3.2 ファイルからの読み込み

programming Ruby

以下の本から掲題の節をやった。

たのしいRuby 第3版

たのしいRuby 第3版

全p500におよぶ大著のうちのp51あたりなのでまだ序盤もいいところだが、さすがの初心者だけあって一つ一つきちんとハマっている。

まず節の初めのp51、「RubyソースコードにはChangelogというテキストファイルがついているので、これを使ってその後の練習をしましょう」みたいなことが書いてある。
そこには以下のURLが記してあって、ソースコードはここからDLできるよと言われる。
http://www.ruby-lang.org/ja/downloads/

ので行くと、たしかにソースコードをDLできるようになっている。「最新の安定版」とされる「ruby 2.0.0-p195」をzipでDL。
しかし、開いてみるとその中に「Changelog」というファイルはない。

よってGoogleで検索。クエリは「Ruby Changelog」 みたいな感じか。で、以下に着く。
http://svn.ruby-lang.org/repos/ruby/branches/ruby_2_0_0/

ここで「Changelog」と書かれたリンクを開いて、
http://svn.ruby-lang.org/repos/ruby/branches/ruby_2_0_0/ChangeLog

ページをコマンド+Sで保存したらようやく「Changelog.txt」をDLできた。求められてるのはこれではないかもしれないが、まあ用は足りるだろうと考える。

そしてp52。じつを言うと、このp52とp53にあるList3.4〜3.6の実行を、一昨日あたり、上記のChangelogを入手する前に試して、失敗していた。
なぜ入手する前にそれを試したのかというと、単純に書中のURLを打ち込んだりDLしたりするのが面倒だったからで、それよりもとりあえずp52で作るよう求められている3種類の.rbファイルを作成し、ターミナルで実行するということをやりたかったからである。

しかし実際に作成し、実行したものの、どうやら2行目の

file = open(filename)

という部分がまずいらしく、

`open': can't convert nil into String (TypeError)

というエラーが出てくる。あまり意味がつかめなかったので、またもやGoogle。エラー文をそのまま入れて検索し、いくつかの日本語ブログを見るが、結局分からず。

加えて言えば、p53の上の方に書いてある

> ruby read_text.rb 表示したいファイル名

の、「表示したいファイル名」というのは拡張子も含めたものなのか、つまりテキストファイルなら.txtまで入れるのか、あるいは拡張子は外すのか、またあるいは.txt以外のファイルでも良いのか、とかも分からない。分からないまま、「read_text.rb」と同階層に置いておいた「memo.txt」などを入れて実行してみたが、やっぱりという感じでエラーが出てくる。何が悪いのか分からない。

それで、もしかしたら前ページのChangelogをDLしていないのが何か関係あるのかと思い、そうだよね、やっぱり書かれた順番にやらないとね、という感じでDLしたわけだが、結論から言うとべつにChangelogのDL如何とそのエラーは何ら関係がなかった。(たぶん)

ともあれ、それで時間は本日へ下るが、ChangelogをDLできて安心できたせいなのか、あらためてp52のList3.4、3.5、3.6を作成し、その上で今度はダメ元でまた同階層に置いておいた「helloruby.rb」を「表示したいファイル名」の部分に入れて実行してみたら、

puts "Hello, Ruby!"

が出てきた。
おお、と思わず声が出る。できた! と思った。

ついでに、という感じで前に失敗したはずの「memo.txt」を入れてみる。これは直近の仕事のタスクと1日分の日誌をつれづれなるままに記載しているファイルだが、これも何事もなかったように一気に表示された。ずらずらっと、日本語で。
できた! できた! と思った。なぜ数日前に失敗したのかは分からないが、その時にはできなくて、今はできた。なぜできなかったのか、という検証はきっと大事だが、目の前の、できたということが大きすぎてとりあえずそれに喜んでいる。

そのままp54、p55の実行も順調に進め、p56に来たところでようやく苦労してDLしたChangelogの出番になった。つまりここまで関係なかった。
果たしてどうなるかと思ったが、

> ruby simple_grep.rb matz Changelog.txt

の結果はちゃんと出力された。おお、とまた思った。matzよ・・

ちなみに、本では最後のファイル名が「Changelog」だったが、僕の保存したファイル名には.txtの拡張子がついており、本のママにやるとエラーが出たので、.txtを加えたら実行された。そういうズレと調整の連続という気がする。