Node.jsとCommonJSについて
日経ソフトウェア8月号にJavaScriptの特集がありまして、そこでNode.jsが紹介されていました。
それを読んで、僕は以下のようなツイートしました。
日経ソフトウェア8月号のJavaScript特集のNode.jsの記事みたけど、これはちょっとひどいな。非公式のWindowsバイナリを使ってるせいでnpmの使い方おかしいし、「Node.jsのAPIはCommonJSに従った形で実装」とか嘘書いてあるし。 #nodejs_jp
2011-06-26 13:43:59 via web
さらに準拠していることになっている「Module 1.0」にしても、CommonJSで規定されているモジュールの作り方は
exports.hoge = function() {...};
なのですが、Node.jsではそれに加えて以下の2通りでもモジュールを作ることができます。
module.exports.hoge = function() {...}; this.hoge = function() {...};
よって、Node.jsにはCommonJSにない独自仕様が存在していると言えます。
また「Unit Testing 1.0」にしても、CommonJSで規定されているAssertとTestのモジュールのうち、Node.jsにあるのはAssertモジュールだけなので、実際には準拠しているとは言いがたい状態です。
結局、Node.jsがCommonJSの一部仕様に準拠していると主張しているのは(上のWikiがそうであるように)CommonJS側であって、Node.js側ではそのような主張は(昔はしていたこともありましたが)積極的にはしていません。公式サイトやAPIドキュメントにもそのような記述はないはずです(GithubのWikiには一部残ってるかもしれませんが)。
さらに先日Node.jsの作者のRyan DahlがRedditに降臨して「Node.jsの作者だけど何か質問ある?」スレを立てたときに、「CommonJSはもうオワコンだから、今後NodeのAPI変えるときにはCommonJSのことなんて一切気にしないよ」宣言がありました。
以上のように、Node.jsとしてはすでにCommonJSのことは眼中にないといった感じです。なので、今後Node.jsをCommonJSと絡めて論ずるときには十分注意を払った上で行った方がよろしいと思います。
*1:「嘘」っていうのはちょっときつい表現だったかもしれませんね。すみません。140字ギリギリだったので(言い訳)。