WebAssemblyの登場!近未来にウェブの当たり前になるのか?

先日、MozillaはFirefox 52で初めてのWebAssembly対応済みブラウザーをリリースしました。これはかなり大きな展開です。ウェブ開発への影響はもちろんですが、ネイティブ開発にも間接的に影響が出ます。

WebAssemblyとは?

WebAssemblyはJavaScript以外の言語で書かれたコードをウェブで使えるものにコンパイルする仕組みです。コードがコンパイルされてるので、ネイティブコードのように実行が速くなります。JavaScript以外と言いましたが、WebAssemblyはJavaScriptの代わりになるのではなく、JavaScriptと共に書くものです。ブラウザープラグインも前からありましたが、自分が作らない限り、既存している機能しか使えないし、プラグインにも依存しちゃいます。あともう一つユーザーにダウンロードしてもらわないといけません。この2つのことで、セキュリティ的に外部プラグインを使う選択肢さえないプロジェクトもあります。WebAssemblyはこれから他のブラウザーも対応することになりましたので、ユーザーは他にプラグインをインストールしなくても、利用できるようになります。

 

なんでWebAssemblyなの?

もともとJavaScriptは簡単なことしかやらない前提で作られたが、JavaScriptリリース時(1995年頃)から凄まじいまで進化を取れました。今までJavaScriptの速さに一番大きく影響していたのはJITコンパイラ(実行時コンパイラ)でした。2008年にリリースされ、JITコンパイラはコードのパターンを認識して、強制的にコンパイルします。そのおかげで、JavaScriptの実行時間が10倍ほど短くなりました。しかし、JavaScriptはスクリプト言語なので、まだ速いとは言えません。WebAssemblyを使うとJITコンパイラのコードよりもかなり速くなるので、圧縮などのCPU負担の高いアルゴリズムに最適です。とても大きい話ですが、今までのサービスの構造やフローが変わっていくかもしれません。例えば、ゲームをインストールしなくても、インストールしたバージョンと同じパーフォーマンスが出来るのでクライントのダウンロードサーバとパッチシステムがなくても運用できるようになるかもしれません。

 

これからどうなる?

MozillaはJavaScriptの重さを気にしてたので、JITコンパイラ以上のパーフォーマンスを求めて、WebAssembly(当時asm.js)の開発を始めました。新しい試みとしてプラグインを使わずにあるゲームをネイティブに近いパーフォーマンスが出せるようにしようとしました。その結果、想像以上のスピードだったので全力で開発を進めることになりました。ウェブ標準にするため、他のWebブラウザ(クローム・サファリ・IE・エッジ)にも協力を仰ぎ、来たる2月28日、標準化に向けてスタートしました。

WebAssemblyのデモ動画

 

 

最後に一言

WebAssemblyによってウェブの方向性が少し変わっていくと思っています。近未来の話になりますが、どこに行っても無制限のインターネットアクセスを提供するサービスさえできれば、言語や端末の依存(android・ios)を気にせず開発出来る環境が実現されます。