😸
WASM関連のツールまとめ
はじめに
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