ぼちぼち日記

おそらくプロトコルネタを書いていることが多いんじゃないかと思います。

書評:Node.jsプログラミンガイド (Node本を書くのはホント大変なのよ)

著者の高橋登史朗さんより献本して頂きました。ありがとうございます。 今まで書評などしたことがないのですが、せっかく頂いたので感想など書きたいと思います。

実は私は、「Node.js入門」の執筆を始めてから和洋問わずNodeに関連する書籍や雑誌記事を読むのを一切止めていました。記述やサンプルコードなどが意識せず似てしまうことを避けるためでしたが、やっと晴れて「Node本断ち」明けです。ホント久しぶり。

1. この本の対象・範囲は?

著者の高橋さんは、JavaScript関連の著作を過去数多く出版されていらっしゃいます。そのためか文章が簡潔で非常にわかりやすいです。作文は昔から苦手で、なかなかこのようには書けないですが私も見習いたいです。

本書「Node.jsプログラミングガイド」の内容ですが、「はじめに」でこのように記載されています。

「本書では、なるべく幅広く多くの"リファレンス"と"サンプルコード"を作りながら Node.js全般に目配りすることを試みました。」

本書の多くは、Nodeのマニュアルをベースとして著者が整理したAPIリファレンスとサンプルコードで占められています。サーバ上で動作するのに必要な機能を数多く盛り込んだ Nodeは、通信やファイル操作の処理から圧縮・暗号化処理まで幅広い標準モジュールを持っています。カバーする範囲もNode APIに記載されている全てに渡り、非常に幅広いものです。

どんな本でもそうですが、執筆する前に「どの程度のレベルの読者に何をどこまで伝えるのか」を考えるのが執筆者の一番の悩みどころだと思います。特に、これから普及期を目指すNodeの技術では、色々なバックグラウンドを持つ読者が様々な目的でNode本を求めてくるでしょう。

全くのプログラミング初心者から、ある程度のクライアントJavaScriptやサーバサイドプログラミングの経験者まで、それぞれのスキル経験に応じたNode本を読みたいと求めているはずです。当然万人にフィットするような書籍は無理なので、「どう割り切り何を重要視するか」を決めなければなりません。

その点の苦労が、本書を読む対象者を記載している部分に伺えます。

  • ブラウザ上で動くJavaScriptを多少理解している
  • PHPPerlをはじめとするサーバーサイドプログラミングのいづれかに触れたことがある
  • セキュリティなどの基本的な理解を持っている
  • Nodeを学び始めたいと志に燃えている

以上4つを満たした方、となっています。

この条件に厳密に合致する読者が実際にどの程度存在するのか全く未知数ですが(笑)、Node本のレベルや内容を割りきるためには、「入門・初心者・初級者・中級者」といった一般的な抽象的なスキルレベルでの言葉では大きく誤解を招きかねないので、読者レベルをこのような具体的な複合条件に記述せざる得ないなと実感してます。

そして内容は、「プログラミングガイド」のタイトル通り、リファレンス+サンプルを中心にすることで「幅広く・多く」を実現しています。

2. 本書の構成と記述内容

では本書の個別の内容について書いていきます。

第1章 ガイド・基礎知識:
  • 基礎知識
    • Nodeの初歩的な利用例や用語の解説などやさしく書かれています。
  • 標準の組み込みモジュール等
    • 2章で扱う各モジュールの概要を1ページほどにまとめています。Nodeのマニュアルに初めて触れる方は、ここでそれぞれのモジュールがどういうものなのか概要を把握するといいでしょう。
  • ミニサンプル
    • いくつかのモジュールやツールを組み合わせた簡単なサンプルです。実際にNodeを動かしていろいろ試してみたいという人はこの節と第3章を合わせて様々なサンプルコードを写経して実行してみるといいでしょう。
第2章 リファレンス+基本サンプル

Nodeのマニュアル(0.9.8)をベースに表示レイアウトを整理し、著者の注釈やAPI動作のサンプルコードを加えています。開発バージョンの0.9系は現在もAPIの改訂が続けられており、本書では0.9.9の変更に関する注釈までは書かれています。

まずは、この書籍の主要部分であるこの章を、敢えて開発バージョンの0.9系をベースにして執筆された著者の勇気と行動力を称えたいと思います。

だいたい1年弱の期間で安定版のバージョンアップが行われるNodeでは、どのバージョンをベースにして書くのかが執筆者が一番悩むところです。残念ながら世の中にはどこまで何の最新のバージョンが記載されている・いないだけを重要視して書籍を評価される方もいらっしゃいます。執筆者は、時間をかけて内容を考えて執筆すればするほど最新バージョンとの差異は大きくなってしまうというジレンマに陥ります。

2013年1月末にリリースされた node-v0.9.8 をベースにしたNode本が、1か月後の2月末に出版され書店に並ぶのは驚くべきことです。おそらく0.9.8以前より日ごろのNodeのアップデートに追随して執筆内容の更新を行うという極めて根気のいる執筆作業を続けていたからこそできたことだと思います。

node-v0.9.9以降の更新について、サポートページにて内容のフォローされてますので、その内容と合わせれば次期安定版の node-v0.10 のリリース後の利用も問題ないのではないかと思います。実際、現状の開発版の 0.9系でもAPI後方互換に関しては十分考慮してAPI変更が行われていますので、以前書いたコードがバージョンアップ後に全く動作しなくなるといったような状況は今後かなり少なくなるものと思われます。

ただし0.9で新しく導入された機能は、 node-v0.10のリリースまで頻繁にその挙動や仕様が変わる可能性がありますので、その部分は注意が必要です。特にStream2関連の記述に関しては node-v0.10 リリース後に見直しが必要です。本文中に新しいAPIに関して0.9のどのリリースで導入されたのかということが記載されていますのでそこを目印にすると良いでしょう。

第3章 npmパッケージコレクション

npmでインストールできるパッケージの説明と簡単なサンプルコードと出力結果が掲載されています。MySQLやRedis等のデータベース利用から文字コード変換・圧縮ツール等など様々な利用例が短くて読みやすいサンプルコードで書かれています。

補足資料
  • インストール
  • その他の情報
  • データ資料

インストール方法やその他参考情報(HTTPステータスコードやシグナル等の一覧)が掲載されています。

3. こんな方におすすめ

Nodeのマニュアルは github 上で更新されており、APIの追加・変更・削除の Pull Request ベースでマニュアルを変更するようになるため、どうしても時間が経つと全体構成の統一感が薄れ、項目ごとの記述のバラつきが目立つようになります。Nodeを初めて触る方・経験が少ない方がマニュアルを頭から読んで、素直に理解できるというということは普通のレベルでは難しいでしょう。またマニュアルを見てもサンプルがないので使い方がわからないと困る人もいるでしょう。 そういう時に本書は文字通り「ガイド」として役に立つものだと思います。

以上長くなりましたが、Nodeのマニュアルを初めて読む、もしくは既にNodeのマニュアルを読んだことがあるがよくわからなかったので実際にサンプルコードを動かしながら理解したい、と考えてらっしゃる方には最適な本だと思います。

node-v0.10のリリースも予定より遅れていますが、もうすぐ間近です。今後より一層 Node本が充実してくるのが楽しみです。