2016年12月3日土曜日

「WebAssembly」がITの未来に変革もたらす|Google、Apple、Microsoft、Mozillaが共同で開発した新概念



「WebAssembly」がWebブラウザに変革をもたらします。
Webブラウザは、もともとただテキストを表示するだけのところから始まりました。その出発点から、現在ではコミュニケーションやゲームまで幅広い表現を可能にしています。そして今回、「Webブラウザ」に新しい概念が加わわることになりました。それをもたらしたのが、ブラウザに関わりの深い世界規模の4社「Google」「Apple」「Microsoft」「Mozilla」が共同開発した、Webのためのバイナリーフォーマット「WebAssembly」です。
今回はその「WebAssembly」について、「スゴイところって何?」「何が起きるの?」をご紹介していきます。

WebAssemblyは「JS不要。コンパイラ言語だけで動的アプリが作れる」「どの言語でもWebブラウザ上にアプリを作ることができる」

game
WebAssemblyによってもたらされるスゴイところは次の4つ。
  1. コンパイラ言語だけで、Webブラウザ上に動的なアプリが作れる
  2. ほぼ機械言語にコンパイルされるからヌルヌル動く
  3. OSを一切気にする必要がなくなる。気にするのはブラウザのみ
  4. C,C++以外の言語でもWebAssemblyにコンパイルされる「クロスコンパイラ」の可能性が高まった
これまでWebブラウザで、ユーザからの入力情報を元に、動的なアプリケーションを実現するためには「JavaScript」が必須でした。
「インタプリター言語」であるJavaScriptは、その都度ソースコードを機械語に翻訳する必要があるため、予め機械語に近くコンパイルされる「コンパイラ言語」と比較すると動作が遅いという特徴があります(※)。
もしコンパイル後の機械語に近い形で、Webブラウザ上でコードが実行されたら。JavaScript以上にヌルヌルに動き、しかもJavaScriptを気にする必要がなくなります。
それを実現したのがこの「WebAssembly」です。

Webブラウザの概念を拡張させた「WebAssembly」

WebAssemblyは、これまでのようにWebブラウザ上で動的なWebアプリ動作を実現するために必要だったJavaScriptを不要にします。そして、スマホからPCまでに標準インストールされている「Webブラウザだけ」で様々なアプリケーションを実行することを可能にします。
現在、iOSアプリやAndroidアプリに注目が集まり、開発者がゲームやツールを生み出すのが普通です。「iOSで反響が大きかったから、次はAndroidアプリでも作ろう」という発想は多くの開発者が行っていました。その時にOSの違いから、プログラミング言語をSwiftからJavaに変えて開発する必要が発生していました。これは非常に開発コストがかかりますし、さらには保守・運用するのにも、別々の言語で書かれているため難しくしてきました。
しかし、どのデバイスにも共通である「Webブラウザ」というプラットフォーム上で、アプリケーションを動的に扱えるようにした「WebAssembly」は、OSを考えてアプリを開発する必要を滅却します。
「Webブラウザ」がアプリを飲み込み、新しい、より広い概念に生まれ変わるのです。
現在はCとC++で開発したアプリをWebAssemblyにコンパイルすることで、Webブラウザ上のアプリを実現できるそうです。今後の動向として他のプログラミング言語にも対応していくので、上記のようなWebブラウザ革命が近いうち起こるでしょう。
ご存知の通り、Chromeですと「Google V8 JavaScript Engine」により、JSをはじめから機械語に翻訳します。そのため、必ずしも「JavaScriptより早くなる」というわけではありません。しかし、「予め機械語に翻訳する」という点は共通しているものの、WebAssemblyに変換する場合は、JavaScript自体を書く必要がなくなるという点で大きく異なっているのです。

WebAssemblyを動かしてみた

WebAssemblyの話は、以前にも海外で話題になりましたが、今回はその「デモ」も発表されていましたので実際に動かしてみました。下にその実行方法を載せていますので、ぜひお試しください。
WebAssemblyをサポートした「Google Chrome Canary 」をダウンロード。
chrome
同意してインストール
インストール
アドレスバーに「chrome://flags/#enable-webassembly」を入力。
スクリーンショット 2016-03-16 22.19.24
「Experimental WebAssembly」の欄を「有効にする」を押す。
スクリーンショット 2016-03-16 22.22.12
ブラウザ下部に「今すぐ再起動」が表示されるので、押して再起動を行う
スクリーンショット 2016-03-16 22.22.52
再起動して「https://webassembly.github.io/demo/AngryBots/」にアクセスする。
スクリーンショット 2016-03-16 22.23.40
少し時間を待つと、ゲームが始まります。
game

十字キーを押すことでキャラクターを動かすことができ、マウスをクリックすることで弾を放てます。実際に動かしてみるとわかりますが、今までのWebブラウザ上のゲームと比較してみても、圧倒的なヌルサク感です。ぜひ体験してみてください。

今後のWeb業界はどう変化するのか

WebAssembly WranglerのThompson氏は、CやC++だけでなく今後他のプログラミング言語にも対応していくことを予想しています。
We’re also planning future WebAssembly features (including multi-threading, dynamic linking, and GC / first-class DOM integration) and continuing the development of toolchains for compiling C, C++, and other languages via the WebAssembly LLVM backend and Emscripten.(引用:Experimental support for WebAssembly in V8
WebAssemblyへコンパイルする「コンパイラ」が開発され、順次対応プログラミング言語が増えていけば、RubyやPythonやJavaなどといった開発のための言語選択が絞りこまれていき、現在主要な言語となっているものも、数年後数十年後には「レガシーな言語」として扱われることになるかもしれません。
多くのスマホなどに搭載されているアプリは、OSごとに開発する工数を割くことができるため、スマホアプリ開発の流れが、Webアプリケーション開発に流れていきそうです。
また今回、開発者として「不要」になりそうなJavaScriptですが、JavaScriptが大規模開発に対応できるようなバージョンアップが行われて、生き残る道筋も考えられます。
様々な変革をもたらすことになる「WebAssembly」。今後の動きは見逃せません。
情報元:「Experimental support for WebAssembly in V8」

0 コメント:

コメントを投稿