公式サイト・公式ドキュメント優先で一覧にします。現在の共通仕様は WebAssembly 3.0 です。
WebAssembly共通仕様
- WebAssembly公式サイト
- WebAssembly仕様一覧
- WebAssembly Core Specification
- JavaScript API Specification
- Web API Specification
- WebAssembly proposals
- MDN WebAssembly
WASI・Component Model
- WASI公式サイト
- WASI仕様リポジトリ
- WebAssembly Component Model
- Component Modelの基本概念
- WITリファレンス
- WITのサンプル
- Component Model言語対応一覧
WITは、Component Modelのインターフェースやworldを定義するIDLです。
C / C++
Emscripten
- Emscripten公式サイト
- Emscriptenドキュメント
- インストールと入門
- C/C++移植ガイド
- C/C++とJavaScriptの接続
- Embind
- Emscripten設定一覧
- Emscripten GitHub
EmscriptenはLLVMを利用し、C/C++をブラウザ、Node.js、Wasmランタイム向けにコンパイルする総合ツールチェーンです。
Clang / LLVM
Rust
- RustとWebAssembly公式ポータル
- Rust WebAssembly Book
- wasm-bindgen Guide
- wasm-bindgenサンプル
- wasm-bindgen GitHub
- wasm-pack GitHub
- web-sys API
- js-sys API
- Rustコンパイルターゲット一覧
-
wasm32-unknown-unknown -
wasm32-wasip1
wasm-bindgenはRustとJavaScript間の高水準な型変換・関数接続を担当します。
Zig
Zigでは主に次のターゲットを使います。
wasm32-freestanding wasm32-wasi wasm64-freestanding wasm64-wasi
現状、WebAssembly専用の独立した公式入門ページは少なめで、言語リファレンスとターゲット指定を参照する形です。
AssemblyScript
- AssemblyScript公式サイト
- AssemblyScript Book
- はじめ方
- 言語仕様
- ランタイム
- コンパイラ
- 標準ライブラリ
- JavaScriptとの連携
- AssemblyScript GitHub
- 公式サンプル
AssemblyScriptはTypeScriptそのものではなく、Wasmを直接ターゲットにしたTypeScript風言語です。
Go
ブラウザ向け:
GOOS=js GOARCH=wasm go build
WASI向け:
GOOS=wasip1 GOARCH=wasm go build
Go 1.24では、WASI向け関数exportなどWasm連携機能が追加されています。
TinyGo
Go標準より小さなWasmを作りたい場合はこちらです。
C# / .NET / Blazor
- Blazor公式ドキュメント
- Blazor WebAssembly概要
- Blazor WebAssembly入門
- Blazor WebAssemblyのAOTコンパイル
- JavaScript相互運用
- .NET WebAssembly native dependencies
- .NET Runtime GitHub
- ASP.NET Core GitHub
Blazor WebAssemblyはブラウザ内で.NETランタイムとC#アプリケーションを実行でき、AOTコンパイルにも対応しています。
Kotlin
- Kotlin/Wasm概要
- Kotlin/Wasm入門
- Kotlin/WasmとJavaScriptの相互運用
- Kotlin Web開発概要
- 公式サンプル集
- Kotlin GitHub
- Compose Multiplatform
- Kotlin Multiplatform Wizard
Kotlin/Wasmには、ブラウザ向けのwasm-jsとWASI向けのターゲットがあります。
Swift
- Swift公式WebAssembly入門
- Swift公式サイト
- Swift GitHub
- SwiftWasm公式サイト
- SwiftWasm GitHub
- JavaScriptKit
- Carton
- WasmKit
Swift公式には、ブラウザ向けとWASIランタイム向けのWebAssembly SDK手順があります。
Python
Pyodide
PyodideはCPythonとPythonパッケージ群をWasm化し、ブラウザやNode.jsで実行する仕組みです。
CPython本体
Java
TeaVM
- TeaVM公式サイト
- TeaVMドキュメント
- TeaVM入門
- TeaVM Wasm GC backend
- TeaVM Wasm GCローダー
- JavaScript・Wasmモジュール作成
- TeaVM GitHub
TeaVMはJavaバイトコードを入力にして、JavaScriptまたはWebAssemblyへAOTコンパイルします。KotlinやScalaのクラスファイルも入力可能です。
CheerpJ
実行ランタイム
Wasmtime
WasmEdge
Wasmer
WAMR
組み込み機器やマイコンでは重要です。
wasm3
小型インタプリタです。
Wazero
Goだけで実装されたWasmランタイムです。
| 言語 | 名称 | 正体 | 単体/複合 |
|---|---|---|---|
| Rust | rustc | コンパイラ | 単体 |
| Rust | wasm-bindgen | JS相互運用ライブラリ+CLI | 複合寄り |
| Rust | wasm-pack | ビルド・パッケージ化CLI | 単体 |
| Rust | web-sys | Web APIバインディング | 単体 |
| Rust | js-sys | JS標準APIバインディング | 単体 |
| C/C++ | Emscripten | コンパイラツールチェーン | 複合 |
| C | emcc | C向けコンパイラドライバー | 構成要素 |
| C++ | em++ | C++向けコンパイラドライバー | 構成要素 |
| AssemblyScript | AssemblyScript | 言語・ランタイム・ツール群 | 複合 |
| AssemblyScript | asc | コンパイラCLI | 単体 |
| Go | js/wasm | ブラウザ向けターゲット | 名称 |
| Go | wasip1/wasm | WASI向けターゲット | 名称 |
| Go | syscall/js | JS相互運用パッケージ | 単体 |
| TinyGo | TinyGo | Go用別コンパイラツールチェーン | 複合 |
| TinyGo | wasm | ブラウザ向けターゲット | 名称 |
| TinyGo | wasip1 / wasip2 | WASI向けターゲット | 名称 |
| Zig | Zig | 言語・コンパイラ・ビルドツール | 複合 |
| Zig | wasm32-freestanding | ターゲット指定 | 名称 |
| Kotlin | Kotlin/Wasm | KotlinのWasmバックエンド | 構成要素 |
| Kotlin | wasmJs | ブラウザ向けGradleターゲット | 名称 |
| Kotlin | wasmWasi | WASI向けGradleターゲット | 名称 |
| Kotlin | Compose Multiplatform | UIフレームワーク | 複合 |
| .NET | Blazor WebAssembly | Webアプリフレームワーク | 複合 |
| .NET | .NET WebAssembly runtime | .NETランタイム | 構成要素 |
| .NET | Interactive WebAssembly | レンダーモード | 名称 |
| .NET | WebAssembly AOT | コンパイル方式 | 名称 |
| Python | Pyodide | Python/Wasmディストリビューション | 複合 |
| Python | CPython | Python処理系 | 複合 |
| Ruby | ruby.wasm | CRubyのWasm移植群 | 複合 |
| Ruby | CRuby | Ruby処理系 | 複合 |
| Swift | Swift SDKs for WebAssembly | 公式Wasm SDK | 複合 |
| Swift | Swift for WebAssembly | 分野・対応全体の名称 | 名称 |
| Swift | SwiftWasm | コミュニティプロジェクト | 複合 |
| Swift | JavaScriptKit | JS相互運用ライブラリ | 単体 |