オーム社 様のご厚意により,
書籍 "Ruby アプリケーションプログラミング" を
ブックレビューコーナー にご献本いただきました.
この本のレビューをして頂くべく,
Linux Users ML
や本サイトにおいて
公募
を行い,
これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.
ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)
オーム社 様および レビューアの皆様のご厚意に感謝いたします.
なお, 以下のレビューは初版を対象としています.
Ruby での開発を生業かつ趣味にしている私にとって, とてもためになる良書でした. 参考になるだけでなく, "なるほど, 次はこうやってみよう" という点が多々あります. Ruby を一通り覚えてこれから何かを作ろうと考えている人は, ぜひご一読ください. CGI・ネットワーク・GUI に関わるプログラムを開発しようという人には 特にお薦めします. それ以外の分野でも, オブジェクト指向・スレッド・ Ruby の拡張という部分でためになると思います.
Ruby の概要を簡潔にまとめています. 他のプログラミング言語に詳しい人は, "Ruby の哲学" に留意すると良いかも知れません.
Ruby と他のプログラミング言語の違いを解説しています. 継承や Mix-in という, 他の言語と異なる点が要点でしょう. この辺りの違いに馴染めるかどうかで Ruby に対する評価が決まりそうな気がします. XP (eXtreme Programming) にも触れていて, RubyUnit によるテストファーストプログラミングを紹介しています. 未経験の方はぜひお試しください. GUI のテストには向きませんがスクリプトの開発に大いに役立つもので, 使い始めると手離せなくなります.
CGI の基本から eRuby まで, 開発に際して役立つ内容です. セッション管理や排他制御, ブラウザの違いへの対応など, CGI に取り組む際には読んでおくべきでしょう. 実行環境を用意して実際に動かして見るのが良いと思います. 分散 Ruby についても触れています.
ネットワーク処理や GUI にはスレッドが必要という場面が多いと思います. 小さな例から ftp クライアントまで, ここでも実例が多く, スレッドという目に見えない (見えにくい) 存在を実際に動かして確認できます. スレッド間の通信や排他制御の実例を示していて, "使える" 内容になっています.
一般にネットワークプログラミングというと, TCP/IP が中心になると思いますが, この章では子プロセスのゾンビ化や UDP, デーモン化まで扱っています. スクリプト例を通じてネットワークについても学べます.
Ruby で Tk を利用する際の基本から, 個々の GUI 部品や属性の解説, イベント処理などについて, やはり実例を交えて述べています. コマンドラインから利用するプログラムに GUI を付加するという例題は, 個人的に応用が利いて格好の題材でした.
この章のスクリプト程度を書けるようになれば, 実際の開発にも十分に対応できるでしょう. 紙面ではスクリプトの要所を解説していて, スクリプト全体は付属 CD-ROM を参照することになります.
C/C++ で Ruby 用の拡張ライブラリを作るのは敷居が高い印象がありましたが, 具体例を見て印象が変わりました. Ruby から利用するために注意すべき点も細かく指摘してあり, 実際に開発する際には参考になるはずです. Ruby を C/C++ によるアプリケーションへ組み込む方法も, 他の書籍ではあまり目にしないように思います. Ruby を組み込んだアプリケーションというのも, いずれは作ってみたいものですが, 大抵のことは Ruby+ 拡張ライブラリで実現できそうな気もします.
全体に図版は少なく, 本文とスクリプト例に紙面を割いています. 要所にだけ図版を用いて, それ以外はできるだけ内容を充実させようという意図を感じます. パラパラとページをめくると文章ばかりの書籍に見えると思いますが, 内容は分かりやすいので敬遠することなく一読していただきたいと思います. 途中に現れる "COLUMN" も参考になり, 特に 148 ページの "文字コード問題" は要確認でしょう. COLUMN の一覧 (目次) がないのが残念です.
一言で表すと "良書" です. 前書きにあるように, CGI・ネットワーク・GUI といった分野で Ruby を利用しようと考える人にとって価値のある内容です. Ruby の初心者と Ruby を使いこなしている人を除く, 全ての Ruby 利用者に推薦します.
この本は, Ruby を利用して実用的なアプリケーションを作成するためのテクニックを紹介しています. よって, 対象となる読者は, Ruby を使い簡単なスクリプトは作成しているが, さらに一歩踏み込んで, より本格的なアプリケーションを作成したいと思っている人々となるでしょう. この本を読みこなすには, やはりプログラミングの基礎知識を有することが必要であり, 拡張ライブラリの章では, C 言語の理解が望まれます. ちょっと初心者には敷居が高いかもしれませんが, Ruby のコンセプトは「楽しくプログラミングを」です. この本を十分活用し, Ruby プログラミングを楽しみながら, いろいろな実用アプリケーション作成にチャレンジしてほしいと思います.
第 1, 2 章では, Ruby の概要とオブジェクト指向プログラミングについて書かれてあり導入部となります. 第 3 章以降は実用的なアプリケーション作成テクニックの概要からはじまり 詳細, 応用と段階的に学べるように構成されています. よって読者は, 各章のなかから興味のあるテーマを選び, 読みすすめることができます. そして各章には豊富な例題が掲載されているので, 実際にコードを打ち込みながら試してみるとより一層理解が深まります.
巻末には, 付録として CD-ROM がついており, Ruby をインストールしてすぐ利用できるようになっています. さらにプログラミング作成を支援するツールの利用法も説明されており, このツール群の効果的活用によりプログラミング作成が容易になっていくでしょう.
この本は, さまざまな分野において実用的なアプリケーションを作成する テクニックを解説したものです. 章ごとに独立した内容となっていますから, 自分の興味ある章から読み始めるのもいいでしょう. また, 概略から始まって詳細へと段階的に進んでいきますから, 概略の部分を拾い読みし, まず広く浅く全体を理解する方法もあります. よって, それぞれのスタイルでこの本を利用して, 実用的プログラムを作成しながら, Ruby の特徴である「楽しいプログラミング」, 「簡潔なプログラミング」, 「自然なプログラミング」を体験しましょう.
ショッキングピンクのカバー, 500 ページのボリューム. 大きな活字で読み易い. 本書の内容を評価してみる.
本書の構成は, アプリケーション作成に必要な知識が順序立てて記述されておりとても良い. Ruby 以外のプログラミング言語 (C 言語, perl 等) にも適用できる構成である. プログラミングに必要なシステム環境 (例えば, プロセス実行時の条件, http プロトコルの特性, CGI の規約) についての丁寧な解説があり, Ruby の使い方へ入るので確実に Ruby をマスターできる. 一般的なアプリケーション作成の手引書として役立つノウハウが 下記の通り満載されている. また, UNIX 環境, プロセス, パイプ, ネットワークプログラミング, マルチスレッドの基礎から応用まで説明されているので, UNIX プログラミング環境を理解するのにも役立つ良い教科書と言える.
Ruby の特徴, 用途, 歴史, 考え方が簡潔に記述されている. あっさりした感じもするが量的には適切である.
オブジェクト指向の考え方から入門までが順に説明されていて解りやすい. しかし, オブジェクト指向設計のところで, 小人さんの引用はピンと来なかった. 現実的な物を引用した方が, それまでの説明の流れに合うのではないかと感じた.
CGI を使う上で必要となる知識として, サーバの設定, http プロトコル, html ファイルの説明から入り, Ruby による CGI プログラミングが紹介されている. CGI のセッション情報の取り扱いの問題, クッキーの使い方, ファイルの競合の対処, ユーザ入力データの置き場所, セキュリティへの配慮, データベース連携まで丁寧に解説されている.
マルチスレッドの概要から入り, 基本操作, 例外処理が説明されている. 実用的な例題としてマルチスレッドを使った ftp コマンドの説明があり納得できる.
プロセス, パイプ, TCP/IP プロトコル, ソケットと基本の説明から入り, Ruby ソケットライブラリが紹介されている. 1:1 のクライアント-サーバモデル, 1:N のモデルも説明されている. Ruby によりネットワークが身近になる気がする. また, デーモンプロセスの生成, inetd の利用, タイムアウトの問題についても言及して盛り沢山である.
Ruby が他のソフトウェア資産をどのように有効活用できるか, GUI を使って入門から詳細の説明を経て, 簡易カンファレンスボードの実例まで紹介している.
bzip2 を拡張ライブラリとして Ruby に組み込む方法を説明している. また, C 言語のアプリケーションから Ruby インタプリタ機能を利用する方法も説明している. 更に, Ruby のセキュリティについて記述されている. この章は, Ruby の内部構造が少し垣間見られる内容である.
試しに Solaris8 のテスト機に Ruby をソースからインストールしたが, 問題なく完了した.
また, Ruby にはデバッガ, プロファイラもあり安心できる.
本書を読むまで Ruby を知らないこともあり, 私はこの違いが明確に判らなかった. perl については, UNIX 環境で何でもできる万能スクリプト言語として注目していたが, perl の難しい呪文が使いこなせず中途半端になっていた. 従って, オブジェクトの定義まで至らなかった. 一方, Ruby はオブジェクト指向がベースになっているため オブジェクトの定義から始まる. Ruby で作成したアプリケーションは自ずから再利用性が高くなるため, 利用者の小さな努力に対して大きな恩恵を与えてくれることは間違いない. Ruby から他の有用なソフトウェア資産を簡単に活用できるように 設計されていることもメリットである. perl と単純に比較するのは無理があるが, 初めからそのような目的を持って創られたソフトウェアである Ruby にチャレンジしてみたい気持ちが高まった.
本書を読んで感じたことは, Ruby が解り易いことである. C 言語の場合, プログラム開発者にそれなりのスキルがあることを前提としている. システム記述言語としての特性でもあるが, 良いデータ構造, モジュール設計, エラー処理の一つでも欠けると 保守しがたい怪しいアプリケーションができてしまう. 結構, このジレンマに陥っている方も多いのではないかと思う. Ruby の場合, C 言語を使う場合のようなスキルや細やかな注意から解放される. 一貫性のある単純で自然な文法, オブジェクト指向のため人に優しく覚えやすい. プログラム開発初心者は, Ruby を最初に学び, 経験を積んでから C 言語に移行するのも良いのではないかと思う.
この本は買う価値 (3,500 円) があるかについては, 問題なく買いである. Ruby をとことん使い尽くしたい人, あるいは, 品質の良いアプリケーションを作りたいと考えている人向けの本である.
本書は, その性質上 Ruby の基礎知識を持ったプログラマを対象にしている. よって, 本章はイントロダクションとしては非常に短い. ただし, Ruby の特徴や生い立ちとその歴史, また, Ruby の言語としての立場を再確認させてくれる. Ruby の生みの親である "まつもとゆきひろ" 氏の Ruby に対する親心がひしひしと感じとれる.
本章では, 「オブジェクト指向」と名のつくいくつかの単語に関しても解説を入れており, その性質の違いなどが理解できる共に, 「オブジェクト指向プログラミング」の真髄を理解できる. オブジェクト指向言語である Ruby を使用することのメリットを含め, 他の言語との比較も十分提供してくれる. 本章には下手な本を読むより十分厚みのある内容がある.
Ruby の代表的な使用例である「CGI プログラミング」を通し, オブジェクト指向的なプログラミングを学んでいく. しかも, それだけでなく CGI そのものや Web アクセスの仕組みまで解説している. これらの知識は Ruby だけでなく他の言語に関しても共通の知識であり十分に役立つ. また, Ruby のテキスト埋め込み仕様である eRuby に関しても学ぶことが出来る.
Ruby における「マルチスレッド」の実装に関して OS 依存しないことは既知である. この Ruby の特徴の一つである「マルチスレッド」に関して, 具体的ないくつかのプログラムを通し学習することが出来る. CGI プログラミング同様, マルチスレッドに関する知識や技術と言うものは, 他の言語でも使用できることが多く 「マルチスレッド」を学ぶには大変役立つと共に, Mutex など Ruby の実装の奥深さを痛感できる.
ネットワークプログラミングは, プロセス間通信の一種であり, Ruby を通してパイプやソケットなどのプロセス間通信を学ぶことができる. ネットワークプログラミングはそれ自体, 手続きを守れば難しいことは無い. Ruby の豊富なクラスライブラリを使用することでその煩わしさから開放 され, 複雑なネットワークプロトコルを操ることに専念できるはずである.
これまでは, 主に, CUI 中心のプログラミングに関してであったが, 本章から GUI プログラミングに関して解説が続く. まずは, この GUI プログラミングをサポートする GUI ツールキットの一つである Ruby/Tk について学習すると共に, GUI プログラミングに必要な作成手順を学習できる. また, 日本語文字などの扱いに関しても言及しており, 昔, X-Window プログラミングで日本語を表示する際の苦労を思い出させてくれた.
つづけて, Ruby/Tk の扱いに関して詳細に学習していく. GUI のプログラミングを作成すると必然的にイベント処理が多くなってくる. メニューやボタンなど使いやすさとは裏腹にプログラムは複雑になりがちであるため, 本章では, Ruby/Tk を通してイベント処理の手法を学習する. また, Tk を備えたスクリプト言語として有名な Tcl の Tcl/Tk ライブラリの機能を使用した GUI プログラミングに関しても解説がなされており, 大変興味深い.
これまで学習してきた「ネットワークプログラミング」と 「GUI プログラミング」の融合である. この章を理解することで, 普段使用している GUI を使用したネットワークアプリケーションと 同等のアプリケーションを自作できるようになるであろう. 本章は, これまでの総纏め的な章となっており, 解説よりプログラムの記述の方が多くなっている. 気合を入れないと疲れてしまうであろう.
Ruby は当然のごとくインタプリタ言語なので速度の要求できない. このような場合有効なのが, C や C++ で作成したプログラムを利用することである. また, C や C++ で作成された既存のライブラリを利用したい場合も同様である. この際必要となるのが Ruby API である. Ruby のライブラリとして他言語のライブラリを使用したい場合は, この API 仕様にしたがって Ruby との I/F を守る必要がある. 既存の C/C++ で作成されたライブラリを有効活用したい場合には, この手法が有効であろう. また, Ruby は Ruby への他言語ライブラリの取り込みとは逆に Ruby のインタプリタを既存の 他のアプリケーションへ組み込むことも可能となっている. 後半は, このインタプリタ組み込み関して詳細に解説されている. 自作アプリケーションで Ruby の強力なインタプリタ機能を使用したい場合には有効である.
Ruby のインストール, 支援ツール, リファレンスが提供されている. なかでもリファレンスは圧巻である. 更なる理解を深めたい場合は, これらのリファレンスの一読をお勧めする.
本書は, Ruby の基礎知識を持ったプログラマに対し Ruby の本質である オブジェクト指向プログラミングに関しての理解を深めさせてくれると共に, Ruby を通してプログラミングの楽しさを提供してくれる一冊である. Ruby の強力なインタプリタ機能と豊富なクラスライブラリは, 大変魅力的である. また, 要所要所に織り交ぜられている貴重な助言や情報は大変役立つことばかりである. 本書は, Ruby プログラマとしてだけではなく 純粋にプログラマとしても役立つ一冊である. 是非一読されたい.
今回, この Bookreview の機会を与えて頂いた, 株式会社オーム社さま, および, www.linux.or.jp Webmasters Bookreview 担当の方々には, 大変感謝しております. また, このようなすばらしい本を書き上げた, 著者の皆様に対して敬意を払いたいと思います. 本当にありがとうございました.