WebAssembly(Wasm)3.0が公表されました。 ニュースの見出しだけを見ると「新バージョン登場!」と受け取られがちですが、実態は 離れ小島の機能群を節目で束ねた“仕様スナップショット です。本稿では、Wasmの実務と標準化を長年追いかけるエキスパート chikoski さん(X)に、Wasm 3.0の位置づけと、開発者が押さえるべきポイントを聞いてみました!
WebAssemblyエキスパート chikoskiさんをTechFeedでフォローしよう!
インタビュー動画もあります
Wasm 3.0の“正体”:バージョンというよりまとまった節目
――今回のWasm 3.0はどのような位置づけなのでしょうか。
chikoski:今回は、ドラフト段階の機能群を含む最新スナップショットが取りまとめられたという理解が適切です。JavaScriptが毎年スナップショット(年次仕様)を出すのと似ていますね。
Wasmはファイルフォーマットであると同時に、仮想マシン上で動く低水準のプログラム表現でもあります。個々の機能は提案単位で独立に議論・実装・標準化が進みます。そのうえで、ある時点で「ここまでをひとまずの到達点として束ねましょう」という整理が行われ、今回の“3.0”はまさにその節目と言えます。
例えば、Wasmのバイナリファイルヘッダに記されるフォーマットのバージョンは1.0のままで変わらないんです。変わるのは命令セットや周辺機能の可用性で、実際に使えるかどうかはランタイムが実装しているかどうかに依存します。
――なるほど、”3.0”というバージョン番号は、機能セットをまとめた“区切り”という意味なんですね。ではこの「区切り」は、開発者からするとどう役立つのでしょうか。
chikoski:ランタイムやブラウザ、サーバーレス実行環境などが「Wasm 3.0に対応」と書けば、その時点でまとまった機能を前提にできます。逆に「2.0対応」であれば「3.0で入った機能は使えない」と判断できます。その機能が使えるかどうかは、ランタイムの実装次第という基本は変わりませんが、バージョンラベルがあることで開発者は判断しやすくなります。
この記事に興味を持った方は、TechFeedのWebAssemblyチャンネルもフォローしよう!
清水さんが注目している機能は?64ビットアドレス空間、複数メモリ、ガベージコレクションサポート
――清水さんが注目している機能をいくつか教えて下さい。
chikoski:わかりやすいのは64ビットアドレス空間(通称 memory64)です。従来は実質2GB前後の上限感がありましたが、64ビット化により巨大メモリを扱う計算(AI推論、画像・動画処理など)が現実的になります。
――たしかに、それは大規模処理をする開発者にとって大きな変化ですね。
chikoski:2つめは複数メモリのサポートです。これまでWasmモジュールは1つのメモリ空間しか持てませんでしたが、複数のメモリ空間を使い分けられるようになります。例えば画像処理では入力と出力を別のメモリに持てるので管理が楽になります。
また、異なる言語で書かれたライブラリをまとめて配布するときにも便利です。1つのメモリしかないと、それぞれのヒープ領域の住み分けが難しかったのですが、複数メモリがあればモジュールごとに分けられます。
――なるほど、ライブラリを組み合わせる場面で効いてきそうですね。
chikoski:最後に注目しているのはGC(Garbage Collection)のサポートです。これまでKotlinやJava、DartなどGCを前提とした言語では、ガベージコレクタ自体を同梱する必要があり、バイナリが大きく、重くなりがちでした。Wasm側がGCをサポートすると、ランタイムに任せられる部分が増え、配布サイズの縮小や起動時間の改善が期待できます。
例えばサーバーレス環境ではこれまで、RustやCに加えてJavaScriptが後からサポートされることが多かったのですが、その実体は、QuickJSなどの軽量なJavaScriptランタイムをWasmバイナリに同梱して実行可能にしていました。今後はそういう状況が改善して、より軽量で素早く起動できるようになるかもしれません。

まとめ
――最後にメッセージをお願いします。
chikoski:Wasm 3.0は、これまで議論されてきた機能をまとめたスナップショットです。
実際に使えるかどうかはランタイム次第ですが、バージョンラベルがあることで開発者は判断しやすくなります。これをきっかけに、より多くの言語やユースケースでWasmが使われていくのではないでしょうか。
またGCや複数メモリ、64ビットアドレス空間といった機能が揃うことで、複数のプログラミング言語をWasm上で動かす素地が整ってきたと感じます。
これまではRustやCなどがWebAssembly開発の中心でしたが、今後はJavaやKotlin、Dartなどの、GCを前提とした言語も含めて、幅広い言語がWasmをターゲットにしやすくなると思います。
――Wasmのターゲット言語が広がると、使われ方もぐっと多様になりそうです。本日は大変有益なお話をありがとうございました!
本記事に関する質問やご意見などはコメントまで!エキスパートが直接答えてくれるかも!
