最近、node.jsのスクレイピングプログラムの開発を行なっていたところ、xx.mjs
という見慣れないファイル形式のファイルを見つけた。
~mjs
は知らなかったので、その内容について少し調べていくとECMAScript moduleがどうこうという話みたいなのでこれを機に自分的理解を進めてみようと思い調べてみることに。
ECMAScriptとは?
ECMAScriptはJavaScriptの標準仕様のことでEcma Internationalによって標準が定められている。
EcmaScriptとJavaScriptは一緒ってこと?
→そういうことだった。
そもそもJavaScriptにはバージョンが存在しないということであり、バージョンというよりは、「EcmaScript 2015に準拠したJavaScript」のような感じ。
何年も使ってきて今更知る自分に驚いている。
Ecma Scriptのバージョン
ECMA Scriptは2015年版から「ECMAScript 2015」のように仕様の名称に発行年が付けられるようになったようで、現在は「ECMAScript 2018」が最新になるようだ。
天下のMDN web Docsにバージョン情報はWikipediaを参照するようにと書かれていたので現時点での最新の更新情報については下記のWiki記事を参照されると良いと思われる。
Ecma Intenational(エクマインターナショナル)
Ecma internatinalは情報通信システムの分野における国際的な標準化団体だそうで、1961年にヨーロッパにおける計算機システムを標準化するために設立されたとのこと。現在はスイスのジュネーヴにある。
↓サイト下部にSwitzerlandと書かれてますね
Google Mapで見てみた。
なんか京都っぽい街並みな気がした。
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も書いていく方が良さそうだということ。
既存の簡単なやつから書き換えていこうと思います。