株式会社 SCC 様のご厚意により,
書籍 "Ruby による CGI プログラミング" を
ブックレビューコーナー にご献本いただきました.
この本のレビューをして頂くべく,
Linux Users ML
や本サイトにおいて
公募
を行い,
これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.
ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)
株式会社 SCC 様および レビューアの皆様のご厚意に感謝いたします.
なお, 以下のレビューは初版を対象としています.
題のとおり, Ruby による CGI プログラミングの入門書である.
想定されている読者は, CGI や Ruby の知識は余り無いものとされている. 従って Ruby についても, CGI についても入門書だと言える.
はっきり言って, 平均的な入門書である.
構成はこの種の本の定石に従って, 簡単なフォームの処理から, 掲示板, DB との連携を経て, ショッピングシステムの構築へと進む. CGI の入門書としては認証やセッション管理が触れられていないのは物足り ないが, 一通りのことは出来るようになっている.
CGI そのものの入門書として特に工夫や新味があるとは言えない. perl による CGI に慣れた読者にとっては, CGI に関して特に目を惹く内容は無い.
となれば見るべき所は, 説明の良し悪しだ.
CGI と言う観点では, やや掘り下げは浅い. 例題のアプリケーションの仕組みは説明するが, 背景的な議論は殆ど無い.
最近の大抵の CGI の入門書では触れられている, クッキーや URL 書き換えや隠しフィールドとセキュリティの関係についての問題も一切触れられていない. ヘッダのオプションに関しても MIME タイプとリダイレクトに触れているだけだ.
例題のソースコードに出ている範囲の説明しかないと言って良い.
汚染チェックについて触れられているのは, それが Ruby の特徴的機能だからであって, CGI のセキュリティの観点からは踏み込みが足りない.
一方, 各章とも例題のアプリケーションの解説は見るべきものがある. 説明は比較的要領が良い. 特に各アプリケーション仕様を示したフロー図については秀逸と言っても良い. これは読者が自分でアプリケーションを組む場合にも大いに参考になるだろう.
CGI の入門書としては, 良く言えば実戦的だが, 悪く言えば, 良くできたサンプルソース集に近い.
CGI を書く上で必要最低限の説明に止めている. しかしながら Ruby の初心者を想定して説明を進めている.
特徴的なのは, 本書ではクラスを作る, という使い方が殆ど出て来ない事だ. 後半に多少は出て来るのだが, クラス定義という観点での説明は殆ど無い. 殆どのソースコードは出来合いのクラスを呼び出して使うものに止まる.
また数少ないクラスの作成例も, initialize で殆どの処理が完了し, 他のメソッドは結果のデータを引き出すためのもの, というタイプだ (lock クラスは例外だが, これもクラス定義というよりも lock ブロックの作成という観点で説明しているに過ぎない).
イテレータブロックは多用しているものの, 制御ブロックの簡潔な書き方の紹介という側面が強い.
要するに「オブジェクト指向」は殆ど前面には出て来ない. このような行き方は初心者向けの配慮として (反対もあろうが), 評価して良いと思われる. オブジェクト指向は優れたコンセプトだが, 実際にはその考え方に馴染めるかどうかの個人差は大きい. CGI の入門書でもある本書では, 読者がオブジェクト指向の考え方に戸惑って先に進めない, という事がないように配慮するのは当然なのかもしれない.
こうした配慮の効あって, 非常に取っ付きやすい Ruby 導入になっていると思われる.
他のプログラミング言語の経験が全く無い初心者にも分かるか, というとさすがにそれは無理だが, VBA で MS Office 製品のマクロを書いたことがある程度であれば, 恐らく理解するのに苦労はしないであろう. (因みに本書は, ソースコードの編集には Windows のメモ帳 (notepad) を使うことを前提としていると書かれている様に, かなり Windows ユーザへ配慮した内容になっている)
しかしながら, このような行き方の代償として Ruby らしいプログラミングが身に付くとは到底言えない. あくまでも CGI 入門として, というこのバランスについては, 本書の弱点と言えないこともない.
僭越ながら, この本の向き不向きを考えてみる.
CGI の入門書としては先に述べたように長所もあるものの, 実務用の入門書として物足らない.
一方で Ruby の入門書としては上に述べたように, CGI 入門としてのバランスを配慮してか, 余り Ruby らしからぬレベルのものである.
悪く言えば中途半端なのである.
これは決して悪い本だという事にはならない.
今や WEB サーバは個人の PC で誰でも立ち上げられるソフトウェアである. 個人が自分の為だけに使うという用途だって有り, だ. localhost のサーバを個人用の情報装備として使用する. 悪い考えではあるまい.
私自身, Apache をそのように使っている. PostgreSQL と合わせれば, 丁度 MS Access で作るようなシステムが簡単に作れる. ユーザインターフェースも Form で簡単に作成出来る上, HTML のドキュメントとしての特性を活かせば見栄えのするアプリケーション が, 手頃な手間暇で手に入るのだ.
このような仕掛けは, 日曜プログラマにとって丁度良い環境だと思う.
となれば, そこで使う言語には楽しい言語が好ましい.
そう考えると, この本は, そんな日曜 CGI プログラマに向けた Ruby への誘いなのである. 中途半端さは, そのままお手軽さ, 取っ付きやすさに繋がる. 全てを理解する必要は無い. 時間の許す範囲でやりたい事をやるに最低限必要なことさえ分かれば良い.
だとすれば, これまで挙げて来た本書の特徴は全て長所となる. この本は, そんな読者向けに最適なのだ, と思う.
一方で, Ruby はやはり未だ他のサーバサイドのプログラミング言語を凌駕するものでは無い, と思わざるを得ない. Ruby による CGI アプリケーションとしては私は Tiki を愛用している. しかし, 実務上は Ruby をサーバサイドで用いていくには, もっとやるべき事が残っていると思われる.
本書は, そんな問題への答えは用意していない. 本書のソースコード例が, 例えば PHP の入門書の同種のアプリケーションのソースコード例に比べて余りスマートに思えないとしても, それは仕方が無いのである.
このような状況では実務者向けの Ruby による CGI の本, は難しいのかも知れない.
一応問題点も指摘しておこう.
最近のコンピュータ関連図書に共通した問題だけれども, 校正という作業はしていないのだろうか? 本書でも余りに沢山の誤植が散見するのである. 特にソースコードに絡んだ誤植, 本文中におけるコマンド名やメソッド名の typo 等は初学者を惑わせる. これは勿論著者の責任もあるが, 第一にはやはり出版元の責任である.
寿命の短いコンピュータ関連図書にコストをかけられない, という事情があるのかも知れないが, それにしてもちょっと悲しくなるくらい校正の質は低いと言っておく.
Ruby で CGI を書く場合, もともと読みにくくなる傾向がある. 一つは他の言語でも同様だが, ロジック側の言語と HTML ソースコードが混在してしまうことによる. 本書ではヒアドキュメントを多用してソースの混在を避けるように配慮しているようだが, テキストを色分けしてくれる開発環境でならいざ知らず, 単色の印刷ではやはり読みにくい. また Ruby ではブロックのネストが深くなると, end の羅列がソースを読みにくくする (他の言語でも同様の問題はあるが).
しかしこうした事情に加えて本書では, わざわざ読みにくくしているのである.
本書ではソースコードには良くコメントが加えられている. これはコーディングの態度として良いのだが, 長い文章があると, 紙面では不様に行が折り返されて, 次の行の先頭から続いて表示されているのである. これが為にインデントされて示されるブロックの階層も見にくいものになってしまう.
しかもコメントも制御ブロックも, ロジックの要の場所に多くなるので, 「読みたい時にもっとも読みにくい」という本末転倒な結果になっているのだ.
書物の中のソースコードリスティングは, 現物のソースコードテキストの印刷で良い訳がない. 紙面で読みやすくする配慮が無ければページを費す意味が無い.
ご存知のように Ruby の CGI ライブラリは perl の CGI.pm に匹敵するだけの機能を備えている標準ライブラリである. このライブラリを使いこなすと CGI プログラミング生活は大分楽になるように思うのだが, 何故か本書では扱いが小さいのである.
本書ではセッション管理も出て来ないけれど CGI::Session が折角あるのに, この選択は納得出来ない. 紙面の制約という事なのだろうか?
豊富なパッケージになれた昨今の perl 使いから見ると妙に古風に見えるコードが目立つ. 本当は Ruby にも CGI の為の蓄積があるのに残念である.
Windows 使いは, そこまで低水準と想定されているのだろうか, と苦笑してしまった. 第 2 章の Windows ユーザ向けの説明は呆れる程トリビアルな事を解説しているのだが, この記述が本当に必要な読者だとしたら, 以降の記述の理解も難しいのでは無いかと思われる.
こうした説明を何故, 本書が供給すべきなのだろうか? このような事に紙面を割くのなら, 他に触れて欲しいこともあったというのに, だ.
本書の帯には「日曜プログラマよ, Ruby で WEB を制覇せよ!!」と書くのはどうだろうか?
それはともかくも, 本書は Ruby で CGI を楽しむための入門書であると私は思う.
CGI 入門としても Ruby 入門としても, いささか物足らないところはある. しかし, 日曜プログラマが作るアプリケーションでは認証は不要だろうし, セッション管理だってランダムなセッション ID を生成しなければならない, ということも無い. Ruby だって必要なら添付の CD-ROM のレファレンスマニュアルを調べれば良い.
これから CGI を始めたいと思ってる日曜プログラマ, Ruby に興味があるけれどきっかけが無かった趣味のプログラマの諸兄姉にはお勧めしておく.
なお, さんざん偉そうに書いて来たが, 実は私は『Ruby に興味があるけれどきっかけが無かった』一人である. 今回のレビューのお蔭で, Ruby を楽しむことが出来た. レビューの機会を与えて下さった株式会社 SCC と Webmasters ブックレビュー担当者の方々にお礼を申し上げたい.
本を読む前に感じていた「Ruby って何だろう. なんだかとっても難しいのでは?」という不安が, 最初の数ページを読んだだけでまったく無くなりました. それぐらい丁寧に書いてあり, 期待できる内容です.
この本の特徴としては以下の点が挙げられます.
本書ではエディタの使い方まで説明しています. こういった本はなかなかありません. これからプログラミングを始めようという初心者にまさに最適です. それでいて中盤の方ではファイルの排他処理についてのプログラミングなどの高度な部分にも触れています. 具体的な CGI を例にしているので, とてもわかりやすいと感じました. 付録には用語集などもあって, 初心者に優しい作りとなっています.
私は普段仕事で PostgreSQL などのデータベースを使っていて, 今までは C 言語などでプログラムを作成していました. Ruby にも PostgreSQL 用のアクセス命令が用意されていると聞いていて関心がありました. 実際どのように使うかは本書の中で軽く触れられており, 簡単に使えそうだということが分かってますます興味が湧きました.
誉めてばかりですが, 欠点を挙げるとすれば, 全体的に広範囲な内容となっているので, Ruby のプログラミング技法や一歩踏み込んだ内容についてはあまり書かれていません. どちらかというと Ruby の紹介というような感じがしました. Ruby のマニュアル本としての利用には向かないかもしれません. でも中級者なら Ruby の世界を知ることができますし, 初心者は本書の内容で十分でしょう.
とにかく初心者に優しいというのが特徴です. いかに Ruby が使いやすいかが本書を読むことで分かります. 個人的には Perl よりもずっと使い勝手がいいと感じました. これから各 OS に標準装備されていくようであれば, Perl よりも Ruby を選びたいと思います.
まずはじめに, 目次を見て驚いた. 「前準備」に, なぜ「エディタの使い方」や「FTP の使い方」が必要なのだろうか? 読んで行くうちにわかるに違いない, と思い, 読み始めたがやっぱりわからなかった. なぜ, こんな説明が必要なのであろうか? CGI を作成したり, チェックするために必要なことはわかるが, これだけの紙面を割く必要はないであろう. どうしても載せたいのであれば, 追補として, もっと簡潔に載せるべきだ.
さらに読み進めていく上で驚いたことは, 間違いが多いことと, サンプルリストが見づらいことだ. とにかく, 言葉や説明に間違いが多く見られる. はじめのうち, 気が付いたところはマークしていたのだが, あまりに多いので, 途中で止めてしまったほどだ. また, サンプルリストは, 1 行の折り返しが行番号と重なってしまい大変読みづらい. 読む際は, 注意が必要である.
いきなり酷評を続けてしまったが, よい点も見受けられる. 作成する CGI プログラムの構成を, 図できちんと説明している点である. ブロック構成図的な手法を用いて説明をしているので, これから作る CGI がどのような流れになっているのか分かるようになっている. どんな手段を用いて CGI を作るにせよ, この手順は採用したほうが良い.
再び, 気になった点を挙げるが, それは, 本全体の構成にかかわる章立てである. 各章, 作成したい CGI に対し, それに必要なRuby の基礎知識といった具合で説明が始まるため, Ruby に関する基本的なところが分かりづらい. もう少しまとめて, Ruby に関する初歩的な説明・勉強を踏んでから, CGI に入ったほうが良いのではないかと感じた.
また, Ruby CGI について述べると, 純粋な Ruby を使用した CGI から CGI に適した eRuby に Step することで, より Smart な CGI を記述することができるため, この採用は大変有意義であると考える. ただし, Ruby お得意のオブジェクト指向という観点から見ると, 物足りない点がある. せっかく, オブジェクト指向を謳っている Ruby を使用しているのであるから, 各章で使用したサンプルをクラス化し, 続く章で再利用するようにすれば, サンプルリストも煩雑にならずもっとすっきりとしたはずであるし, Ruby を使用した甲斐があるというものである.
最後に, サンプル CGI の Step Up についてであるが, アクセスカウンタやメールフォームは, いまや, CGI の Hello World 的な位置付けであり, 各言語で基本文法を説明する上での重要なサンプルプログラムとなっている. 本書でもその役目どおり, 基本的な説明の役割を果たしている. そして, 順に, 検索エンジン, 掲示板, ショッピングと Ruby の機能だけではなく, ライブラリやデータベースを利用した応用 CGI へ Step Up していくのであるが, それぞれ, もう少しずつ突っ込んだところが欲しかった. 最近の個人 Web では, 検索エンジンや, 掲示板を自前で用意している方々も見受けられるので, そういう方々が参考になるような内容であって欲しい.
はっきりいって酷評だらけなのであるが, それは, Ruby による CGI 本として私が期待したものがあまりに大きかったからであるかもしれない. Ruby の参考図書としても, CGI の参考図書としてもなにか物足りなさを感じる. どのレベルの人をターゲットにしているのか見えていないのが, 全体の構成にあらわれている. もう少し, 校正が必要に感じる. 残念である.
今回, この Bookreview の機会を与えて頂いた, 株式会社 SCC さま, および, www.linux.or.jp Webmasters Bookreview 担当の方々には, 大変感謝しております. 本当にありがとうございました.
「Ruby, CGI プログラミングともに初心者」が主なターゲットであると言っていいでしょう.
そのため, Ruby, CGI 双方について基本的な部分から解説しているのですが, 分量的にやや「二兎を追うもの…」になっている感があります.
全 8 章 + 付録という構成で, 1, 2 章では Ruby や CGI の概説とインストール方法など, Ruby で CGI のプログラミングを行なうための下準備について説明しています.
3 章以降では, 各章 (6 章は eRuby についての話題) ごとに以下の具体的なプログラムの作成について解説しています.
具体的なプログラム作成を行なう各章は,
という流れになっています.
この 1 で説明される Ruby の機能が, 作成しようとしているプログラムとどのように関わってくるのかが見えないため, 単なる文法解説という印象を受けたこともあり, 1 と 2 は逆, すなわち, まず CGI プログラムとして満たすべき要件が提示され, それを Ruby ではどう実現するのかを示すという流れのほうがよいと思います.
また, 8 章のショッピングシステムはそれなりの規模のプログラムで, 記載されているソースの量も多くなっています. ここは, ソース全体は CD-ROM にまかせて, 各クラスの詳細やキモとなるメソッドの解説にもっとページを割いたほうが, 初心者にはわかりやすかったのではと思います.
本書では CGI クラスをフォームのクエリーを受けとるためだけに利用していますが, HTML を生成するメソッドも持っています.
ヒアドキュメントによる HTML 出力と比較した場合, 必ずしもそれらのメソッドを利用したほうがよいとは言えないとは思いますが, 補足なり付録なりで触れて欲しかったです.
先にも述べたように Ruby と CGI の 2 つの話題について解説しようとしているために, やや焦点がボケてしまったという印象を受けました. Ruby 自体の解説はばっさりと落して「Ruby で CGI すること」に絞り込めば, よりすっきりとした内容になったのではないでしょうか.
ということで, 「初心者向けとして扱っている話題はよいのだが, まとめかたに今一つの配慮が欲しかった」というのが私の本書に対する印象です.
原稿未着