株式会社オーム社 様のご厚意により,
書籍 "Ruby プログラミング入門" を
ブックレビューコーナー にご献本いただきました.
この本のレビューをして頂くべく,
Linux Users ML
や本サイトにおいて
公募
を行い,
これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.
ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)
株式会社オーム社 様および レビューアの皆様のご厚意に感謝いたします.
この書籍に関する, 著者による追加情報のページ が公開されています. 是非あわせてご覧ください.
なお, 以下のレビューは初版を対象としています.
現在ある Ruby に関しての書籍の中 (といっても 3〜4 冊ぐらいしかないが) では最良の一冊と思う. しかしこの書籍を読むことでプログラミングが可能か? という問いに関していえば難しいだろうと思う. 言いかえればこの本を読んでプログラミングができる人は別の言語を知っている人だと思う. 文章の読みにくさ, 構成の不均一さ等が気にかかる. 内容は比較的素直にかかれているため, 構成さえすっきりしていさえすれば自習用参考書として十分使えると思うので残念である. このレビューを行なう義務がなければ途中で読むのをやめたとさえ思える. アスキーの「オブジェクト指向スクリプト言語 Ruby」を読んでみて良くわからず挫折しているが, それでも Ruby を使ったプログラムを作りたい人ならば持っておくと良いと思う. 私個人としては結局のところ, Ruby でプログラムを作ろうという気にはならなかった. Perl で十分である.
本当は本書を読んで
等を実感できればと思っていたのであるが, それ以前に構成のまずさが気になってそんなところまでたどりつけなかった. 以下問題点を列挙しよう.
アスキーの「オブジェクト指向スクリプト言語 Ruby」が病的なまでに脚注が多いので, それにくらべれば読みやすいと言えるかもしれないがまだまだ脚注が多すぎるように感じる. 脚注があると読者は一度視線を移す必要があり, そのことは読みにくさにつながる. 脚注の多さは結局のところ構成をきちんと考えていない証拠である.
まず, コラムの欄が「どこからどこまでがコラム」なのかがわかりにくい. 枠でかこむ等の処理をしてほしかった. ページをまたがったコラムが数多くみられるが, これらは論外である. これもまた構成をきちんと考えきっていないことを示している.
またコラムの内容も
等, があり
「図は描いておけば良い」ものでは決してない. 例えば GIMP の入門書ならば言葉で説明するより絵でみたほうが早いことがらもあるかもしれないが (Effect の効果など), プログラミングの入門書ではまず言葉で説明して欲しい. また「本文中に図* を見てください」というような文章がない. そのため文章のどこの部分を図で説明しているのかがわからない.
文章のまずさが比較的 (「オブジェクト指向スクリプト言語 Ruby」に比べて) 少ないので, 「オブジェクト指向スクリプト言語 Ruby」を読んだことがある人ならば「ああ, あの本で言ってたのはこのことだったんだ」と思うことが多々あるかもしれない. 私はやっと「オブジェクト指向」という意味を捉えることができたという気がする. つまるところ「オブジェクト指向」とは自動詞的に考えれば良いのだな, というのが私の理解. 第 1 章で電話番号検索コマンドの作製を通して 配列, ハッシュ, スコープ, および (簡単にはであるが第一ステップとしては必要にして十分な) 正規表現の説明がスムーズに行なわれている.
プログラムは慣れの要素が非常に大きいので, 本を読むだけでプログラムを作れるようには絶対にならない. 人によって作りたいプログラムはさまざまなので, この章をがんばって読んで, あとの章は順次必要なところを読むようにすればよいと思う.
ただ私個人としては Perl を捨てる気にはなれなかった. 使いなれてきたというのが一番の理由ではあるが PerlMagick に対応するものが探せなかったからでもある. だれか RubyMagick を作ってくれないだろうか.
Ruby は比較的新しい言語であるので参考書も少ない. Perl, Python 等を使ってみたが, 何らかの理由で気に入らなかったため Ruby を使いたいという人には本書が助けになるだろう. しかし全くのプログラム初心者, もしくは言語にこだわらずに例えば, CGI を作りたいと思っているような人がこの本を手にして Ruby プログラミングを始めるというのは少し困難だと思う. Ruby の設計が「初心者に使いやすく」作られているとしても, それを説明する参考書がとっつきにくくては, 仕方がないからだ. この本はそういった面で非常に損をしている. 個人的にはもっとエッセンスだけがつまった本 (例えば B5 版で 100 ページ以下程度) が欲しいと思った.
この本は, Ruby を使ってプログラミングを楽しみたい人のために書かれた入門書です. とくに, オブジェクト指向プログラミングの基礎を学びたい人には最適の本だと思います. 「対象は初心者から中上級者まで」とありますが, 内容は非常に密度が濃く, 初心者にとっては相当気合を入れて読みこなす必要がありますが, 中盤から後半のネットワーク, マルチスレッド (競合と排他) などの章は, 興味深く, 非常に読み応えのあるテーマですので, プログラムを作成・利用する人にとっては, いろいろな応用面で役に立つでしょう.
第 1 章は Ruby の全体を見通すには, ちょうど手頃な内容であり, ページ数です. 特に, (ローマ字かな変換スクリプト) はハッシュや正規表現の概念をつかむうえで最適な例題です. また, (魔法のビスケットスクリプト) ではオブジェクト指向の基本が理解でき, まさしく Ruby の特徴を十分引き出した, 楽しい例題です. また, 付録の CD-ROM に入っている, チュートリアルやユーザースガイドも参考にするとより理解が深まります.
第 2 章は例題豊富な文法解説です. 1 度この章に目を通したあと, 必要なときに該当個所を参考にしていけば, プログラム作成の十分な手助けとなります. また, リファレンスマニュアルも付録としてオンライン化 (HTML) されているので, こちらの方も積極的に利用するとよいでしょう.
第 3 章以降は各論に入っていきます. とくに第 3 章と第 5 章はオブジェクト指向について懇切丁寧な説明がなされいます. 特に, これらの章では読者の理解を促進させるために多くの図を利用して説明がなされていますので, 図とともに内容の理解がすすみます. まさしく, オブジェクト指向プログラミングを身につけたい人には, ぜひ, お勧めしたい章です. もちろん, その思考は一朝一夕に身につくわけではないのですが, 他の言語に比べて Ruby はスムーズにかつ自然にその思考が身につくよう設計されており, Ruby の作者まつもとゆきひろ氏の思い入れが, 見事にこの言語に反映されています.
第 4 章では, Ruby で実装されている正規表現をていねいに紹介しています. もちろん Perl や awk でもおなじみの正規表現ですが, Ruby での正規表現の特徴は, 正規表現がクラス (Regexp) のオブジェクトであるいうことです. ここにもオブジェクト指向を意識して作られていることがわかります.
第 8 章では, 応用例としてさまざまなスクリプトが集められています. この例題を注意深く理解していくとさまざまなプログラミングで応用ができるでしょう.
内容でちょっと気になったのはイテレータについてです. Ruby 特有のイテレータについては, 別に章をたてて詳しく解説がなされてもよかったような気がします. 他の言語にはあまりない機能なので, もう少し突っ込んだ解説が必要だったように思われます.
豊富なテーマ (オブジェクト指向, 正規表現, マルチスレッド, ネットワーク) にそったたくさんの例題や, CD-ROM にふくまれる Ruby 本体や関連ソフトウェア, さらには, ドキュメントやマニュアルなど, Ruby を学ぶうえで必要なものはすべて揃っているので, 初心者から中上級者まで気軽に本書を手にとって Ruby プログラミングをはじめることができます. スクリプト言語の特徴である 「簡単」, 「すぐに」, 「便利」の要素に「楽しさ」が加わった日本生まれの Ruby でプログラムを楽しみましょう.
Ruby は最近, ネット上で, 一部の熱狂的なファンを中心に急速に広まりつつありますが, 書籍などの, 自分で勉強していくインフラが十分整備されていると言えず, 一般に認知されているとは言い難いと思います. そのような中で出版されたのがこの本です. それも待望の入門書です.
この書の構成は, 第 1 章が Ruby 入門となっていて, Ruby のプログラミングの基礎をさらっと流したような内容になっています. 第 2 章が Ruby の文法の説明と, コアとなっているいくつかのクラスの解説になっています. 第 3 章から第 7 章までは独立性の高い章立てになっています. 第 3 章がオブジェクトとメソッド. 第 4 章が正規表現. 第 5 章がクラスとモジュール. 第 6 章がマルチスレッド. 第 7 章がネットワーク. そして最後の第 8 章がスクリプト実例集になっています.
全体的に見ていい本だと思います. はじめの章で, ステップアップで Ruby の機能の多くを学べるようになっていて, 別の章で Ruby の文法や, 文字列, 配列, ハッシュなど使いこなせれば 強力な組み込みクラスライブラリ群, 最初の一歩が難しい正規表現などがしっかりと フォローされています. サンプルとその結果も豊富に書かれています. この本で Ruby の特徴を生かしたプログラミングを しっかり身に付けることができると思います. 「いろいろできそう」という Ruby の楽しさは十分伝わってきます. 普段便利に使えるようなテキストフィルタ類など, 小物のツールを自作するには, この一冊で十分だと思います.
初めて読んだ時に, ちょっと構成が分かりにくいと思いました. 関連があると思われるトピックが少し分散しているように思います. 例えば制御構文ですが, イテレータ, 例外は制御構文に入れるべきだと思います. そして, もっと図を駆使してビジュアルに訴えかけるように書いて欲しいと思いました. 初めてプログラミングをする人にとって, やはり制御構文の使い分けというのが一つの関門だと思うからです. プログラミング経験はあるが Ruby は初めてという人にも, 一カ所にまとまっていたほうが引きやすいと思います.
あと, せっかく Ruby には組み込みで CGI を簡略化するライブラリが付属しているのに, CGI の例と言ったら第 8 章のサンプルにしかなく, しかも CGI サポートクラスを使っていません. ここも疑問に思います. Ruby のテキスト処理能力が優れているので, CGI を Ruby で書きたいという需要は少なからずあると思われます. そのために Ruby を勉強したいという人も多いと思うので, CGI はもう少しページ数を割いて書いて欲しかったと思います.
3, 5 章の分け方も腑に落ちません. オブジェクト指向関連の章を分けるとしたら, 概念と実装, もしくは入門と詳細とに分ける方が読みやすいと思います. とくに Ruby のようにオブジェクト指向が徹底している言語では, 文法の説明の前にオブジェクトの概念を入れるぐらいでもいいと思います. そういった意味でこの本は, オブジェクト指向の入門者には薦めづらいと思いました. 僕がこの本に興味を持ったきっかけは, 最近オブジェクト指向入門のセミナーなどで, Ruby が使われはじめ, しかも評判がいい, という話を聞いたからです. オブジェクト指向の教育用言語としての Ruby にスポットを当てて欲しいと思っていただけに, やや残念です.
いろいろ書いてしまいましたが, Ruby の良さを十二分に伝えるいい本だと思います. 入門書としてのできも悪くないと思います. とくに正規表現がしっかりと書かれている点はとてもいいです. 僕の期待からは少しはずれていますが, これはおすすめの本です. 値段的にも (プログラミングの本にしては) 安いと思います. また付録の CD-ROM もまだ詳しくは見ていませんが盛りだくさんです. 内部仕様まで書いてある最初の Ruby 本, 2 冊目の 256 倍本邪道編と, いままで出版された本ではなかなか入門しにくかった人への福音と言えるでしょう.
本書は, Ruby に関する本としては 3 番目に出版された本である. 最初に出た 2 冊「オブジェクト指向スクリプト言語 Ruby」「Ruby を 256 倍使うための本 邪道編」は いずれも内容の充実した本ではあったが, これから Ruby を始めようという人に薦められるとは言い難いと思っていた. 本書はタイトルの通り, Ruby の初学者にふさわしい, 平易で詳細な内容を持つ入門書に仕上がっている.
章立ては極めてオーソドックスなものだ. 従って独学で学ぶ場合も, これを教材に授業を行なう場合も, 非常に使いやすいだろう. Ruby をとりあえず使い始めるには, 1 章をざっと眺めたら, 2 章をリファレンスがわりに使えば充分かもしれない. しかし, 3 章から 7 章にかけては, Ruby を構成する重要な要素や概念が実にていねいに, 例を交えて説明されている. Ruby にはある程度慣れているつもりだったが, これらの章を読んで, あらためて理解が深まったと思うことしきりであった. この部分が, 本書のキモであると言っていい. さらに, やや高度なスクリプト例を並べた 8 章を, 2 章と見比べながら読み解いていけば, Ruby プログラミングの実力をかなりのレベルまで持っていけると思う.
また, 本書は 2000 年 11 月末現在最新の 1.6 系バージョンを対象としており, この点でも初学者に安心感を与える. ある程度経験を積めば, 多少バージョン間の違いがあったとしてもカバーができるようになるが, 初心者はそういう細かい点で挫折してしまうことが少なくない. 今後も Ruby の進化に合わせて改訂されていくことが望まれる.
ただ, 本書にはいわゆる「リファレンス」にあたる章がない. 本書の位置づけや本の厚さ, バランスを考えてのこととは思うが, これ 1 冊で Ruby を学ぶための要素をカバーするためにも, 簡単なリファレンスがあった方がよかったかもしれない.
正直言って, プログラミングを始めた頃の感覚は忘れてしまった. だから, プログラミングが初めての人がこの本でプログラミングを学べるかどうかはよくわからない. ただ, 本書は極めて平易な, かみくだいた記述がされており, 授業や講議の教科書として使えば, Ruby を教材にプログラミングを教えることは充分可能であるように思う. Ruby の手軽さと, 当たり前のようなオブジェクト指向を両立した形でプログラミングを始められたら素晴しいと感じた.
Ruby はオブジェクト指向スクリプト言語であるが, 本書ではオブジェクト指向というものをそれほど前面には打ち出していない. むしろ, Ruby という言語の説明の中にうまくちらばせ, 自然な感覚として読者に植えつけていくことを目指しているかのようだ. そして, それは成功していると言っていい. その点でも, 概念を強く打ち出すよりも, プログラミング初心者にとってはとっつきやすいのではないだろうか.
入門書と銘打たれた本には, 「入門書にしか使えない本」というものも少なくないが, 本書はそうではない. Ruby の標準的な機能について極めて網羅的に扱われており, しかもそれぞれかなり掘り下げて説明されている. 中上級者が Ruby の持つ機能や思想を確認していく上でも非常に役に立つだろう. 初学者のうちだけではなく, Ruby を実用的に使っていく時にも, 長く使える本だと言える. ていねいな記述がともすると冗長に感じるかもしれないが, その中から, 気づいていなかった Ruby の魅力に気づかされることがあるにちがいない.
ある言語やソフトが, 一部のハッカーから, より一般的なユーザに広まるためには, 入門書が大きな役割を担う. その点から, 早い時期にこのように優れた入門書が出版されたことは, Ruby にとって実に幸せなことだと思った. Ruby に多少慣れている人にとっては, ていねいな記述がややくだくだしい印象を与えるかもしれないが, それを我慢する価値のある, 内容の濃い良書である. 初学者はもちろん, Ruby に慣れたと思っている人にも薦められる.
本書は, 「オブジェクト指向スクリプト言語」である Ruby についての最初の入門書である.
入門書の場合, 対象とする読者層にどの程度の知識を前提として求めるかで, (特に最初の章の) 内容が大きく変わってくるのだが, この本の場合は序文にもあるように, 「まったくの初心者」から「一歩進んで大きなアプリケーションを作りたくなった」人までをその対象として書かれている.
初心者にとって, 入門書の第 1 章は, その本を読みつづけることができるか, 途中で投げ出してしまうかを分ける重要なポイントとなる. Ruby であれ他の言語であれ, プログラムを作ったことのない人にもわかりやすいように平易な表現を多用して説明がなされているのは好感が持てる.
その反面, まったくの初心者に説明するために用いた表現が, ある程度知識のある人には混乱を招きやすいものだったり, 初心者に対する説明であるにもかかわらず, それまでに説明していない語句を用いている部分があったりと, 場所によって内容にバラツキを感じた.
C などの手続き型言語をある程度使いこなせ, オブジェクト指向型言語に興味がある読者ならば比較的楽に読めることと思うが, まったくの初心者がこの本でプログラミングを覚えるのは難しいかもしれない. (私自身が, そういう意味での「初心者」ではなくなってしまっているので, この評価は主観的なものであることを特にお断りしておく)
数値, 文字列, 配列, ハッシュ, ファイルといった基本的なクラスについての説明から, 正規表現, マルチスレッド, ネットワークまで, 幅広く説明がなされている.
残念なのはエラー処理に関する説明が少なかったこと. インタプリタが出力するエラーについてのまとまった説明があれば, 入門者がスクリプトを書く練習をする際の助けとなったであろう.
索引が引きにくい (アルファベットのキーワードが, かな文字の項に割り振られていたりする) との評価を書こうと思ったが, 著者のサイトで関連情報が公開されており, その中にある「新・索引」では上記の不満が解消されている. (ブラウザの「検索」機能が使えるので)
本書を読む場合は, 以下に示す著者のサイトを合わせて参照すると良いだろう.
http://www.ruby-lang.org/~sinara/nyumon/