7月25日、Jamie Birch氏が「The many, many, many JavaScript runtimes of the last decade」と題したブログ記事を公開し、話題になっている。
この記事では、ブラウザ誕生からわずか30年足らずでJavaScriptがクラウド、エッジ、スマートTV、そして数バイトRAMのマイコンにまで到達した理由と、その過程で生まれた多様なランタイム/エンジンの系譜について詳しく紹介されている。以下に、その内容を紹介する。
ランタイムが増殖した十年
著者はまず、ランタイム多様化の理由を3つにまとめる。
第一に、実行環境の爆発的拡大。スマホやIoT だけでなく、CDN POP や車載インフォテインメントなど「コードを走らせたい場所」が年々増えた。
第二に、制約の細分化。エッジではミリ秒単位のコールドスタートが最優先だが、マイコンでは1 kB足らずのフラッシュ容量がボトルネックになる。
第三に、Web API を越えたネイティブアクセスの渇望。UI をウェブ技法で書きつつ、Bluetooth やファイルシステムを直接叩きたい――そんな要求が新しいランタイムを呼び込んだ。
Birch はこの潮流をたどる道程を、(1)エッジとクラウド、(2)超小型デバイス、(3)ポリグロットエンジン、(4)ネイティブアプリという四つの章立てで描いている。
エッジとクラウド
Lambda@Edge がNode.js をエッジへ持ち込んだのは2017年だが、真の分水嶺は2018年の Cloudflare Workers だと筆者は指摘する。Service Worker API を核に「V8 を必要最小限に絞り込み、数ミリ秒で立ち上がる実行基盤」を商品化したことで、市場の認識が一変した。
革新的だったのは「VM そのものを商材にする」発想で、これに呼応して Deno Deploy、Bun、Wasmer Edge、AWS LLRT と新興勢力が雨後の筍のように現れる。V8 が王座を守る一方、Bun が JavaScriptCore、Wasmer が SpiderMonkey、LLRT が QuickJS を採用するなど、エンジン選択まで多極化した点が興味深い。
超小型デバイス――64 kB未満で動くJavaScript
マイコンの世界では Node.js は重すぎる。そこで 2010年代前半から
といった極小エンジンが相次いで登場した。RAM 数十キロバイト、消費電流1 mA 以下という制限下で動くよう設計され、JerryScript は **IoT.js**、Duktape は low.js といったランタイムをさらに派生させる。著者は「言語仕様と実装を徹底的に削ぎ落す過程で、JavaScript コアの可搬性が証明された」と評している。
ポリグロットエンジン――他言語とのシームレスな連携
ブラウザ外で JavaScript を使う目的の一つは「別言語資産やネイティブAPIとシームレスに統合すること」だ。ここで鍵を握るのが Rhino → Nashorn → Graal.js に連なるJVM系のランタイムや、**jint(.NET)、Boa(Rust)などのポリグロットエンジン**だ。
さらに近年は Node‑API や React Native JSI などの共通ブリッジが整備されたことで、Hermes・QuickJS・JavaScriptCore・V8 の垣根を越えたアドオン共有が可能になり、エンジン選択の自由度が一段と高まった。
ネイティブアプリ――Web 技法とOS APIの交差点
WebView 派 vs ネイティブUI 派
スマホ黎明期を支えた PhoneGap/Cordova は、2010年代後半に Capacitor へ進化しつつも、近年のランキングでは React Native に押され気味だ。一方デスクトップでは Electron が主流であり、Slack や VS Code が示すように「Web 技法でGUIを構築し、Node.js でネイティブAPIに触る」路線が根強い。
React Native と Hermes
Facebook(現Meta)の React Native は2015年に登場。当初はJavaScriptCore 上で動いたが、2019年に Hermes を導入し、iOSのJIT禁止を回避しつつ起動速度とメモリを劇的に改善した。2024年現在、iOS Top100 アプリの3割が React Native 採用という調査も紹介されている。
NativeScript の“フルバインディング”戦略
2014年公開の NativeScript は、iOS・Android それぞれのネイティブAPIを自動でJavaScriptへ投影する大胆な設計で注目を集めた。近年は iOS Node‑API runtime、Android Node‑API runtime といった形で再構築され、React Native や Electron と組み合わせて「好きなエンジンで完全ネイティブ呼び出し」を実現する方向へ舵を切っている。
結論――“一つで十分”ではなく“最適を選べる”時代へ
JavaScript はブラウザ専用言語という殻を破り、「必要な場所で、必要な性能とサイズを持つランタイムを選べるプラットフォーム」へ変貌した。起動時間・実行性能・バイナリサイズ・API互換・セキュリティ――それぞれの制約が新しい実装を呼び込み、競争が既存エンジンを進化させる。言語そのものではなく「多様な実装が共存するエコシステム」こそが、JavaScript の最大の資産だと言えるのではないか。
詳細はThe many, many, many JavaScript runtimes of the last decadeを参照していただきたい。