
JavaScriptCoreはApple主導で開発されているWebKit由来のJavaScriptエンジンで、SafariブラウザやiOS/iPadOSのWKWebView、BunランタイムやReact Nativeの旧構成など、幅広いソフトウェアの基盤として採用されています。ルーツは1998年のKDEプロジェクト発のKJSにさかのぼり、Appleが2002年頃にWebKitへ取り込んでから本格的に発展してきました。V8と並ぶ主要なJSエンジンとして、独自のJITパイプライン「LLInt → Baseline → DFG → FTL」を備え、ブラウザベンダーらしい長期的な視点で言語仕様の実装やデバッグ機能の整備を進めています。
この記事の目次
- 起源と歴史的経緯
- 多段JITとB3バックエンド
- ブラウザ外への展開
- V8との比較で見える設計差
- まとめ
起源と歴史的経緯

JavaScriptCoreの源流は、KDEのコンカラブラウザ向けに開発されたKJSというC++製JSエンジンです。AppleがSafari開発のためにKHTML/KJSをフォークし、WebKitプロジェクトを立ち上げた際に、KJSを基にしたエンジンがJavaScriptCoreとして整備されていきました。当時のJavaScriptは性能要求がそこまで高くなかったため、比較的素朴なインタープリタとして始まった経緯があります。
2008年にGoogleがV8でJSエンジン性能競争に火をつけると、AppleもSquirrelFish(後にNitroと呼ばれる)JITコンパイラを投入し、JavaScriptCoreを本格的に高速化していきました。以降、JITティアを多段化し、型推論やFTL(Faster Than Light)と呼ばれるLLVMベース最適化コンパイラ(現在はB3バックエンドへ移行)を取り入れるなど、他社エンジンに引けを取らない最適化基盤を築き上げています。
多段JITとB3バックエンド

現代のJavaScriptCoreは、低レベルインタープリタLLInt、Baseline JIT、DFG JIT、FTL JITの四段構成を採用しています。LLIntはアセンブリで書かれた高速なインタープリタで、まずすべてのコードをここで実行します。実行回数が一定を超えるとBaseline JITが起動し、より高速な機械語を生成。さらに型情報が安定したホットコードはDFG、最後にFTLという最適化重視のティアに昇格していきます。
FTLは初期にLLVMをバックエンドとして使っていましたが、ビルド時間や最適化フェーズの整合性の問題から、Apple独自のB3(Bare Bones Backend)に置き換えられました。B3はJavaScriptCoreに最適化された軽量SSAコンパイラで、JIT特有のコンパイル時間の短さと最適化品質を両立しています。ブラウザベンダーが自社用に書き起こすバックエンドの中でも、設計思想として興味深い事例です。
ブラウザ外への展開

JavaScriptCoreはSafariの中だけで動いているわけではありません。iOS/iPadOSにはWKWebViewというWebビューがあり、ストアアプリがWebコンテンツを表示する際に内部でJavaScriptCoreが使われます。また、JavaScriptCore Framework経由でネイティブアプリから直接JSを呼び出すこともでき、Swift/Objective-Cのコードと連携してスクリプティング機能を実現する用途で活用されています。
サードパーティ製ソフトでもJavaScriptCoreの採用は広く、React NativeのiOS版は長年JavaScriptCoreをデフォルトとして使ってきました。Bunがランタイムエンジンに採用したことで、サーバサイドにも進出した形になります。Apple Silicon上での実行性能や、メモリ消費の少なさが評価され、特に組み込み的用途で支持が広がっている印象です。
V8との比較で見える設計差

JavaScriptCoreとV8は同じJavaScript仕様を実装しながら、設計上の選択がしばしば異なります。オブジェクトの内部表現の取り方や、JITティアの数、ガベージコレクタの戦略、メモリレイアウトなどに違いがあり、ベンチマークによってはJavaScriptCoreが優位、別のケースではV8が優位、という現象が起きます。
また、Appleはプラットフォーム所有者として、JavaScriptCoreをiOS全体のセキュリティモデルと深く統合しています。サードパーティブラウザがiOSでJITを使えなかった歴史(iOS 17以前)は、エンジンの自由度というよりもプラットフォームポリシーの帰結です。「同じJSエンジンでも、運用される環境によって振る舞いが変わる」という現実を理解しておくと、クロスブラウザ問題に直面した際の手掛かりになります。
まとめ
JavaScriptCoreはAppleが主導するWebKit内のJSエンジンで、KJSをルーツに長い歴史を持ちながら、現代的な多段JITとB3バックエンドで高い性能を実現しています。Safari/WKWebViewにとどまらず、BunやReact Nativeでも採用される実力派です。V8と異なる設計判断を持つことが、JavaScript実装の多様性とエコシステムの健全さに寄与しています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント