WebAssemblyを取り巻く最新情報をMeetupから紹介(前半)
WebAssemblyの最新情報について、Brian Sletten氏による解説動画から紹介する。Sletten氏はオライリーから2021年に出版された書籍「WebAssembly: The Definitive Guide」の著者でもある。この動画は2022年2月22日にWasm Chicago Meetupで公開されたものだ。タイトルは「The Whole WebAssembly Enchilada」、メキシコ料理のエンチラーダという言葉を使っていることからもわかるように現時点での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氏による語りやデモによって説明されているためここでは簡単な訳を付けた。
- Mechanism for Code Reuse:コード再利用のためのメカニズムとしてのWASM
- Extend the Universal Client:クライアント用モジュールとしてのWASM
TensorFlowとRustで書かれたSudoku Solverを例に解説 - Extend the Server:サーバー自体を拡張するためのWASM
DenoにおけるWASMの利用を例に説明。 - Sandboxed Environment:実行環境をセキュアなサンドボックス化するための仕組みとしてのWASM
対象となるWASI、Wasmer、WAPMなどを紹介 - Optimizing Engine:高速化のためのWASM
JavaScriptに比べて高速なことを説明 - Plugin Engine:プラグインとして拡張するためのWASM
MS Flight Simulatorを例に挙げて説明 - Notebook Environment:科学演算のためのWASM
IodideというJupyter NotebookのJavaScript版のWASMによる実装を紹介 - Embedded Systems:エッジやエンベデッド向けシステムのためのWASM
- Strategy for Development:開発ツールの充実を紹介
eguiというRustで書かれたGUIモジュールを紹介 - Implementation Details:WASMが使われる実装例
Unoを例に挙げてマルチプラットフォームでの実装を紹介 - Emulation Environment:WASMを使ったエミュレーションの実装
WebAssembly.shとwebvmの紹介 - Decentralized Systems:分散システムのプラットフォームとしてのWASM
IPFSを例に挙げて分散型システムを解説 - Cloud/Edge Computing Environment:エッジのためのWASM
WasmEdge、wasmCloudを例に挙げてエッジでの実装を説明 - 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の問題をイメージデータとして取り込み、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は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
単純にTensorFlowをJavaScriptとして使う場合に比較して、約8倍から約20倍まで高速化することが可能であることが紹介されている。
JavaScript以外のプログラミング言語をブラウザーで使うためのWebAssemblyが、サーバーでの実装が進んだことで大きな可能性を秘めていることを示している。ここまでを前半として、以降のユースケースは後半の記事で紹介したい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- WebAssemblyを取り巻く最新情報をMeetupから紹介(後半)
- WebAssemblyとRustが作るサーバーレスの未来
- OpenSSFのメンバー数が100社を突破、「法律専門家のためのWebAssembly」日本語版を公開
- KubeCon Europe 2023共催のWasm Day、Cosmonicが作成したWASMを解説する絵本を紹介
- Wasmの現状と将来の計画をBytecode Allianceが公開。CosmonicのBailey Hayes氏によるセッションを紹介
- KubeCon EU 2021からセキュアでコンパクトなバイナリーフォーマットWASMのセッションを紹介
- CloudNative Days Tokyo 2023から、WasmのクラウドネイティブやAI推論での利用を解説
- WasmCon 2023からLLMをWASMで実装するセッションを紹介
- KubeCon Europe 2023共催のWasm Dayから、AdobeのWASMユースケースを紹介
- Wasmer.io、WebAssemblyランタイム「Wasmer 5.0」をリリース