WebAssembly対応、主要ブラウザChrome/Firefox/Edge/Safariで整う。Webアプリの開発言語としてJavaScript以外の選択肢は広がるか?
主要なWebブラウザでのWebAssembly対応が整った。これによりJavaScriptを超える高速なWebアプリケーションの実行に加え、JavaScript以外の言語によるWebアプリ開発の選択肢が開かれることになる。
WebAssemblyは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットを実現しようと、マイクロソフト、Google、Mozilla、Appleなどの主要なWebブラウザベンダがW3CのWebAssembly Community Groupなどを通じて共同で開発に取り組んでいる技術です。
主要なWebブラウザによるWebAssembly対応が整う
1年前の2016年11月には、各社が足並みをそろえてWebAssemblyの試験的実装を発表し、2017年2月にはWebAssembly APIとバイナリフォーマットについて主要ブラウザベンダが合意したことでテクニカルプレビューの段階が終了。本番投入が可能になったことが宣言されました。
その後、Chromeは2017年7月にリリースされた「Chrome 60」からWebAssemblyがデフォルトでオンになり、Firefoxも8月にリリースされた「Firefox 55」からWebAssemblyに正式対応をしていました。
続いてSafariが9月にリリースした「Safari 11」でWebAssemblyに対応。Microsoft Edgeも10月にリリースされた「Edge 16」でWebAssembly対応となります。
これで主要ブラウザによるWebAssembly対応がすべて整いました。
11月13日付けでMozillaブログに投稿された記事「WebAssembly support now shipping in all major browsers」では、この主要ブラウザによるWebAssembly対応が整ったことを受けて、次のように書いています。
WebAssembly has caught the interest of a wide swath of technical folks, because it brings predictable performance to the web platform – something that’s been exceedingly difficult to achieve with JavaScript alone. Gaming companies were early adopters of WebAssembly and asm.js. Epic and Unity were first to put their industrial-strength game engines on the web without rewriting the C++ code bases in JavaScript.
WebAssemblyは幅広い技術者の関心を集めてきました。というのも、それはWebプラットフォームに予測可能なパフォーマンスをもたらしたのです。これはJavaScriptだけで実現するのは非常に困難なことでした。ゲーム開発企業はこのWebAssemblyとasm.jsを早くから採用していました。EpicとUnityは、業界の中でも強力とされるゲームエンジンを、C++のコードベースをJavaScriptに書き換えることなく最初にWeb対応にしたのです。
このMozillaのブログで紹介されたように、WebAssemblyの重要な点は2つあると考えられます。
1つはJavaScriptでは実現できないほどの高速性がWebAssemblyで実現される点です。これによりゲームのような、これまで速度の面で実現が難しいとされてきたアプリケーションがWebブラウザで実行できるようになります。
そしてもう1つは、Webアプリケーションの開発言語がJavaScriptやTypeScriptのようなJavaScriptをターゲットにした言語以外の選択肢へと広がる点です。
JavaScriptだけでなく、C/C++やRust言語など選択肢が広がる
いままで、Webブラウザでサポートされる言語は多少の例外はありつつも基本的にJavaScriptだけでした。ですからJavaScriptで記述されたアプリケーションしかWebブラウザで実行することはできませんでした。
しかしWebAssemblyがWebブラウザでサポートされたことにより、最終的にWebAssemblyのバイナリフォーマットを生成することができれば、どんな言語で書いたプログラムであってもWebアプリケーションを記述し、生成したWebAssemblyをWebブラウザで実行できるようになりました。
前述のMozillaのブログに書かれた例で、C/C++のコードを書き換えることなくゲームエンジンをWeb対応にできたのは、C/C++のコードからWebAssemblyを生成したためです。これはEmscriptenと呼ばれる特殊なコンパイラで実現しています。
Mozillaが中心になって開発を進めているRust言語も、WebAssemblyを生成できるようになるとされています。
また、Source Mapsと呼ばれる機能をWebAssemblyと言語の両方で対応することにより、ソースコードを参照しながらのデバッグも可能になります。
WebAssemblyの対応はWebブラウザだけでなく、サーバサイドのNode.jsでも行われています。今後、さらにさまざまな言語がWebAssemblyを出力できるようになれば、WebブラウザとNode.jsの両方で、対応言語の選択肢の広がりが期待できるでしょう。
あわせて読みたい
GitHubが「Teletype for Atom」リリース。開発者向けエディタ「Atom」でも、複数プログラマが同時にコード編集可能
≪前の記事
[速報]「Visual Studio Live Share」発表。複数のプログラマがリアルタイムにコードの編集、ブレークポイント、デバッガ操作などを共有。Connect(); 2017