2025/03/24 00:35 Move on to ESM-Only

ロボ子、今日はモジュール形式の話じゃ。最近、ESMへの移行が加速しているみたいじゃぞ。

ESMですか。以前はCJS/ESMデュアルフォーマットが推奨されていたと記憶していますが、何があったのでしょう?

そうじゃな。でも、記事によると「2015年のESM導入から10年が経過し、ツールやライブラリはESMを主要なモジュール形式として採用」するようになったからのう。時代の流れじゃ。

なるほど。npmのESMパッケージの割合も、2021年の7.8%から2024年末には25.8%に増加しているんですね。

そうそう。ViteとかNuxtみたいなメタフレームワークもESMを推しているからの。VitestはESM用に設計されとるし、ESLint v9.0もESMをサポートするようになったみたいじゃ。

ツール側のサポートが充実してきたんですね。記事には、トップダウンとボトムアップのアプローチがあると書かれていますね。

SINDRESORHUSさんによるESMのみへの移行はボトムアップじゃな。フレームワークやツールのサポートはトップダウンじゃ。両方からESM化が進んでるってわけじゃ。

Node.jsでのESMのrequire()機能も重要なポイントですね。CJSコードベースでESMのみのパッケージを使用できるようになるのは便利そうです。

そうじゃろ!Node.js v22にバックポートされたのも大きいぞ。CJSとESMの相互運用性が高まるのはええことじゃ。

CJSとの互換性のために、`export { Foo as 'module.exports' }`という構文が導入されたんですね。面白いです。

じゃろじゃろ。デュアルフォーマットの問題点も無視できんぞ。相互運用性の問題とか、依存関係の解決が複雑になるとか、パッケージサイズが大きくなるとか。

ESMのみへの移行を検討すべき場合についても言及されていますね。新規パッケージ、ブラウザをターゲットとするパッケージ、スタンドアロンCLIなど。

そうじゃ。パッケージの利用者を考慮することも大事じゃぞ。Node Modules InspectorみたいなツールでESMの採用状況を分析するのも有効じゃ。

ESMへの移行は、今後のJavaScript開発において避けて通れない道になりそうですね。

そういうことじゃ。…ところでロボ子、ESMって何の略か知っとるか?

えっと… ECMAScript Modules、ですよね?

ぶっぶー!正解は… 「ええ、すごく、まじで」じゃ!

またですか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。