讃岐小僧のEngineering×Techメモ

プログラミングや、趣味の野球、資産運用について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

mjsファイルとは? -CommonJSとECMAScriptの違いについてメモ-

f:id:keisuke8925gdk:20220315105604p:plain

最近、node.jsのスクレイピングプログラムの開発を行なっていたところ、 xx.mjsという見慣れないファイル形式のファイルを見つけた。

~mjsは知らなかったので、その内容について少し調べていくとECMAScript moduleがどうこうという話みたいなのでこれを機に自分的理解を進めてみようと思い調べてみることに。

ECMAScriptとは?

ECMAScriptJavaScriptの標準仕様のことでEcma Internationalによって標準が定められている。

EcmaScriptJavaScriptは一緒ってこと?

→そういうことだった。

そもそもJavaScriptにはバージョンが存在しないということであり、バージョンというよりは、「EcmaScript 2015に準拠したJavaScript」のような感じ。

何年も使ってきて今更知る自分に驚いている。

Ecma Scriptのバージョン

ECMA Scriptは2015年版から「ECMAScript 2015」のように仕様の名称に発行年が付けられるようになったようで、現在は「ECMAScript 2018」が最新になるようだ。

天下のMDN web Docsにバージョン情報はWikipediaを参照するようにと書かれていたので現時点での最新の更新情報については下記のWiki記事を参照されると良いと思われる。

ja.wikipedia.org

developer.mozilla.org

Ecma Intenational(エクマインターナショナル)

Ecma internatinalは情報通信システムの分野における国際的な標準化団体だそうで、1961年にヨーロッパにおける計算機システムを標準化するために設立されたとのこと。現在はスイスのジュネーヴにある。

↓サイト下部にSwitzerlandと書かれてますね

Ecma international 本当にスイスにあったって話
Ecma international 本当にスイスにあったって話

Google Mapで見てみた。

なんか京都っぽい街並みな気がした。

Ecma intenationalが入居しているビル

www.ecma-international.org

mjsファイルとは?

.mjsファイルとは簡単にいうと、Ecma Scriptに準拠したJavaScriptファイルだよとファイルフォーマットで明示されたもの。

node.jsでデフォルトで採用しているのはCommonJS

commonJSは下記のような構文を利用して書くJavaScript

node.jsのプロジェクト内でxx.jsという名前のファイルだとcommonJSの構文で書かれたプログラムとnodeは期待して動く。

//index.js
const helloWorld = require('./hello-world.js')

//hello-world.js
module.exports = function helloWorld() {
    console.log("Hello World");
    return;
};

確かに、普通にxx.jsのようなファイル形式でnode.jsを書く場合はこのように記載するケースが現状ではほとんどでした。

EcmaScriptをnode.jsで利用する場合

// index.mjs
import { helloWorld } from './hello-world.mjs';

// hello-world.mjs
function helloWorld() {
  console.log("Hello World"")
  return;
}

export { helloWorld };

このようにして利用する。

今思えば、node.jsではこのように書いていなかったが、Angular, Vue、NestJS(そういえばTypeScriptだけどES2015準拠で書いていたな。)などなどではそもそもEcmaで書いていた。

なんかスッキリした。

最後に

EcmaScript等については、ビルドの話や読み込み方の話や、そもそもの背景歴史的な記述をたくさん目にした。

このブログ内では細かい歴史には踏み込まないが、一つ感じたのが、今後はEcmaScript形式でnode.jsも書いていく方が良さそうだということ。

既存の簡単なやつから書き換えていこうと思います。