(株)ピアソン・エデュケーション 様のご厚意により,
書籍 "Perl データマンジング" を
ブックレビューコーナー にご献本いただきました.
この本のレビューをして頂くべく,
Linux Users ML
や本サイトにおいて
公募
を行い,
これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.
ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)
ピアソン・エデュケーション 様および レビューアの皆様のご厚意に感謝いたします.
なお, 以下のレビューは初版を対象としています.
私は C 言語でプログラミングすることが殆どで CGI や即席のデータ処理ぐらいでしか, Perl を利用した事がありません. 他の言語のプログラマの視点で書いている事をお断りしておきます.
本書は前書きにも書かれていますが, 最低, 入門書程度の Perl の知識を持っていないと読み進めるのが辛いです. しかし, 他の言語でプログラミングの経験があれば, 付録 B の知識で事足りるのでそれほど大きな問題ではないでしょう.
どのくらいの読者に受けるか分かりませんが, 各部の扉にショートストーリーがあります. プログラマを英雄, データマンジングを怪物と喩えた有りがちなストーリーかも知れませんが, 昔, RPG が好きだった私にはちょうど良い仕掛けでした.
また, データを視覚化するなどアルゴリズムの理解には欠かせない工夫もきちんと行われていました.
欲を言えば, ソースとその説明の連携にもう一工夫欲しいところです.
題名が壮大な割に単なるサンプルソース集に終わっている本が多い中, 比較的, 踏み込んだ内容になっています. データマンジングを体系立てて説明することに成功しており, その考え方は Perl 以外のプログラマにも参考になると思います.
また, 枝葉のアルゴリズムにとらわれず, CPAN のモジュールを積極的に利用している点が評価できると思います. 車輪の再発明をせずにモジュールを再利用する事の利点も書かれていて多くのプログラマに参考になるでしょう.
残念なのは, コードに Perl 特有の省略形が多くなっていることです. 紙面の都合上か Perl プログラマの性かわかりませんが, もう少し可読性の高いコードを利用した方がよいのではないかと思います. コードのコンパクト化は読者に任せればいいでしょう.
データフォーマットを大きく, 構造化されていないデータ, レコード指向データ, 固定長データとバイナリデータ, 複雑なデータフォーマット (主に木構造のデータ) の 4 種類に分けてその利用方法を体系付けています. (目次参照)
すべてのデータ形式を紹介するのは不可能でしょうが, これだけで抽象的なモデルケースとしては十分, 網羅されており, 汎用性も高いと思います.
また, 既存のパーサにとどまらず, 独自のパーサの構築について述べられているのは, 興味深いです.
データマンジングは突き詰めれば, データの移植・再利用であると思います. また, これらの知識が有れば, 新しく作るソフトウェアのデータフォーマットの設計に役立つと思います.
データの移植・再利用・設計は何も Perl だけの問題ではないので他の言語のプログラマにも本書を読む価値があります. ひょっとすると, CGI 以外の分野に Perl を利用する事の価値を見出せるかもしれません.
「データマンジング」とは, 本書の表現を引用して説明すると, 「あるフォーマットのデータを受け取り, その他のフォーマットに変換することすべて」ということらしい. このようなデータの変換は, コンピュータシステムの至るところで当然のように行われていることであり, 日頃の私の仕事においても, データ変換を要する作業に遭遇する機会は多い. そこで「本書は, 日々の業務を効率よく進めるための一助となれるか」 という観点でレビュー記事を執筆することにした.
結論からいうと, 日々の業務はもちろん, 趣味の分野でも役立つ, ぜひ持ち歩きたい一冊である, と私は考えている.
本書の良い点を以下に列挙した. 上述の結論に至った主な理由である.
1 つだけ気になった点を挙げておく.
繰り返しになるが, 本書のウリは実用的なサンプルコードである. 本書のサンプルコードをベースに, 各自の要望に応じたツールを作成して, 作業を効率的に進めることができる. 手作業で行うには面倒で退屈な作業であっても, ツールを作りながらであれば楽しく進められるだろう. 楽しみながら業務が進む/勉強できるので, この点からも, 初級者におすすめできる. また, 効率的なサンプルコードは, 中級を自認する方にも大いに参考になるだろう. データ変換に携わる方は, ぜひ本書を読んで, Perl によるデータマンジングを楽しんで頂きたい.
最後に, 今回レビューの機会を与えてくださった皆様, 執筆にあたりご助力頂いた皆様に感謝する.
本書で取扱っている「マンジング」というのは, データを加工し, 別フォーマットにして出力することを指すそうだ. これは広義に取れば, プログラムと呼ばれるものが基本的に行っていることとなり, すなわち特定業務というよりは, プログラマーとしての基本スキルに属するものといっていいだろう.
より具体的にマンジングというのがどのような操作を指しているのか, それになぜ Perl が向いているのかが, まず書かれている.
続いて基礎編ということで, マンジングの基本志向, Perl イディオムなどが紹介される. 基本概念から, 作業の際によくつかわれる基礎テクニックへと順に進むため, 素直に読みやすい. Perl イディオムは特に便利な小技を教えてくれ, 有用である.
一方で, パターンマッチングはマッチング演算子の説明から正規表現まで一通り解説される. 本書が Perl を扱ったことのある人向けで, それまでのソース例にもリファレンスを多用した少々複雑なデータ定義をしていたことに比べると, なぜここまで詳細な解説があるのか若干の疑問が残る. この章のみ, 本書のなかで位置付けがわかりにくく感じた. 解説そのものは平易で理解しやすい.
生テキスト, 行指向, CSV, 固定長, バイナリと, 様々なケースでのデータ変換について解説されている. これらの章を通じて, どのようにデータを取得し, 変換をかければいいかという概念はつかめるだろう.
各フォーマットからのデータ抽出については, 可能な限り CPAN のモジュールを利用して説明をしている. すでに存在しているコードの再利用を促すという意味で, 無駄もなくいい方向だろう.
また, 変換の際によく問題となる数値や日付のフォーマット, それに文字コードについてもわかりやすく解説されている (文字コードは日本語にフォーカスされているわけではない. そのため, 説明不足気味に感じるかもしれない).
最初からこの章まで読めば, 基本的な「データマンジング」については困ることがなくなるだろう.
HTML, XML について, いくつかの CPAN モジュールを用いて解析する方法を説明している. 最後に, 一歩進んで Parse::RecDescent というモジュールを用いて独自パーサを設定する方法について解説している.
基本的にはモジュールの使い方の簡単な説明に終始しているが, HTML でも XML でもデータを読めるようになるわけで, 本書のターゲット層からすると十分な説明といえるだろう.
惜しむらくは, XML の DTD を利用したパージングについては触れられてなかったことだ. 構造の複雑さを考えれば致し方ないが, 個人的には少々残念だった.
付録 A のモジュールリファレンスは, 一部とは言え, 書籍で日本語訳されたものが増えたということを喜びたい. 付録 B の Essential Perl も概観が目的とはいえ, Perl の基礎について非常にわかりやすく, かつコンパクトに説明されているところがよい. 自分の Perl スキルに自信がない人は, この付録 B から先に目を通すと, 本書の理解もしやすくなるだろう.
本書の取扱う範囲が「マンジング」という, 元々広範に渡るものではあるが, 使われるであろう多くのケースについて網羅できているのではないか. 具体的なデータパターンとソースコードも豊富で, なによりほとんどのソースが短く, 理解に一役買っている. 翻訳も丁寧で, 章の構成もわかりやすい.
価格は少々高いが, Perl 使いの初心者〜中級者には文句なく薦められる好著と言える. また, プログラムの初心者にも, データの扱い方を学ぶために読ませていい一冊だろう.
余談だが, 近年の新人は意外とデータ構造については考えたことがなかったりするため, 彼らにもぜひ読ませたい.
本書は, Perl 本来の得意分野である, データマンジング (浅学にも本書で初めて見た用語でしたが…) に, 絞って解説しています. WEB プログラミングに偏らず, 本来の Perl の強みであるテキスト加工を中心に, 非常にわかりやすい文体で説明された良書だと思います.
読みやすく面白い文書ですが, 基礎的な Perl の文法の解説は省かれています. またオブジェクト指向プログラミングなど, 煩雑になりがちな概念についても, ポインタを示すのみにおさえ, 中級者を強く意識した内容です.
余談ですが, ポインタとして示される書籍や URL が, 非常に的を射たものである点に, 大変好感が持てます. 初心者を卒業したい人への, よき指針になっていると思います.
データマンジングの概念から, 基礎となる構文上のテクニックまで, 簡潔に説明されています. テクニックそのものは特にオリジナリティの高いものではないので, Perl に慣れている人は, 読み飛ばしても良いかもしれません.
各種のデータフォーマット毎に, 効率良くデータを抽出, 加工するテクニックが記述されていますので, 自分が取り扱うデータの種類に応じて, リファレンス的に読むのに適しています. 古いホストが吐き出す, みっともない固定長データに苦しんでいる人にお勧めです.
但し, バイナリデータの取り扱いについては, 例示的で, 踏み込み不足と感じました. 本書のスコープ外として削ってしまう方が良いのではないでしょうか.
かなり複雑な構造を持つ, HTML や XML を, 既存のモジュールを活用した簡潔な解法で解析しており, 大変参考になります. 第三部に限らず, 本書全体を通じて多くの役立つモジュールが紹介され, Perl らしい「不精さ」が強調されています.
簡単なまとめ.
英語嫌いな私には, 「モジュールリファレンス」は, ありがたいオマケでした. また, 「Essential Perl」として Perl の基礎的な文法が収録されており, 初心者が本書を理解する手助けになると思います.
Perl を, 日常的なデータ処理に使っている人にとって, 貴重な記述を含む良書といえます. 鉛筆を削ったり, 竹とんぼを作ったりしたように, Perl をデータ処理の「肥後の守」として, 自由自在にあやつりたいものです.