概要
- 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 Deploy、 Bun(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ランタイムのエコシステムと今後
- 用途・環境ごとに最適なランタイム/エンジン を選択する潮流
- エコシステムの拡大 と多様な実装・運用パターン
- 今後も新たなランタイム・エンジンの登場 が予想される状況