ChakraCoreDev Basics/Keyword

マイクロソフトがオープンソースとして公開したJavaScriptエンジン「ChakraCore」とはどんなものだろうか。

» 2016年02月02日 05時00分 公開
[かわさきしんじInsider.NET編集部]
Dev Basics/Keyword
Insider.NET

 

「Dev Basics/Keyword」のインデックス

連載目次

 ChakraCoreは、マイクロソフトがWebブラウザ「Edge」およびJavaScriptで記述されたUWPアプリの実行エンジンとして開発したChakraをオープンソース化したもので、GitHubで公開されている(MITライセンス)。単体アプリへの組み込みも可能なことから、さまざまな可能性が考えられる。

ChakraCoreとは

 ChakraCoreはマイクロソフトのJavaScriptエンジンであるChakraをオープンソース化したもの。Chakraは同社のWebブラウザ「Edge」と、JavaScriptで記述されたUWPアプリでJavaScriptコードの実行エンジンとして使われている。

 なお、IE9〜IE11で使われているJavaScriptエンジンの名称(コードネーム)も「Chakra」となっている。これはjscript9.dllファイルがその実体であり、Windows 8.1/IE11のリリース以後はその仕様は基本的には変更されないことになっている。ここでいうChakraはWindows 10/Edgeで利用されている新しいJavaScriptエンジン(実体はchakra.dllファイル)だ。

 もともとはWindows 10 IoT Core(ARMベース)上でNode.jsを利用できるようにするための「Node.js with Chakra」というプロジェクトがあり、このプロジェクトの成果としてChakraCoreが生まれたというのが話の大筋と思われる(他の成果物としては、前述の内容を達成するNode.js tools for Windows IoTやUWPアプリ内でNode.jsをホストする仕組みであるnode-uwpがある)。

ChakraCoreのアーキテクチャ

 以下にChakraCoreのアーキテクチャを示す。

ChakraCoreのアーキテクチャ ChakraCoreのアーキテクチャ
画像はChakraCoreのArchitecture Overviewページの図を基に作成したもの。

 図から分かるように、Chakraに対してWebブラウザとUWPへのバインディングを削除し、COMベースの診断APIの代わりにJSONベースの診断APIを組み込んだものがChakraCoreだ(JSONベースの診断APIも将来的にはChakraに取り込まれる予定)。基本的な機能はChakraと変わらない。

 2016年1月30日時点では、ChakraCoreが動作するのはWindowsプラットフォームのみとなっているが(x86/x64/ARM)、将来的にはLinuxをはじめとする非Windowsプラットフォームもサポートする予定だ(COMベースの診断APIではなく、JSONベースの診断APIを搭載するのはこのクロスプラットフォームサポートをにらんだものだ)。

 また、ChakraCore(とChakra)はJSRT(JavaScript Runtime)と呼ばれるAPIを公開している。ChakraCoreは単独のアプリに埋め込むことが可能であり、埋め込んだ側のアプリと、埋め込まれたChakraCoreとをつなぐインタフェースがJSRTとなる。すなわち、アプリはJSRT APIを呼び出すことで、ChakraCoreにJavaScriptコードを実行させることができる(=アプリがスクリプティング機能をサポートするようになる)ということだ。

Node.js with ChakraCore

 2016年1月19日(現地時間)にはNode.jsに対して、Node.js with ChakraCoreのコードを取り込むようにプルリクエストを送った。Node.jsはグーグルが開発したV8 JavaScriptエンジンを使用しているが、このプルリクエストはこの状況に変化を生むかもしれない。

 Node.jsはV8のAPIを使用するが、ChakraCoreが公開しているのはJSRT APIだ。そこでNode.js with ChakraCoreでは、ChakraCoreの上に「Chakra Shim」と呼ばれるV8 APIのラッパーとなるレイヤーを用意することで、Node.jsからはV8 APIを使用してChakraCoreを利用できるようにしている。

Node.js with ChakraCore Node.js with ChakraCore
画像は「Submitting a Pull Request to Node.js with ChakraCore」ページの図を基に作成したもの。

 Chakra ShimはV8 APIの大半を実装している。そのため、Node.jsとそれを利用するアプリからはV8もChakraCoreも透過的に扱える。ただし、V8 APIと強く結び付いたネイティブモジュールなどではChakraCoreとの間で(さらにはV8のバージョン間ですら)互換性の問題が発生すると思われる。こうした部分については「Native Abstractions for Node.js」(nan)による解決が期待される。


 オープンソースとして公開されたChakraCoreにはさまざまな可能性がある。一つにはWindows IoT、Xboxなどを含むWindows 10プラットフォーム上でのNode.jsアプリのサポートが挙げられる。また、ChakraCoreを利用することで、アプリがスクリプティング機能を容易にサポートできるようにもなる。さらに、Node.jsアプリの開発者にとっては、そこで利用するJavaScriptエンジンに関してV8とChakraCoreという選択肢が与えられるようになる。

 また、本稿では取り上げなかったが、ChakraCoreはJavaScriptコードを高速に実行できるようにさまざまな取り組みが行われている。Webアプリに限らず、JavaScriptでアプリ開発を行うのであれば、注目しておきたい技術だ。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。