MENU

QuickJSとは|Fabrice Bellardが作った極小JSエンジン

QuickJS アイキャッチ
QuickJS

QuickJSは2019年7月にFabrice Bellard氏が公開した、C言語で書かれた極めてコンパクトなJavaScriptエンジンです。Bellard氏はFFmpegやQEMU、tccコンパイラを単独で生み出してきた伝説的なエンジニアで、QuickJSもまた数百KB級のバイナリでES2020相当の機能を一通り実装するという離れ業を成し遂げています。V8のような巨大エンジンを組み込めない小型機器やプラグイン環境、サンドボックスでのスクリプティング用途に適しており、JSエンジンの世界に「軽量・組み込み」という重要な選択肢を改めて提示しました。

目次

この記事の目次

  1. QuickJSが目指したもの
  2. 組み込み用途での強み
  3. 派生プロジェクトとQuickJS-NG
  4. QuickJSが向く場面/向かない場面
  5. まとめ

QuickJSが目指したもの

QuickJSが目指したもの

QuickJSのREADMEは設計目標を明快に語っています。小さなコードサイズ、軽量な依存関係、高い言語仕様準拠、リファレンスカウント+循環GCによる予測可能なメモリ挙動、そしてLinux/macOS/Windowsで動く移植性。巨大エンジンが持つJIT最適化を諦める代わりに、組み込みやすさとシンプルさを徹底的に追求した結果が、ソース数MB、バイナリ数百KBという驚異的なフットプリントです。

ES2020レベルの構文に加え、BigInt、モジュール、Proxy、各種Tagged Templateなどモダンな機能も多くが実装されています。Test262への適合率も高く、Bellard氏は実装の正確さに強くこだわっていることが伺えます。「軽いけど機能は妥協しない」という姿勢が、QuickJSを単なる小型エンジン以上の存在にしました。

組み込み用途での強み

組み込み用途での強み

QuickJSはCのAPIから呼び出して使うことを前提に作られており、ホストアプリへの組み込みが非常に簡単です。数十行のCコードで独自関数を公開し、設定ファイルやプラグイン記述言語としてJavaScriptを利用できます。IoTデバイスやマイコン向けの軽量ランタイム、コンソールゲームのMod、ブラウザ拡張のサンドボックスなど、V8やJavaScriptCoreでは過剰になる場面で実用的な選択肢になります。

また、QuickJSはマルチスレッド対応とまではいかないものの、ランタイムを複数生成して独立したコンテキストで実行できる設計です。メモリリソースの上限を設定し、無限ループを検出して安全に強制終了する機能も備えており、ホストアプリのセキュリティ要件に応えやすい構造を持ちます。「信頼できないコードをサンドボックス内で動かす」という用途に向く、数少ない選択肢の一つです。

派生プロジェクトとQuickJS-NG

派生プロジェクトとQuickJS-NG

オリジナルのQuickJSはBellard氏個人によるメンテナンスが中心で、リリースの間隔がやや空く傾向があります。そのため、コミュニティ主導でメンテナンス活動を加速するためのフォーク「QuickJS-NG」が2023年頃から活発になりました。QuickJS-NGはオリジナルとの互換性を保ちつつ、バグ修正や新仕様への対応、ビルドシステムの整備を継続的に進めています。

また、QuickJSをベースに非同期APIやNode.js風モジュールを乗せた組み込みランタイム「txiki.js」や、WebAssemblyにポートして任意の言語からJSを呼び出すためのプロジェクトなど、派生も多数生まれています。JSエンジンを土台にして、それぞれのドメイン向けに薄く拡張するという使い方の典型例であり、QuickJS自体の柔軟さがエコシステム形成に寄与している様子が見て取れます。

QuickJSが向く場面/向かない場面

QuickJSが向く場面/向かない場面

QuickJSが真価を発揮するのは、フットプリントやセキュリティ境界が最重要視される領域です。数百MBのChromiumを抱えるのが現実的でない組み込み機器、untrustedなプラグインを動かす必要があるアプリ、ビルド時にスクリプトで設定を生成したいCLIツールなど、軽さが価値になる場面で第一候補となります。BellardがJSCardsやJSLinuxなど自身のデモで実際に使ってきた事実も、その実用性を裏付けます。

一方で、Webブラウザのように1日中JavaScriptを走らせ、CPU性能の限界まで追い込みたい用途には不向きです。JITを持たないため、長時間のホットループはV8やJavaScriptCoreに比べると明確に遅くなります。「軽量で安全な組み込みスクリプティング」と割り切ったうえで、QuickJSと他の選択肢を使い分けるのが、現実的な採用判断です。

まとめ

QuickJSはFabrice Bellard氏が2019年に公開した極小JavaScriptエンジンで、JITを持たない代わりに小ささと言語仕様適合性、組み込みやすさを徹底的に追求しています。IoTやプラグイン、サンドボックス用途で固有の存在感を持ち、QuickJS-NGや派生ランタイムを通じてコミュニティでも進化を続けています。「軽いJSエンジンが欲しい」という要求に対する、現代的な定番解の一つです。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次