この記事は
JavaScriptの実行環境に関してわかってるようで何もわかってなかったので基本的なことを整理してまとめたメモ。
JavaScriptの実行環境
JavaScriptには大きく分けて二つの実行環境がある。
- Webブラウザ
- OS上で実行されるランタイム環境
Webブラウザ
Webブラウザは、クライアントサイドでJavaScriptコードを実行するための環境。
JavaScriptで書かれたコードを解析・実行するエンジンが搭載されていれば(基本的に搭載されている)WebブラウザでJavaScriptを実行することができる。ブラウザ上で動作するものなので、後述のランタイム環境で実行されるもののようにOSの機能にはアクセスできない。
主なJavaScriptエンジン
Webブラウザ | JavaScriptエンジン | ひとこと |
---|---|---|
Google Chrome | V8(Google) | Googleがメンテナンスを行なっているOSSであるChromiumをベースに開発 |
Microsoft Edge | V8(Google) <- Chakra(Microsoft) | 2020年にV8に変更された |
Internet Explorer | Chakra(Microsoft) | Internet Explorerのサポートは2022年6月15日に終了 |
Firefox | Spider Monkey(Mozilla) | 世界初のJavaScriptエンジン |
Safari | JavaScriptCore(Apple) | Safari向け、そのほか WebKitベースのブラウザでも使用されている |
OS上で実行されるランタイム環境:
ランタイム環境は、JavaScriptをサーバーサイドやスタンドアロンのアプリケーションとして実行するためのもの。
ランタイム環境というのが具体的に何をしているかというと、JavaScriptを実行する時にJavaScriptエンジンを使って直接機械語に変換し、OS上で実行できる形にする。ブラウザ上の機能(DOM)などは使用できない。
主なJavaScriptランタイム環境
ランタイム環境 | JavaScriptエンジン | ひとこと |
---|---|---|
Node.js | V8 | サーバーサイドJavaScriptのデファクト標準。 |
Deno | V8 | Rustで開発され、セキュリティとTypeScriptをネイティブサポート。 |
Bun | JavaScriptCore | エンジンにJSC、開発にZigが採用されており高速に動作。実行環境としてのみでなく、パッケージ管理などさまざまな機能がある |
例えば一番シンプルにNode.js動かそうとするとこのように動作する。
hello.js
console.log('hello world!');
🔽
node hello.js // hello world!
JavaScriptはどうしてバイナリファイルが生成されない?
コードを逐次解析しながら実行するインタープリター型言語として設計されたため。実行時に型が決まる動的型付け言語であるため、事前にコンパイルすることは難しい...
参考