😸

WASM関連のツールまとめ

2024/11/15に公開

はじめに

WASM関連のツールはBytecode Allianceが大体取りまとめているのですが、何せツールが複数に分離しており全体像が良く分からない、ということで自分用にメモしておこうと思います。
全てをカバーするのは大変なので有名なもの/使いどころがありそうなものに絞っています。
ソース: https://github.com/orgs/bytecodealliance/repositories?type=all&q=sort%3Astars

総覧

コマンド サブコマンド 出来ること
wasmtime (全体) *.wasmを実行するためのruntime
run 実行
compile ローカル環境向けにAhead-Of-Timeコンパイル(*.wasm -> *.cwasm)
serve wasi:http/ptoxyワールドを実装したWASM Componentを実行してserve
javy jsスクリプトを元に標準入出力を扱うwasmを生成
wasm-tools (全体) WASMを扱うツール
dump wasmバイナリのdump
objdump wasmバイナリのobjdump
strip wasmバイナリからメタデータを削除
compose wasm componentのcompose
component wasm component関連、更にサブコマンドがある(wasmコンポーネント→モジュール等)
completion bash/pwsh/zshなどターミナルの補完用スクリプトを作成するコマンド
wit-bindgen (全体) 各プログラミング言語向けにWIT実装のためのモックを作成
wizer (全体) WASMに初期化用関数がある場合、初期化実行済みのWASMモジュールを生成
jco (全体) JavaScript-WASM連携関連のツール、一部wasm-toolsの機能を含む(下表では省略)
componentize JS Module -> WASM Component (ComponentizeJS)
transpile WASM ComponentをJSにトランスパイル
types WIT -> JS types
cargo-component (全体) RustのCargoサブコマンドとしてcomponentを追加
new Component実装向けにRustプロジェクトを初期化
publish wargへのリリース
ComponentizeJS (全体) JSのESM + WIT -> WASM Component
warg(registry) (全体) WebAssembly Componentのレジストリ
warg-server レジストリ用サーバの起動
publish (wa.dev含む)レジストリ宛にパッケージの公開・設定
componentize-py (全体) Python module + WIT -> WASM Component
wRPC (全体) WITファイルをベースとしたRPCシステム
wac (全体) WASM ComponentをComposeするためのツール
plug 単純なcompose、Component-Aとそのimportを実装したComponent-Bを結合して、importが不要なComponentを生成
compose WACファイル(独自形式)を元にComposeを実行
wit-deps (全体) wit向けのdependency manager
wasm-pkg-tools(wkg) (全体) WASM Componentのパッケージングツール、OCI(コンテナ)にも対応
waffle (全体) WASM <-> SSA-IR(中間表現)が可能なライブラリ

改めて見ても多すぎる...
もちろん上以外に各言語別のwasmランタイムとか、Bytecode Alliance以外(wasmerとか)が出しているものもある。

Discussion