WebAssembly対応、主要ブラウザChrome/Firefox/Edge/Safariで整う。Webアプリの開発言語としてJavaScript以外の選択肢は広がるか?

2017年11月17日

主要なWebブラウザでのWebAssembly対応が整った。これによりJavaScriptを超える高速なWebアプリケーションの実行に加え、JavaScript以外の言語によるWebアプリ開発の選択肢が開かれることになる。


WebAssemblyは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットを実現しようと、マイクロソフト、Google、Mozilla、Appleなどの主要なWebブラウザベンダがW3CのWebAssembly Community Groupなどを通じて共同で開発に取り組んでいる技術です。

WebAssembly.org WebAssembly.org

主要な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の両方で、対応言語の選択肢の広がりが期待できるでしょう。

あわせて読みたい

WebAssembly Web技術 Web標準




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本