体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

清水智公@chikoski氏が語る「WebAssemblyで何ができるのか?」#html5jplat

WebAssembly(WASM)でできること

Google宇都宮佑亮@uskayさんに続いて登壇したのは、WebAssembly(WASM)コミュニティを率いている清水智公さん。セッションタイトルは「できる!WebAssembly」。WASMでどういうことができるのか、どうしたら作れるのか、使う際に気をつけることについて語った。

Unityで作ったゲームが任天堂SwitchにもWebにも展開できるものが登場している。これはUnityがすごいという話ではなく、これを実現している技術がWebGL、WASMという技術であるということ。

WASMは、ゲームのような重たいプログラムをどこでも速く動かすために使われる。例えばUnityで作ったコンテンツ、Unityちゃんが踊ったりするシーンで、エフェクトの処理などに用いられたりするが、それだけではない。

一つは他の言語の資産をWebに展開する場合。もう一つはCPUインテンショナルな処理を高速化する場合である。処理が重くなる理由は2つある。計算量が大きいこと、もしくは読み込むデータ量が多い場合だ。

どちらかに効くかというと、CPUが速ければ速くなるという処理にWASMは効いてくる。2016年3月に行った調査によると、ネイティブで書いたときに比べ、1.5倍ぐらいのスピードで動くようになる。

WASMはモダンなブラウザすべてで使えるようになっている。忘れてはいけないのは、Node8でも動くこと。サーバサイドの処理を速くすることもできる。WASMはバイナリーコード。だがファイルなので、手で書くこともできるが、たいていの人はツールを使う。WASMを生成ツールには次のようなものがある。

例えばCなら、EmscripitenかClangを使えばコンパイルできる。TypeScriptならAssembryScriptを使うことを覚えておけばよい。

WASMでできることは数値計算、線形メモリへのアクセス、関数の呼び出しである。

使い方は次の通り。

●JavaScript embedding API

WASMファイルを用意する。WASMモジュールをコンパイルする。WASMモジュールをインスタンス化する流れとなっている。インスタンス化がなぜ必要かというと、WASMはWASMからエクスポートした関数を使うだけでなく、WASMに関数をインポートして与えることができる。

どんな関数やメモリを与えるかはその場でコントロールする。このWASMにJavaScriptの関数を与える機能は非常に強力となっている。またWASMはnodeでも使える。

●Web embedding API

Webで使うときはもっと簡単に使うために、Web embedding APIとして定義されている。Webページ上での実行を前提にしているAPIでストリームコンパイルを行う。

●WebAssembly.Memory

1 2 3次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

山寺宏一&高木渉で『ポプテピピック』

GetNews girl / GetNews boy