ぼちぼち日記

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

Node API のクラス図を公開しました。

東京Node学園祭2012 アドベントカレンダー 13日目の記事です。

はじめに、

自分が Node.js を一番最初に使い始めた頃、Hello World のサンプルコードを動かしたのはいいけど、その後にNodeマニュアルを読んで勉強し始めたら内容が全然理解できず、挫折しちゃった思い出があります。

人のサンプルコードやモジュールの中身とかもいろいろ見てみたんですが、

  • .on() ってなんのオブジェクトにもつけていいの?
  • req と res とかどっから出てきたの? どう使うの?
  • イベントってどれだけ種類があって、どういう時に発生するの?

なんて???がたくさんついて前に進みません。マニュアルを見てもなかなか探し出せないし、読んでもちゃんと書いてあることが理解できません。
一度マニュアルで調べたところもすぐ忘れる。何度も同じところを調べているのに全然ものになっていない。あぁこりゃダメだなと半ばあきらめモードでした。

Node APIのクラス図の公開

そんな時にふと API のそれぞれの関係がどうなっているかちょっと調べてみよう、と思って書き始めたのが今回公開したNode API のクラス図です。

https://github.com/shigeki/node-class-diagram

厳密にUMLの記法に従ったものではないですが、Nodeのソース内のネイティブモジュール内で定義されたクラス内で util.inherits() されている継承関係を表したものです。(注:JavaScriptでは仕様で厳密にクラスの定義がされていないので、正確にはコンストラクター関数になります。)
そこにマニュアルに記載の範囲でプロパティ・メソッド・イベント名などを書き加えました。
一部のモジュール(cluster や zlib 系など)全部は書ききれていませんが、重要なものは(というかNode本で書いた範囲で)掲載しています。

これを見ると events.EventEmitter を頂点として Node API 全体がどういう構成で作られているのかが一目でわかりますし、 Stream がなぜ重要なのかというのもこのクラス図を見ると視覚的に明白ですよね。

これを机の壁に貼っておいて、Nodeのマニュアルを参照したり人のモジュールの内部を読んだりする時にクラス図と照らし合わせたりしているとなんとなく Node のマニュアルに書いてあることがわかるようになりました。なによりマニュアルの項目が探しやすくなりました。

いわゆる「Node APIの土地勘」みたいなものを持てるようになったということでしょうか。

同じような悩みを持っている方がいれば是非活用していただきたいと思います。

学園祭の講演では、

こういったことをまとめて東京Node学園祭では、

「Nodeコアの歩き方 〜Nodeの開発に参加しよう〜」

という発表をさせていただく予定です。
まだ何も準備できていませんが、Nodeコアのここが知りたい・聞きたいということがあれば #nodefest のハッシュタグでつぶやいていただければと思います。

ステマ

こっからステマですw

実はNode入門ではそれぞれのクラスで図を掲載して説明を加えています。しかし紙面の大きさ上、この全体図を載せることはしませんでした。本を購入された方は、この全体図も一緒に参照し読んでいただくとより理解が深まると思います。
仕組みを解説し、マニュアルの少し裏側を見せることで、表面的でないNodeの理解が向上してもらうことを目指しました。

サーバサイドJavaScript Node.js入門

サーバサイドJavaScript Node.js入門

本を書いてみて本当に実感したのですが、やっぱり実際書くのは大変で、説明する文章力が全く足りていないことです。いろいろ理解しづらい部分はあるかと思いますが、皆さんからのフィードバックを受けより良い本にできたらと願っています。