13 年ぶりの JavaScript (2)
普通 JavaScript は Web フロントエンドを作るために使いますが、私のような人間はまず RISCV のエミュレータとかを書き始めてしまいます。そうなると Web ブラウザは使わず、nodejs で書いたコードを動かすことになります。
実際のところ、ブラウザではなく nodejs から入った方が HTML や CSS を思い出さなくて済むので、学習の負担も小さいです。
というわけで、今回は Node.js について。HTML や CSS については、また別の機会に。
Node.js
数年前 Node.js が流行し始め「サーバーサイド JavaScript」と言われていたのは、覚えていました。
というわけで「JavaScript の CUI プログラムを書きたかったら Node.js を使う」ということくらいは、最初からわかっていました。「Node.js はコマンドラインで JavaScript を実行するための処理系」というくらいの理解でした。
Deno
ところが、作業を始めてから Deno という処理系があることを知りました。
なんでも、Node.js の作者が Node.js を作った時の後悔をもとに再設計したものらしいです。日本語でもいくつかの解説記事があります。
JavaScript の実行エンジンは、Node.js と同じく V8 らしいです。
Node.js の構成
と、ここまで調べてふと思いました。「実行エンジンが同じなら、Node.js と Deno は何が違うの?」と。
当然、実行エンジン以外が違うのでしょうが…そもそも Node.js に含まれている実行エンジン以外のモノって何でしょうか?とどのつまり Node.js ってどういう構成なんでしょうか?
実は、この疑問に簡単に答えてくれる資料は見つかりませんでした。(私のググり力が低いだけかもしれませんが…)
公式サイトの “Node.js とは” を読んでも全然わからないんですよね。ただ、Node.js の定義で必ず書かれているのは、JavaScript 実行 “環境” です。環境なので、JavaScript を実行するのに必要なモノを色々集めたものってことみたいですね。
NPM
Node.js の構成要素で、最も存在感が大きいのが NPM (Node Package Manager) でしょう。
実際、手元の Windows PC の Node.js のインストールディレクトリを見ると node.exe の他には npm コマンドと npx コマンドくらいしかないですね。そして、npm コマンドと npx コマンドの中身を見てみましたが、これコマンドラインスクリプトになっていて、node.exe に JavaScript のソースファイルを与えて実行してますね。NPM クライアントの実装は JavaScript だったのか。
ちなみに Deno には npm は無いそうです。そのかわり、ソースファイル中に外部モジュールの URL を記述するみたいです。
V8
JavaScript エンジンの V8 は Node.js や Deno だけでなく、Google Chrome などのブラウザでも使われているのですね。
それで、ECMAScript の実行エンジン兼 WebAssembly の実行エンジンなんですね。ううむ、WebAssembly も存在くらいは知ってましたが、ここら辺の関係は全くわかっていませんでした。
まとめ
Node.js を使って作業していたら、Deno の存在を知りました。Node.js と Deno の違いを考えることで、周辺技術の理解が深まりました。
なんか、普段から JavaScript を書いている人には当たり前の内容になった気がしますが…私の場合「用語は知っているが、それが何なのか全くわかっていない」というものが数多くありました。気づかないうちにそういうものが増えていましたね。気を付けないと。