WebAssemblyに何が起こったのか
98日前原文(emnudge.dev)
概要
- WebAssembly(Wasm)の現状と実用例を解説
- Wasmの本質的な役割と設計思想
- 速度・安全性・移植性の観点からの評価
- 言語開発や今後の展望について考察
- WasmがJavaScriptの完全な代替ではない理由を説明
WebAssemblyの現実世界での利用
- GodotはWasmを使いWeb向けゲームを構築
- Squoosh.appは画像処理ライブラリの利用にWasmを活用
- ZellijはプラグインエコシステムにWasmを採用
- FigmaはC++コードをWasmに変換しブラウザで利用可能化
- StackblitzやRuffleもWasmを重要な基盤技術として使用
- これらの多くでWasmは製品や主要機能の根幹を担う
- ただし、Wasmベースのフレームワークのみで構築された大規模Webサイトはまだ少数
- 直接Wasm向けにアプリケーションを構築する例も一般的ではない現状
WebAssemblyとは何か
- 一言で言うとWebAssemblyは言語
- 「Wasmの速度は?」という問いは言語そのものより実行エンジン依存
- JavaScript同様、Wasm自体に速度はなく、V8等のエンジン性能が重要
- 問われるべきは「この言語の構造が現代ハードウェアにどれだけ効率的にマッピングできるか」
効率的なマッピング
- Wasmはアセンブリ言語に近い抽象度を持つ
- ただし完全なローレベルではなく、より高水準
- 大半のアセンブリ言語へ効率的にコンパイル可能
- WAT(WebAssembly Text Format)で手書きも可能
- JVMバイトコードと似た設計思想だが、APIが小さく安全性が高い
- メモリ管理や権限はより厳格で、ホストからの明示的なインポートが必要
コンパイルターゲットとしてのWasm
- **Rust, C, Zig, Go, Kotlin, Java, C#**など多くの言語がWasmへコンパイル可能
- Python, PHP, Rubyなどインタープリタ言語もWasm上で動作
- AssemblyScript, Grain, MoonBitなどWasm専用言語も存在
- ガーベジコレクタの有無も選択可能(GC対応は最近の進化)
- ブラウザにはWasmエンジンが標準搭載
- Wasmtime, WasmEdge, Wasmer等、独立実装も多数存在
- 単一バイナリ成果物を生成し、ハードウェア非依存で実行可能
セキュリティとその恩恵
- deny-by-default設計、最小限API、隠蔽された制御フロースタック、リニアメモリで高い安全性
- 単一プロセス内でプロセス並みの分離を実現
- CloudflareはV8 Isolateで未信頼コードを高速かつ安全に実行
- Fermyonはミリ秒未満の起動時間を実現
- セキュリティが効率や新機能解放につながる
- RuffleはFlashを安全に復活、PyodideはPythonを安全に実行
- FigmaはQuickJS(Wasmビルド)でプラグインを安全に実行
移植性と組み込みやすさ
- Wasmランナーは軽量で多様な環境に対応
- プラグインエコシステムでZellij, Envoy, Lapce等がWasmを採用
- JSエンジン環境でWasmがあれば多様なプログラムが利用可能
- 画像処理、OCR、物理エンジン、メディアツール、DB、パーサ等で活用
- GodotやFigmaはC++コードをWasm経由でブラウザ対応
- 言語間の橋渡し用途が主流
速度とサイズの再考
- ブラウザはJSと同様のパイプラインでWasmを実行
- 言語やコンパイラの最適化次第で効率向上が可能
- JITエンジンの特性やメガモーフィック関数の回避も影響
- ホスト境界のコストやバイナリ肥大化の課題も存在
- WASI等の標準化で改善が進む
- Zigは特に小さなWasmバイナリを生成
- ネイティブ環境でのWasmはスレッドやIOでコスト増
- 多くの用途で「十分速い」が、極端なパフォーマンス要求には不向き
言語開発と今後
- Wasm IO YouTubeチャンネルなどで活発な議論・発表
- 標準化と進化のスピードに賛否両論
- W3CワーキンググループとBytecode Allianceで異なる進行
- WITやWebAssembly Component Model等、周辺ツールも急速発展
- 進化の可視性が低く「何も起きていない」と感じる人も多い
- WasmはJSの完全な代替とはならず、主にライブラリ作者が活用
- アプリ開発者には内部実装がブラックボックス化
- フレームワーク(Blazor, Leptos等)経由でWasm利用が進行
まとめ
- WebAssemblyは多くの分野で現実的な価値を発揮
- 速度・安全性・移植性を兼ね備えた汎用コンパイルターゲット
- 直接的な「革命」ではなく、裏方的技術基盤として浸透中
- 今後も標準化やエコシステムの進化が期待される