nmi.jp Twitter → @tkihira
JSXでCanvasを使う方法 JSX誕生秘話

JavaScriptの将来と、JSXの関わり


2013-12-20
Takuo Kihira

※この記事は、JSX Advent Calendar 2013の一部です。

JSX Advent Calendarは技術系のネタが多いですが、ちょっと技術の話から離れて、JSXが将来的に何を目指そうとしているのかについて語ってみようと思います。

なお、私はJSX自体の開発には積極的に関与しておらず、この記事の内容についてJSX開発陣との合意を取ったものではありません。これはあくまでも個人の勝手な予想・思い込みによる記述であるということを念のために強調しておきます。

ブラウザやJavaScriptはここ近年大変注目されており、界隈ではそれにまつわる技術が多数登場しています。asm.js、PNaCl、WebGL、GWTなどなど、もちろんJSXもその一環として考慮されています。これというのも、ブラウザが入っていないパソコンはほぼないくらいブラウザが当たり前に浸透したことと、ブラウザの中で動く唯一の言語がJavaScriptであるというのが大きな要因でしょう。JavaScript自体も、ECMAScript 6(Harmony)の登場も近く、大変熱い状況です。

そしてそうなると当然出てくるのが、互換性の問題です。PCブラウザの場合はまだマシなのですが、モバイル端末のブラウザを考えるとアップデートは殆ど期待できません。せっかくの新機能が出ても、それを使うと大部分の人が使えなくなってしまいます。かといって古いブラウザにあわせると、せっかくの新機能を組み込むことが出来ません。

クライアント開発をやっていると、このジレンマには相当悩まされることになります。もうこれはコストとメリットのトレードオフでしかないのですが、よく選ばれる解として「最先端ブラウザでバリバリ動くが、古いブラウザでもそこそこ動く」ことを目的にすることがあります。なるべくコードを一本化してメンテナンスの効率をあげつつ、使える機能は使いたい、という戦略です。言うは易し行うは難しの典型例なのですが、しかし現実にこの方針をとるプロジェクトは多いです。

今はまだブラウザの拡張はそこまで激しいものではないので、この戦略は破綻していません。しかし、今の急激な進化の後ろに控えている技術群は、現場レベルで互換性を担保するのはまず無理でしょう。PNaClとasm.jsと古いブラウザのJavaScript全部に対応する案件があったとして、直感的に上手く行くとは思えないのです(そもそも上記の例だと、新技術同士ですら互換性がありません)。そうなると、せっかくの新技術が使えるにも関わらず、その技術を搭載したブラウザが普及するまでは(コスト的な観点より)我慢するしかないという状況が生まれてくることでしょう。

JSXは、まさにこの状況を改善すべく開発が進められていると考えています。JSXの言語特性的に、C++に変換するのが難しくありません。PNaClやasm.jsはC++からの変換を前提にしていますが、JSX→C++→PNaCl(asm.js)という変換が理論上可能です。

これが何を意味をするのでしょうか?おそらく完全なワンソースにならないにせよ、コードロジックの大部分を流用しながら最新のブラウザと古いブラウザの両方に対応できる可能性が高まります。そうすると、最新のブラウザでは爆速で動作し、古いブラウザでも(その端末としては普通に)遊べるゲームを作ることが出来るのです。CPUパワーに余裕のあるPCブラウザではそれほどの恩恵を感じられないかもしれませんが、モバイルブラウザにおいてこれは大きな意味を持ちます。

C++以外でも、たとえばES6で導入予定のGeneratorは大変強力ですが、現在のブラウザではChromeとFirefoxの間での互換性がないために、それぞれ別のソースコードを書く必要があります。JSXであれば、それぞれに適したコードに自動的に変換することも可能でしょうし、そもそもGeneratorに未対応のJavaScriptでも動作する研究も進んでおります。

これについては @wasabiz 君の"JSXのジェネレータ実装"という大変良いスライドがあるのでここで紹介します。このスライドの中で何度か触れられていますが、JSXは言語であることに加えて、「ブラウザの互換性問題を吸収するレイヤー」としての価値があるのです。

JSXは元々、社内で急増するJavaScript案件に対する解として開発が始まりました。今モバイルでのHTML5開発には、速度と互換性の二つの大きな問題が存在しています。JSXは、JavaScriptの速度の面と互換性の問題を、言語レベルで吸収するレイヤーとしての存在意義が期待されております。

将来的に「JSXで書いておけば、速度は最高のパフォーマンスが期待できるし、ブラウザの互換性問題も気にしなくて良い」という風潮になるようになるように、今後も私はJSXを応援していきたいと思います。


次の投稿 JSX誕生秘話