はじめに
2022/09/21、Wasmtime のバージョンが 1.0.0 になりました。
Wasmtime とは WASI のリファレンス実装です。
WASI というのは、WebAssembly System Interface の略であり、WebAssembly をブラウザのみならず汎用機場で実行するための API 標準仕様になります。
つまり Java バイトコードのように、一度生成した WebAssembly のバイナリを、あらゆる OS 上で動作させることができるのが Wasmtime になります。
本記事では、Rust コードから生成した WebAssembly を Wasmtime で実行します。
動作環境
- Windows 11
- WSL Ubuntu 20.04
- Rust 1.63.0
- Wasmtime 1.0.0
Rust コードから WebAssembly 生成
Rust インストール
まず WSL に Rust コンパイラをインストールします。
rustup が必要になりますので、Ubuntu 公式リポジトリからのインストールでは不十分です。
Rust 公式手順でのインストールが必要です。
Rust 公式ページのコマンドを実行して、インストールスクリプトのダウンロードおよび実行をします。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
途中で以下の選択肢を問われますが、そのまま Enter するとデフォルトでのインストールが行われます。
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>
インストール完了後は source コマンドで PATH 環境変数を更新します。
$ source $HOME/.cargo/env
WebAssembly の生成
まずコンパイルするためのソースコードを用意します。
Wasmtime の公式サンプルと同じで、Hello world を出力するだけのコードです。
fn main() {
println!("Hello, world!")
}
次に、Rust のターゲットに wasm32-wasi
を追加します。
これによって、WASI 用の WebAssembly をコンパイラから出力させることができるようになります。
$ rustup target add wasm32-wasi
コンパイル時に、先ほど追加したターゲットを指定することで WebAssembly が生成されます。
$ rustc main.rs --target wasm32-wasi
$ ls main.wasm
main.wasm
WebAssembly の実行
Wasmtime のインストール
WebAssembly を実行するために Wasmtime をインストールします。
公式の手順に従います。
$ curl https://wasmtime.dev/install.sh -sSf | bash
インストール後、シェルを再起動して環境変数を更新しておきます。
$ exec $SHELL -l
WebAssembly の実行
ここまでできたら wasmtime コマンドで WebAssembly を実行することができます。
$ wasmtime main.wasm
Hello, world!
Hello, world! が出力されました。