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

2022年7月13日(水)
松下 康之 - Yasuyuki Matsushita
WebAssemblyの最新情報をオライリーの著書を執筆したエンジニアが解説。

WebAssemblyの最新情報について、Brian Sletten氏による解説動画から紹介する。Sletten氏はオライリーから2021年に出版された書籍「WebAssembly: The Definitive Guide」の著者でもある。この動画は2022年2月22日にWasm Chicago Meetupで公開されたものだ。タイトルは「The Whole WebAssembly Enchilada」、メキシコ料理のエンチラーダという言葉を使っていることからもわかるように現時点でのWebAssemblyに関わるソフトウェアやツール、関連企業を網羅的に紹介する内容となっている。エンチラーダはさまざまな具材をひとつの皿に盛り付けた料理で、ツールから実装例、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氏による語りやデモによって説明されているためここでは簡単な訳を付けた。

  1. Mechanism for Code Reuse:コード再利用のためのメカニズムとしてのWASM
  2. Extend the Universal Client:クライアント用モジュールとしてのWASM
    TensorFlowとRustで書かれたSudoku Solverを例に解説
  3. Extend the Server:サーバー自体を拡張するためのWASM
    DenoにおけるWASMの利用を例に説明。
  4. Sandboxed Environment:実行環境をセキュアなサンドボックス化するための仕組みとしてのWASM
    対象となるWASI、Wasmer、WAPMなどを紹介
  5. Optimizing Engine:高速化のためのWASM
    JavaScriptに比べて高速なことを説明
  6. Plugin Engine:プラグインとして拡張するためのWASM
    MS Flight Simulatorを例に挙げて説明
  7. Notebook Environment:科学演算のためのWASM
    IodideというJupyter NotebookのJavaScript版のWASMによる実装を紹介
  8. Embedded Systems:エッジやエンベデッド向けシステムのためのWASM
  9. Strategy for Development:開発ツールの充実を紹介
    eguiというRustで書かれたGUIモジュールを紹介
  10. Implementation Details:WASMが使われる実装例
    Unoを例に挙げてマルチプラットフォームでの実装を紹介
  11. Emulation Environment:WASMを使ったエミュレーションの実装
    WebAssembly.shとwebvmの紹介
  12. Decentralized Systems:分散システムのプラットフォームとしてのWASM
    IPFSを例に挙げて分散型システムを解説
  13. Cloud/Edge Computing Environment:エッジのためのWASM
    WasmEdge、wasmCloudを例に挙げてエッジでの実装を説明
  14. Mediating Hardware Differences:ハードウェアの違いを吸収するためのWASM
    AppleシリコンやRISC-Vでの実装を解説。

ここから前半として「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 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の公式ドキュメントから引用

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の解説:https://www.tensorflow.org/js?hl=ja

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

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

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

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

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

OSSイベント

Open Source Summit Japan 2022開催。車載からストレージ、Kubernetesまで幅広いトピックをカバー

2023/4/26
2022年12月、横浜でOpen Source Summit Japanが開催された。リアルでは約500名が参加し、車載システムからSBoM、AIまで広範なセッションが行われた。
開発言語イベント

WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり

2023/4/11
ByteDanceのシリコンバレーオフィスで開催されたWebAssemblyのミートアップを紹介。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています