世界を動かす技術を、日本語で。

過去10年の多様なJavaScriptランタイム

2025年7月27日原文(buttondown.com)

概要

  • JavaScriptランタイムの多様化と進化の背景解説
  • Edge Computingやマイクロコントローラ、ポリグロットエンジン等の用途別ランタイム紹介
  • スマートTVやモバイル、デスクトップ等、ネイティブアプリでのJavaScript活用事例
  • 各分野で求められる最適なエンジン・ランタイム選択の重要性
  • JavaScriptのエコシステム拡大と今後の発展可能性の示唆

JavaScriptランタイム多様化の潮流

  • 過去10年 でJavaScriptランタイム/エンジンが急増し、多様な用途・環境で利用拡大
  • Cloud、Edge、Smart TV、モバイル、マイクロコントローラ など、利用シーンの広がり
  • タスクやデバイス特性に最適化した 専用ランタイム の登場
  • 1つのランタイムやエンジンでは 全ての要件を満たせない 現実

Edge Computing分野

  • 2002年Akamai によるJava/.NETベースのエッジコンピューティングが先駆け
  • Node.js(2009) 登場によりJavaScriptのサーバサイド展開が本格化
  • AWS Lambda(2014)Lambda@Edge(2016-2017) でエッジでもJavaScript稼働
  • Cloudflare Workers(2017) がService Worker APIベースで新市場創出
  • Deno(2018)Deno DeployBun(2022)Wasmer/WinterJS(2023) 等、新興勢力続々登場
  • エンジンも V8、JavaScriptCore、SpiderMonkey、QuickJS など多様化
  • タスク・レイテンシ・リソース要件に応じ 最適なエンジン選択 が主流

マイクロコントローラ向けランタイム

  • マイクロコントローラ は極小メモリ・低消費電力・低コストが特徴
  • Node.js 等フル機能ランタイムは非現実的
  • Duktape、Espruino、mjs、JerryScript、Moddable、elk 等、超軽量エンジンが登場
    • 64kB未満のRAMで動作するものも
    • 性能とのトレードオフ有り
  • これらエンジンを基盤とした IoT.js、Microlattice.js、low.js 等のIoT向けランタイム
  • ベンチャー資本不要 で開発されるケースも多い

ポリグロットエンジンの進化

  • 他言語VMを活用し 言語間相互運用 を実現するエンジン
  • Rhino(1997) はJava実装、JVM上でJava⇔JavaScript相互呼び出し可能
  • Nashorn(2014)、Graal.js(2018) へと進化、Node.js SDK互換も実現
  • .NET向け jint(2013)、Python向け PyNarcissus、langjs、jispy、Ruby向け twostroke、Opal など多様
  • RustやGo、Zig等 新興言語向け実装 も増加
  • JavaScript自身でエンジンを実装する動き (Narcissus、Porffor等)も活発
  • 他言語からの呼び出し需要、エコシステムの広がりを象徴

ネイティブアプリ分野でのJavaScript活用

  • Web由来のGUI構築適性 により、クロスプラットフォームアプリ開発基盤として採用拡大

  • Web Viewベースアプリ としてモバイル/デスクトップ/スマートTVで普及

    • モバイル:
      • PhoneGap(2009) 登場、後にCordovaとしてオープンソース化、IonicやCapacitor等のUIツールキット
    • デスクトップ:
      • NW.js(旧node-webkit,2012-)Electron(2013-) が主流
      • Discord、Slack、Visual Studio Code 等、主要アプリがElectronベース
    • スマートTV:
      • OIPF、HbbTV、ATSC 3.0 等のWeb仕様
      • webOS、Tizen、Fire TV などでCordova採用
      • Roku は独自言語BrightScript、 Apple TV はTVMLKit JS(JavaScriptCoreベース)
  • 1.26億台超のネット接続TV、欧州だけで1億台超のHbbTVデバイスなど、巨大市場

JavaScriptランタイムのエコシステムと今後

  • 用途・環境ごとに最適なランタイム/エンジン を選択する潮流
  • エコシステムの拡大 と多様な実装・運用パターン
  • 今後も新たなランタイム・エンジンの登場 が予想される状況

Hackerたちの意見

この大作の記事を書くのに1年以上かかっちゃった。4,000語以上、200以上のリンク、そして無数のJavaScriptランタイムやエンジンに関するリサーチが詰まってる。ぜひ読んでみて!新しいことを学べること間違いなしだよ。

確かにたくさん学べたよ。ありがとう、サー、この大作に感謝:)

よく調べた深い記事を書くことにROIがまだあるのか、ずっと気になってた。もしその記事の洞察が本当にユニークなら、他のライターやAIに何度も再利用されちゃうし、もしかしたらもっと良いビジュアルや図を使った記事がクリックを集めることになるかも。

興味深い読書だった。リサーチも素晴らしいね。これからどうなると思う?

こんなに頑張ってくれてありがとう。こういう良い調査記事を書く人たちにはもっと評価されるべきだよね。私たちの業界の残念なところは、理論的には言語に中立なコンポーネントを、複数の言語エコシステムや縦の分野で別々に再現しちゃうことだと思う。npmとcargoが別々でなくて済めばいいのに。君が言及してるポリグロットランタイム(特にGraal)がもっと普及すればいいな。DuktapeとMicroPythonの両方があるのも残念。効率的なガベージコレクションやコンパクトなバイトコード、パッケージ依存解決に言語特有のものはないのに。

JS/TSの世界には比較的新しくて、両方のプラットフォームで動くモバイルアプリを作ってるんだ。それに、Denoを使ってバックエンドも構築中。この記事はすごく情報が豊富で役立ったよ。素晴らしい仕事だね、ありがとう!

JScript.NETみたいなものも考えた?jsc.exeはすべてのWindowsインストールに付いてくるし、JScriptはまだIISサーバーで動くよ(いくつか作ったことある)。それに、Adobe PhotoshopやAfter Effects、Premiere、Illustratorみたいなものは、古いバージョンのExtendscriptや現代のV8を使ってJavaScriptを動かせるけど、どう思う? https://developer.adobe.com/xd/uxp/uxp/versions/ https://developer.adobe.com/photoshop/uxp/2022/ps_reference/

記事素晴らしいね。WasmerとWinterJSに言及してくれてありがとう。面白いことが進行中だね!

とても興味深い読み物だったよ。努力して共有してくれてありがとう。

ニュースレターにサインアップするのは初めてで、HNのコメントやあなたが書いたこと、時間がかかったことを読む前にやっちゃった。こういう深い考察は本当にありがたいけど、正直言うと、私もあなたと同じようにエッジやJSエンジンのことに夢中だったから、いくつかは知ってた。でも、ブログを通してたくさん学べたし、すごく楽しかったよ。これからも時間をかけて、休んで、素晴らしい作品を作ってね。楽しみに待ってるから!良い一日を。

信じられない記事だね。こんなに多くのJavaScriptランタイムがあるなんて知らなかったし、マイコン上でJavaScriptを実行できるなんて思ってもみなかったよ。

LLRTは主にコミュニティからの貢献で、AWSの一人(リチャードさん、こんにちは!)が関わってるってことを訂正したい。LLRTモジュールを使ってる企業はたくさんあるし(モジュール化にはかなり力を入れた)、rquickjsもね。私は両方のメンテナーで、自分でもいくつかモジュールを書いたよ。Rustにとってこれ以上のJSランタイムはないと思う。quickjs-ng(quickjsのフォークで、最初はquickjsの活動が停滞してたからだけど、今は両方のプロジェクトがアクティブで分岐してる)に基づいていて、主要なNode/WinterJSのAPIもたくさん含まれてる。

Hacker Newsで議論の続きを見る