【いーえすもじゅーる】

ESモジュール とは?

最終更新:
💡 exportとimportで、コードを分けてつなぐ

JavaScript標準のモジュールの仕組み。exportで公開した関数や変数を、別のモジュールからimportして使い、コードを分けて管理できる。

📌 このページのポイント
関数を公開して、別のモジュールで使う greet.js function greet() { return "Hi"; } export { greet }; main.js import { greet } from "./greet.js"; greet(); 公開名を使う 静的な宣言はトップレベルに書く ブラウザ:script type="module" Node.js:.mjs や type="module" など
関数greetを公開し、別のモジュールから使う説明例。静的なimport・exportは関数の外に書く。実行環境に応じた読み込み方法や設定が必要。
ひよこ ひよこ
ESモジュールって何をするものなの?
ペンギン先生 ペンギン先生
JavaScriptのコードを部品に分けるための標準の仕組みだよ。あるモジュールでexportした関数や変数を、別のモジュールからimportして使えるんだ。
ひよこ ひよこ
importとexportは、どこに書けばいいの?
ペンギン先生 ペンギン先生
静的な宣言はモジュールのトップレベル、つまり関数やif文の中ではない場所に書くよ。ファイルの最初の行だけに限られるわけではない。必要になってから読み込むimport()は別の構文で、結果をPromiseとして受け取るんだ。
ひよこ ひよこ
ブラウザでもNode.jsでも使える?
ペンギン先生 ペンギン先生
どちらも対応しているよ。ブラウザではscriptにtype="module"を指定するなどして使い、配信するJavaScriptのMIME型や別オリジンへのアクセス条件にも注意する。言語の仕組みが共通でも、利用できる環境固有のAPIは異なるんだ。
ひよこ ひよこ
Node.jsでは、いつも.mjsという名前にするの?
ペンギン先生 ペンギン先生
.mjsやpackage.jsonのtype="module"で明示できるよ。Node.js 24では、指定のない一部の.jsも構文から判定される。ただし版や設定によるため、プロジェクトで形式を明示すると意図が伝わりやすいね。CommonJSもNode.jsで使われる別のモジュール形式だよ。
ひよこ ひよこ
使いたい関数だけimportすれば、通信量も必ず減る?
ペンギン先生 ペンギン先生
名前を指定するimportは、使う公開名を選ぶものだよ。それだけでファイルの一部だけを取得する保証はない。バンドラーが静的な構造を調べ、未使用のコードを取り除く最適化を行える場合があるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ESモジュール」って出てきたら「JavaScript標準の、ファイルを分けて部品を使う仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「ECMAScript Modules」 = ECMAScriptのモジュール
💬 ECMAScriptはJavaScriptの言語仕様の名前。ESMとも呼ばれるよ

参考資料

← 用語集にもどる