【うぇぶあせんぶりー】

WebAssembly(Wasm) とは?

最終更新:
💡 コードを共通のバイナリ形式にし、対応環境で実行する

さまざまな言語のコンパイル先として使える、移植可能なバイナリ命令形式。対応するブラウザや実行環境で動き、WebではJavaScriptと連携して使う。高速な実行を目指すが、処理が必ず速くなるものではない。

📌 このページのポイント
共通の命令形式にし、対応環境で動かすC / C++Rustなど変換.wasmモジュールブラウザで実行JavaScriptブラウザ以外でも対応する環境で実行ホストのAPIは、対応する機能を確認速度の倍率や、全環境での動作は保証しない
C/C++やRustなどからWasmへ変換する流れ。矢印は変換・実行先・関数の呼び出しを示します。WebではJavaScriptと連携し、ブラウザ以外ではホスト側APIへの対応も必要です。
ひよこ ひよこ
WebAssemblyは、何を動かすの?
ペンギン先生 ペンギン先生
C/C++やRustなどのコードをコンパイルした、Wasm形式のモジュールを動かすよ。対応する実行環境が、その命令を処理する。特定のCPU向けの実行ファイルを、そのまま全ての端末へ配るという意味ではないんだ
ひよこ ひよこ
JavaScriptは不要になる?
ペンギン先生 ペンギン先生
WebではJavaScriptを補う設計だよ。JavaScriptからWasmの機能を呼び、Wasmから渡された機能を使うこともできる。アプリの画面やWebの機能と、移植した計算処理を組み合わせて使えるんだ
ひよこ ひよこ
使えば10倍、100倍速くなる?
ペンギン先生 ペンギン先生
固定の倍率はないよ。計算に向いた設計だけれど、処理内容、コードの作り、読み込みや呼び出しなどを含む実行条件で結果が変わる。JavaScriptを一律に遅いと決めつけず、アプリ全体で効果を測ろう
ひよこ ひよこ
ブラウザの外でも使える?
ペンギン先生 ペンギン先生
対応する実行環境があれば、サーバーや組み込み先などでも使えるよ。WASIは、こうした環境でも使えるAPIを整備する取り組み。Wasmの基本命令と、ファイルなどを扱うホスト側の機能は別なので、必要なAPIへの対応も確認しよう
ひよこ ひよこ
どの言語を選べばいい?
ペンギン先生 ペンギン先生
既存のコード、チームの知識、対象環境に対応するコンパイラやツールで考えよう。C/C++やRustなどがコンパイル先として利用している。特定の言語が全ての場合で最適、ということではないよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「WebAssembly」って出てきたら「コードを共通のバイナリ形式にして、対応する環境で動かす技術」と思えばだいたいOK!
📖 おまけ:英語の意味
「WebAssembly (Wasm)」 = Web向けの低水準の命令形式
💬 Webとの連携を目指して設計され、Wasmとも略すよ。名前にWebと付くけれど、仕様はブラウザ以外での実行も想定しているんだ

参考資料

← 用語集にもどる