CommonJSとは
CommonJSは、ウェブブラウザ環境外、主に
サーバーサイドにおける
JavaScriptの各種仕様を標準化することを目的としたプロジェクトです。
JavaScriptをブラウザだけでなく、
サーバーサイドやデスクトップアプリケーションなど、より広範な環境で使用できるようにすることを目指しました。
歴史
CommonJSプロジェクトは、元々
2009年1月に
MozillaのエンジニアであるKevin DangoorによってServerJSプロジェクトとして立ち上げられました。当初は
サーバーサイドの
JavaScript環境に特化した仕様を策定することを目指していましたが、より広範なAPIを対象とするようにプロジェクトのスコープが拡大しました。
2009年8月、プロジェクトは対象範囲の拡大を反映し、現在のCommonJSへと改名されました。仕様の策定と採用はオープンなプロセスで進められ、複数の実装が完了した後に正式な仕様として確定されるという手順が取られました。
CommonJSは、ECMAScriptの仕様を定めるEcma InternationalのTC39グループとは直接的な関係はありません。しかし、TC39のメンバーの一部はCommonJSプロジェクトにも参加しており、相互に影響を与えながら発展してきました。
CommonJSの仕様は、特に
Node.jsの初期の開発において大きな影響を与えました。
Node.jsはCommonJSのModule仕様を採用し、モジュールシステムの基盤として利用しました。これにより、
Node.jsでは
JavaScriptのコードをモジュールとして分割し、再利用することが容易になりました。
しかし、
2013年5月には、
Node.jsのパッケージマネージャーnpmの作者であるIsaac Z. Schlueterが、CommonJSは
Node.jsにとって時代遅れになりつつあり、
Node.jsの主要開発者はCommonJSから離れていると発言しました。これは、
Node.jsがCommonJSの仕様に縛られず、独自の進化を遂げようとしていることを示唆するものでした。
仕様
CommonJSで定められた仕様には、以下のようなものがあります。
Modules: JavaScriptのモジュールシステムに関する仕様。`require()`関数によるモジュールの読み込みや、`exports`オブジェクトによるモジュールの公開を定めています。この仕様は、後にECMAScript 6(ES2015)で標準化されました。
Promises: 非同期処理を扱うためのPromiseに関する仕様。これも後にECMAScript 6で標準化されています。
CommonJSは、
JavaScriptのエコシステムに大きな影響を与えたプロジェクトであり、その仕様は
Node.jsをはじめとする様々な
JavaScript環境で利用されています。ECMAScriptによる標準化が進んだことで、CommonJSの役割は変化しつつありますが、その貢献は
JavaScriptの歴史において重要な位置を占めています。
関連項目
Document Object Model (DOM)
外部リンク
CommonJS: JavaScript Standard Library 公式ウェブサイト(英語)
*
SlideShare - CommonJSの話