WebAssemblyを取り巻く最新情報をMeetupから紹介(前半)

WebAssemblyの最新情報について、Brian Sletten氏による解説動画から紹介する。Sletten氏はオライリーから2021年に出版された書籍「WebAssembly: The Definitive Guide」の著者でもある。この動画は2022年2月22日にWasm Chicago Meetupで公開されたものだ。タイトルは「The Whole WebAssembly Enchilada」、メキシコ料理のエンチラーダという言葉を使っていることからもわかるように現時点でのWebAssemblyに関わるソフトウェアやツール、関連企業を網羅的に紹介する内容となっている。エンチラーダはさまざまな具材をひとつの皿に盛り付けた料理で、ツールから実装例、WebAssemblyをビジネスの中核に採用する企業までを紹介するセッションの内容を表していると言えるだろう。

WebAssemblyを網羅的に解説するセッション

動画:Brian Sletten: The Whole WebAssembly Enchilada

まずSletten氏はWebAssemblyが「MVP(Minimum Viable Product:実用最小限の製品)としてのクライテリアを満たしているか?」という質問について、MozillaのLin Clerk氏のブログ記事のイラストを引用して紹介した。

参考:WebAssembly's post-MVP future: A cartoon skill tree

このブログではWebAssemblyについてさまざまな観点から評価した上で、WebAssemblyが単にブラウザー上のプログラミング言語(JavaScriptのような)以上の存在になりつつあることを紹介するものとなっている。

その上でSletten氏は、WebAssemblyの機能や特徴を紹介するためにソフトウェア自体を解説するのではなく「どういう使われ方があるのか?(ユースケースごとの説明)」を解説している。これはユニークな手法といえるだろう。この動画は約2時間という長さなので、ここではユースケースとして紹介された内容をリストアップした上でその中から関連するソフトウェアを紹介することにしたい。

Sletten氏が挙げたユースケースは以下の通りだ。これらのユースケースはスライドとして詳しく説明されるわけではなく、すべてSletten氏による語りやデモによって説明されているためここでは簡単な訳を付けた。

Subscribe to get access

Read more of this content when you subscribe today.

ここから前半として「Extend the Universal Client」「Sandboxed Environment」「Optimizing Engine」の内容を紹介する。

Extend the Universal Client(Sudoku Solver)

WebAssemblyはブラウザー上でJavaScript以外のプログラミング言語によるコードを実行するためのバイナリーフォーマットとして登場したが、この項では単にHTMLを拡張するだけではなくOpenCVやTensorFlowなどの汎用なライブラリーとも連携できることを紹介している。またGoogle Earthを例に挙げて、クライアント側での進化が続いていることなども強調した。

Sudoku Solverについては2020年の以下のブログを参照されたい。

参考:A WebAssembly Powered Augmented Reality Sudoku Solver

Sudoku Solverの概要

このアプリケーションは紙に印字されたSudokuの問題をイメージデータとして取り込み、OpenCVによって補正した上でTensorFlowが数値を認識、その後でRustで書かれたコードがSudokuを解くという流れになっている。現在WebブラウザーがさまざまなITシステムにおけるユニバーサルなクライアントとなっていることはすでに常識だが、それをさらに拡張することがWebAssemblyによって可能になったというのが要点だ。特に機械学習において、Python以外にJavaScriptが使えるだけではなくバックエンドにWebAssemblyを使うことで、Rustが持っている並列処理などを効率的に活用できることがこのサンプルで理解できる。

Sandboxed Environment

Sandboxed Environmentについてはホスト側のシステムにアクセスするためのインターフェースであるWASI(WebAssembly System Interface)、サーバー側でWebAssemblyを実行するためのランタイムであるWasmer、WebAssemblyのパッケージマネージャーのWAPM(WebAssembly Package Manager)を例に挙げて紹介した。

Wasmerの公式ドキュメントから引用

WasmerはWAPMのプロジェクトとも関係しているようで、単にランタイムという位置付けから開発したモジュールの再利用という側面でも開発が進んでいると思われる。

参考:Wasmer公式ドキュメント:https://docs.wasmer.io/

WAPMはNode.jsにおけるnpmのWebAssembly版とでも言えるだろうが、すでに複数のパッケージが参照できるようになっている。npmは2020年にGitHubに買収されている(つまりMicrosoftの配下)ことと比較して、WAPMはWebAssembly関連のベンチャーであるWasmerの事業であり、今後は商用サービスを目指す可能性もあるだろう。WebAssemblyのエコシステムの拡大のためにはパッケージリポジトリは重要な役割になるだろう。

参考:WAPM公式サイト:https://wapm.io/

Optimizing Engine

Optimizing Engineという項では、JavaScriptに比較して高速な実行が可能であるという部分に着目して説明を行っている。ここではGoogleが開発したTensorFlowのJavaScript版、Tensorflow.jsのバックエンドとしてWebAssemblyを使った場合の性能比較を例に解説を行っている。例として挙げられているのは顔認識のアプリケーションにおいてバックエンドにWebAssemblyを使い、SIMD構成を取った場合、さらにマルチスレッドで実行した場合の性能比較だ。

参考:TensorFlow.jsの解説:Original Post>

WebAssemblyをバックエンドにして並列化などを行った場合の性能比較

単純にTensorFlowをJavaScriptとして使う場合に比較して、約8倍から約20倍まで高速化することが可能であることが紹介されている。

JavaScript以外のプログラミング言語をブラウザーで使うためのWebAssemblyが、サーバーでの実装が進んだことで大きな可能性を秘めていることを示している。ここまでを前半として、以降のユースケースは後半の記事で紹介したい。