WebAssembly
ブラウザでネイティブに近い速度でコードを実行するバイナリ命令形式
WebAssembly とは
WebAssembly (Wasm) は、ブラウザでネイティブに近い速度でコードを実行するバイナリ命令形式である。C、C++、Rust で書いたコードを .wasm にコンパイルし、JavaScript から呼び出せる。2017 年に主要ブラウザが対応。
JavaScript vs WebAssembly
JavaScript と WebAssembly の違いを以下にまとめる。
| 観点 | JavaScript | WebAssembly |
|---|---|---|
| 実行速度 | JIT で高速化 | ネイティブに近い |
| 起動速度 | パース + JIT | デコード (高速) |
| 型 | 動的型付け | 静的型付け |
| メモリ | GC | 手動 (線形メモリ) |
| 用途 | UI、ビジネスロジック | 計算集約的な処理 |
Rust → Wasm
Rust → Wasm のコード例を示す。
// lib.rs
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u32 {
match n {
0 | 1 => n,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
wasm-pack build --target web
JavaScript からの呼び出し
JavaScript からの呼び出しのコード例を示す。
import init, { fibonacci } from './pkg/my_wasm.js';
await init(); // Wasm モジュールの初期化
const result = fibonacci(40); // ネイティブに近い速度で実行
ユースケース
WebAssembly は JavaScript では処理速度が不足する計算集約型の処理に適している。C/C++/Rust で書かれた既存のライブラリをブラウザで実行できるため、ネイティブアプリの Web 移植にも活用される。
| ユースケース | 例 |
|---|---|
| 画像・動画処理 | Photoshop Web, FFmpeg.wasm |
| ゲーム | Unity WebGL, Unreal Engine |
| 暗号化 | ハッシュ計算、暗号化処理 |
| データ処理 | CSV パース、圧縮・展開 |
| CAD / 3D | AutoCAD Web |
WASI (WebAssembly System Interface)
WASI (WebAssembly System Interface) を図で示す。
ブラウザ外での Wasm 実行:
Wasm → WASI → ファイルシステム、ネットワーク
用途:
- サーバーサイド (Cloudflare Workers)
- エッジコンピューティング
- プラグインシステム
Lambda での Wasm
Lambda での Wasm のコード例を示す。
import { readFileSync } from 'fs';
const wasmBuffer = readFileSync('./optimized.wasm');
const { instance } = await WebAssembly.instantiate(wasmBuffer);
const result = instance.exports.heavyComputation(input);
CPU 集約的な処理を Wasm で実行し、Lambda のパフォーマンスを向上させる。
Wasm の制限
Wasm の制限を以下にまとめる。
| 制限 | 説明 |
|---|---|
| DOM アクセス | 直接アクセス不可 (JS 経由) |
| GC | 手動メモリ管理 (Rust は安全) |
| デバッグ | ソースマップが限定的 |
| バンドルサイズ | .wasm ファイルの追加 |
WebAssembly を扱う関連書籍も多い。
この記事は役に立ちましたか?
関連用語
関連する記事
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版は初版と何が違うか - 買い直し判断ガイド
通称「徳丸本」こと体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 (2018 年) と初版 (2011 年) の違いを出版社公表の改訂内容から整理。章の削除 / 新設 / 追加点の一覧と、初版所有者が買い直すべきかの判断基準を解説します。
読書メモは未来の自分への手紙である
技術書を読んだときのメモは、数ヶ月後 / 数年後の自分が読み返して助かる贈り物になります。「あのとき何を考えていたか」を残す読書メモの書き方と、長期的な活用法を紹介します。
技術書の読書メモ術 - 読んだ内容を確実に定着させる記録法
技術書の内容を定着させる 3 行メモ法と、ツール選び、メモを実務に活かす仕組みを紹介します。