JavaScriptは、長い歴史を持ちながらも常に進化を続けている。最新動向を踏まえて筆者の個人的な見解を交えつつ、Q&A形式でJavaScriptにまつわる素朴な疑問に答える。
違う部分はあるのですか?
A3:JavaScriptは言語であり、Node.jsはその実行環境の一つです。Node.jsには独自の機能があります。
JavaScriptはWebブラウザで動作するプログラミング言語です。ということは、Webブラウザは、JavaScriptを動かすための仕組みを内部に備えています。この仕組みは「JavaScriptエンジン」と呼ばれます。
現在使われている主なJavaScriptエンジンは次の3つです。
- V8
- SpiderMonkey
- JavaScriptCore
V8はChromeやEdgeが搭載するJavaScriptエンジンです。また、SpiderMonkeyはFirefoxが、JavaScriptCoreはSafariが搭載するJavaScriptエンジンです。
Node.jsというのは、このV8をWebブラウザから切り離して、OS上で単独動作するようにしたものです(図2)。つまり、Node.jsがあればWebブラウザを使わなくてもJavaScriptのソースコードを実行できます。
Node.jsの利用例としては、サーバーサイドが挙げられます。WebサーバーでNode.jsを動かせば、サーバーサイドのプログラムをPHPやJavaではなく、JavaScriptで開発できます。クライアントサイドのWebブラウザで動かすプログラムはJavaScriptで作成しますから、サーバーサイドでNode.jsを使うと、同じ言語(JavaScript)でサーバーサイドとクライアントサイドの両方を開発できて効率がよいというメリットがあります。
また、クロスプラットフォームのデスクトップアプリを開発できる技術である「Electron」も内部でNode.jsを利用しています。Electronを使えば、JavaScript(+HTML+CSS)で、Windows、macOS、Linuxで動作するデスクトップアプリを作成できます。
Node.js独自の機能がある
Node.jsには、WebブラウザのV8にはない独自の機能があります。例えば、ファイルの入出力機能を備えています。Node.jsはOS上で直接動作するので、OS上のファイルを読み書きできないと、多くの場面で困るからです。
ファイルの入出力は、Node.jsが標準で備える「fs」というモジュールを使って行います。ファイルを読み込むコードであれば、次のようになります。
ちなみに、最近はNode.jsと同じようにV8を使うJavaScriptの実行環境の「Deno」も注目を集めています。