JavaScriptのCommonJSとES Modulesの違いを理解しよう!モジュール管理の基本を初心者向けに徹底解説
生徒
「JavaScriptのCommonJSとES Modulesの違いって何ですか?モジュールって言われてもよくわかりません。」
先生
「モジュールとは、プログラムを部品のように分ける仕組みのことです。JavaScriptではCommonJSとES Modulesという二つのモジュール方式があります。」
生徒
「どうして二つもあるんですか?」
先生
「歴史的な理由があります。Node.jsで使われてきたのがCommonJSで、後から標準仕様として登場したのがES Modulesです。順番に違いを見ていきましょう。」
1. JavaScriptのモジュールとは何か
JavaScriptのモジュールとは、プログラムを小さな部品に分けて管理する仕組みのことです。大きなプログラムを一つのファイルに全部書くと、読みにくくなり、修正も難しくなります。そこで、機能ごとにファイルを分けて、それぞれを読み込んで使う方法がモジュールです。
例えば、計算をするファイル、文字を表示するファイル、データを扱うファイルなどに分けることで、整理されたプログラムになります。これがJavaScriptのモジュール管理の基本です。
CommonJSとES Modulesは、そのモジュールを読み込む方法や書き方が違うだけで、目的は同じです。どちらもJavaScriptのコードを整理するための大切な仕組みです。
2. CommonJSとは何か
CommonJSは、主にNode.jsで使われてきたモジュール方式です。サーバー側のJavaScriptで広く使われています。特徴はrequireとmodule.exportsという書き方を使うことです。
まずは簡単な例を見てみましょう。
math.jsというファイルを作ります。
function add(a, b) {
return a + b;
}
module.exports = add;
次に、別のファイルで読み込みます。
const add = require("./math");
const result = add(3, 5);
console.log(result);
実行結果は次のようになります。
8
requireは他のファイルを読み込む命令です。module.exportsは外部に公開する部品を指定するための書き方です。CommonJSはシンプルでわかりやすいのが特徴です。
3. ES Modulesとは何か
ES Modulesは、JavaScriptの標準仕様として追加されたモジュール方式です。ブラウザでもNode.jsでも使うことができます。importとexportという書き方を使います。
先ほどと同じ内容をES Modulesで書いてみましょう。
math.js
export function add(a, b) {
return a + b;
}
読み込む側
import { add } from "./math.js";
const result = add(10, 2);
console.log(result);
実行結果
12
exportは外に公開するという意味です。importは取り込むという意味です。英語の意味そのままなので覚えやすいです。これがES Modulesの基本的な使い方です。
4. 書き方の大きな違い
CommonJSとES Modulesの大きな違いは、書き方と読み込みのタイミングです。CommonJSは実行時に読み込みます。一方でES Modulesは事前に読み込みます。これを静的読み込みと呼びます。
また、CommonJSは基本的に一つの値をmodule.exportsでまとめて出しますが、ES Modulesは複数の値をexportで個別に出すことができます。
// ES Modulesで複数を公開
export const name = "太郎";
export const age = 20;
import { name, age } from "./user.js";
console.log(name, age);
太郎 20
このように、ES Modulesは部品を細かく管理できるという特徴があります。大規模な開発ではとても便利です。
5. Node.jsでの使い分け
Node.jsでは長い間CommonJSが使われてきました。しかし現在ではES Modulesも使えるようになっています。package.jsonでtypeをmoduleに設定することで、ES Modulesが利用できます。
新しいプロジェクトではES Modulesが推奨されることが増えています。ただし、古いライブラリや既存のコードではCommonJSが使われている場合もあります。
そのため、JavaScript初心者でもCommonJSとES Modulesの両方を理解しておくことが大切です。特にNode.js開発ではrequireとimportの違いを知っていると、エラーの原因がわかりやすくなります。
6. どちらを使えばよいのか
これからJavaScriptを学ぶ初心者の方には、まずES Modulesを覚えることをおすすめします。理由は、JavaScriptの公式な標準仕様だからです。ブラウザでも使えるため、将来的にも安心です。
しかし、CommonJSも今なお多くの現場で使われています。特にNode.jsの古いプロジェクトでは必須の知識です。
JavaScriptのCommonJSとES Modulesの違いを理解することで、モジュールエラーの原因を見つけやすくなり、コードの整理方法も身につきます。モジュール管理はJavaScript開発の基礎であり、初心者から上級者まで必須の知識です。
プログラムを部品に分けて整理するという考え方を理解すれば、JavaScriptだけでなく他のプログラミング言語にも応用できます。これがモジュールの本当の価値です。
まとめ
今回はJavaScriptのCommonJSとES Modulesの違いについて、モジュールとは何かという基本から丁寧に確認してきました。JavaScriptにおけるモジュール管理は、大きなプログラムを整理し、再利用しやすくし、保守性を高めるための重要な仕組みです。CommonJSは主にNode.js環境で長く使われてきたモジュール方式であり、requireとmodule.exportsを使って部品を読み込みます。一方で、ES ModulesはJavaScriptの標準仕様として定められたモジュール方式で、importとexportを使ってファイル間で機能を共有します。
JavaScript初心者にとって大切なのは、CommonJSとES Modulesの書き方の違いだけでなく、モジュール管理の考え方そのものを理解することです。なぜファイルを分けるのか、なぜexportやmodule.exportsで公開するのか、なぜimportやrequireで読み込むのかを理解することで、JavaScriptの設計力が身につきます。特にNode.js開発ではCommonJSとES Modulesが混在するケースもあり、エラーの原因がモジュール方式の違いにあることも少なくありません。
ここで、CommonJSとES Modulesの違いを整理するために、簡単なサンプルプログラムをもう一度確認しましょう。まずはCommonJS形式です。
function greet(name) {
return "こんにちは、" + name + "さん";
}
module.exports = greet;
const greet = require("./greet");
console.log(greet("花子"));
こんにちは、花子さん
次に、ES Modules形式で書き直してみます。JavaScriptの標準仕様であるES Modulesでは、exportとimportを使います。
export function greet(name) {
return "こんにちは、" + name + "さん";
}
import { greet } from "./greet.js";
console.log(greet("太郎"));
こんにちは、太郎さん
このように、JavaScriptのCommonJSとES Modulesの違いは、主に書き方と読み込みの仕組みにあります。CommonJSは実行時に読み込む仕組みで、Node.jsで広く利用されてきました。ES Modulesは静的に解析される仕組みで、ブラウザとNode.jsの両方で利用できる標準的なモジュール方式です。現在のJavaScript開発ではES Modulesが推奨される場面が増えていますが、CommonJSの知識も依然として重要です。
JavaScript初心者の方は、まずES Modulesのimportとexportの基本をしっかり理解し、その上でCommonJSのrequireとmodule.exportsの書き方を学ぶとスムーズです。モジュールを理解することは、コードの再利用性を高め、保守しやすい設計を実現する第一歩です。Node.jsやフロントエンド開発においても、モジュール管理の理解は必須です。
JavaScriptのCommonJSとES Modulesの違いを正しく理解しておけば、モジュールエラーや読み込みエラーが発生したときにも落ち着いて原因を分析できます。モジュールとは単なる書き方の違いではなく、プログラムを部品として設計するための考え方そのものです。これからJavaScriptを学習する方も、すでにNode.jsで開発している方も、モジュール管理の基本をしっかり身につけていきましょう。
生徒
JavaScriptのCommonJSとES Modulesの違いがやっと整理できました。requireとimportは似ているけれど、仕組みが違うのですね。
先生
そうですね。CommonJSはNode.jsで使われてきたモジュール方式で、module.exportsとrequireを使います。ES ModulesはJavaScriptの標準仕様で、exportとimportを使います。
生徒
モジュールはコードを部品に分ける考え方だと理解できました。大きなプログラムでも整理しやすくなりますね。
先生
その通りです。JavaScriptのモジュール管理を理解することで、再利用性や保守性が高まります。Node.js開発でもフロントエンド開発でも重要な基礎知識です。
生徒
これからはES Modulesを中心に学びつつ、CommonJSも読めるようにしていきます。JavaScriptの理解が一段と深まりました。
先生
とても良い姿勢です。JavaScriptのCommonJSとES Modulesの違いを理解できたことは、モジュール管理の第一歩です。これからも基礎を大切に学習を続けていきましょう。