# common.js と ECMAScript の違いについて ## common.js と ECMAScript の違い ・CommonJSで書かれたJSは、ChromeやSafariなどのブラウザで動かない。 逆にECMAScriptでは動く。 ・ECMAScriptがモジュールシステム(ESM)以外の文法も定めている規格なのに対して、CommonJSはブラウザ外でのモジュールシステムに焦点を当てている規格 ### コードで見る両者の決定的な違い CommonJS ChromeやSafariなどのブラウザで動かない、主ににNode.jsなどのサーバサイドで使用される。 ```code require = CommonJS ``` ECMAScript ChromeやSafariなどのブラウザで動く、主にフロントサイド(Webブラウザ)で使用される ```code import = ECMAScript ``` ## common.js(CommonJSプロジェクト)とは JavaScriptでサーバサイドやコマンドラインツール、GUIツールなど様々なアプリを開発するための標準的なAPIの仕様。 2009年ごろ、JavaScriptでサーバサイドも作りたいという人が現れたが、JavaScriptはブラウザ上で動かすために生まれた言語のため、 「モジュール定義や読み込みもない、標準入出力もない、File I/Oもない、標準的に欲しいものが色々ない。」 という状況の中で、Node.jsのようなサーバサイドでJavaScriptが動く環境が多く生まれた。「それぞれで、勝手にAPIを作るのではなく、標準的なAPIの仕様を決めて、それに沿った実装にしよう、そうすれば、色んなサーバサイドJavaScript環境で動くだろう。」と言って始まったのがCommonJS。 当初ServerJSというサーバサイドのAPI仕様だけを定めていまた、それ以外もこれでいいのでは?ということで、CommonJSに改名した。 ## ECMAScriptとは もともとJavaScriptはNetscape社のブラウザで使われる言語として誕生したので、他のブラウザは想定されておらず各ブラウザはJavaScriptを独自に拡張していた。そのため、JavaScriptはまったく標準化がされていない言語だった。 これではいろいろ問題があるとして、Netscape社は国際標準化団体のECMAに依頼してJavaScriptのコア部分を標準化した。これがECMAScript。 つまり、JavaScriptはECMAscriptに準拠した言語であると言える。 ただし、注意点としてECMAScriptは各ブラウザの独自拡張を限定的に認めているので、ブラウザごとに若干仕様が異なる部分もまだある。