ソフトウェア
上級

JS Engine史 V8/SpiderMonkey/JSC 1996-2026(ジャバスクリプトエンジン史)

JavaScript Engine 1996-2026 (差別化: 既存JS言語仕様史と異なりEngine実装/JIT Compiler軸)。SpiderMonkey (Brendan Eich Netscape 1996/Mocha/LiveScript・Mozilla維持・Tree Spider Monkey TSM→Tracemonkey 2008→IonMonkey 2011→WarpMonkey 2020・Firefox)・JavaScriptCore JSC (Apple WebKit 2002・SquirrelFish→Nitro→FTL FourthTier+B3 2014・Safari/iOS WKWebView)・Chakra (Microsoft IE9 2011→Edge Legacy・廃止2020)+ChakraCore (FOSS Open Source 2015→Maintenance)・Carakan (Opera Presto 2009-2013・Blink移行で廃止)・KJS (KDE Konqueror 2000→WebKit祖先)・V8 (Google 2008/9/2 Chrome+Node.js 2009 Ryan Dahl→Lars Bak Crankshaft→TurboFan 2014→Sparkplug+Maglev+Turboshaft 2024 Multi-tier)・Hermes (Meta/Facebook React Native 2019・AOT compile・Bytecode・Mobile)・QuickJS (Fabrice Bellard 2019・Embedded・¥0 OSS)・Bun JavaScriptCore base 2023・Node.js V8 22 LTS+25・Deno V8 2.x・JerryScript+Duktape Embedded・¥0 全Free, 2026年V8+JSC+SpiderMonkey+Hermes+QuickJS+Bun JSC共存。

0 回閲覧
0 いいね
2026/4/30 更新
関連タグ
V8 Google 2008 Chrome
SpiderMonkey Eich 1996
JavaScriptCore Apple WebKit
Hermes Meta 2019 RN
QuickJS Bellard

概要

JavaScript Engine は、ECMAScript 仕様を実行するための実装であり、2000 年代初頭から 2026 年にかけて多種多様な実装が登場した。主な実装は SpiderMonkey(Netscape/Firefox)、JavaScriptCore(Apple/WebKit)、V8(Google/Chrome)、Chakra(Microsoft/IE)、Hermes(Meta/React‑Native)である。近年は QuickJS(埋め込み向け)や Bun(Node 互換)など、用途別に特化したエンジンが増えている。各エンジンは JIT コンパイラ、バイトコード、AOT などの手法を組み合わせて実行速度とメモリ効率を最適化している。

主な特徴・仕組み

エンジン主なコンパイル手法代表的な JIT レイヤメモリ管理主要な用途
SpiderMonkeyバイトコード → JITIonMonkey, WarpMonkeyガベージコレクション(Mark‑Sweep + Incremental)Firefox, Firefox OS
JavaScriptCoreバイトコード → JITFTL, FourthTierガベージコレクション(Mark‑Compact)Safari, WKWebView
V8バイトコード → JITTurboFan, Sparkplug, Maglevガベージコレクション(Scavenge + Mark‑Sweep)Chrome, Node.js
Chakraバイトコード → JITChakra JITガベージコレクション(Mark‑Sweep)Edge Legacy
HermesAOT → バイトコードHermes JITガベージコレクション(Mark‑Compact)React‑Native (Android)
QuickJSバイトコードなしガベージコレクション(Mark‑Sweep)IoT, Embedded
Bunバイトコード → JITJIT (Bun JIT)ガベージコレクション(Mark‑Sweep)Bun Runtime
  • JIT レイヤ は、実行時に最適化された機械語を生成し、再帰的に最適化を重ねることで高速化を図る。
  • AOT は、ビルド時にバイトコードを生成し、起動時のオーバーヘッドを削減する。
  • ガベージコレクション のアルゴリズムは、リアルタイム性やメモリフットプリントに大きく影響する。

具体例・対応製品 (テーブル必須)

製品名エンジンバージョン主要機能2025 年のリリース2026 年のアップデート
Chrome 115V89.2TurboFan 2024, Maglev 20252025 Q22026 Q4: TurboFan 2026, Sparkplug 2.0
Safari 17JavaScriptCore2025FTL 2024, FourthTier 20252025 Q32026 Q1: Nitro 2026
Firefox 124SpiderMonkey2025IonMonkey 2024, WarpMonkey 20252025 Q42026 Q2: IonMonkey 2026
Node.js 22V89.3TurboFan 2024, Maglev 20252025 Q12026 Q3: TurboFan 2026
React‑Native 0.74Hermes2025AOT 2024, Bytecode 20252025 Q22026 Q1: Hermes 2026
Bun 1.0JavaScriptCore2025JIT 2025, WebAssembly 20252025 Q32026 Q2: Bun JIT 2026
QuickJS 0.20QuickJS2025Embedded 20252025 Q42026 Q1: QuickJS 0.21
Deno 1.40V89.2TurboFan 20242025 Q22026 Q3: TurboFan 2026
JerryScript 2.0JerryScript2025AOT 20252025 Q32026 Q1: JerryScript 2.1
Duktape 2.1Duktape2025Lightweight 20252025 Q42026 Q2: Duktape 2.2

選び方・注意点

  1. 実行環境 – ブラウザ向けなら JavaScriptCore / SpiderMonkey、サーバー向けなら V8 / Bun。
  2. 起動時間 – AOT 付きエンジンは起動が速いが、ビルド時間が増える。
  3. メモリフットプリント – 低メモリデバイスでは QuickJS や JerryScript が有利。
  4. 拡張性 – Node.js 互換が必要なら V8 / Bun、React‑Native なら Hermes。
  5. 開発コミュニティ – Google/Apple のエンジンは大規模コミュニティがある。

関連用語との違い

  • ECMAScript:仕様書。エンジンは仕様を実装する。
  • JIT:Just‑In‑Time コンパイル。実行時に最適化。
  • AOT:Ahead‑Of‑Time コンパイル。ビルド時に最適化。
  • Bytecode:中間表現。JIT/AOT の入力。

よくある質問 (FAQ)

  1. V8 と JavaScriptCore の主な差は何ですか?
    V8 は高速な TurboFan JIT とマルチスレッドガベージコレクションを持ち、サーバー向けに最適化。JavaScriptCore は WebKit との統合が深く、Safari のレンダリングパイプラインに合わせて設計。

  2. Hermes はなぜ React‑Native で使われるのですか?
    Hermes は AOT バイトコードを生成し、起動時間とメモリ使用量を大幅に削減。モバイルデバイスのリソース制約に対応。

  3. Bun は Node.js と互換性がありますか?
    Bun は Node.js の API をほぼ完全にサポートし、V8 をベースにした高速 JIT を備えているが、全ての npm パッケージが動作するわけではない。

まとめ

1996 年から 2026 年にかけて、JavaScript Engine は実装手法、JIT/AOT の組み合わせ、メモリ管理アルゴリズムを中心に進化してきた。主要エンジンは用途別に特化し、ブラウザ、サーバー、モバイル、埋め込みと多様な領域で最適化されている。2025 年以降はマルチレイヤ JIT の進化と AOT の拡張が主流となり、2026 年には V8、JavaScriptCore、SpiderMonkey、Hermes、QuickJS、Bun などが共存し、開発者は用途とリソースに応じて選択できる環境が整った。

この記事について
カテゴリーソフトウェア
難易度上級
作成日2026/4/30