wasmer

Takami Torao wasmer 1.0 #WASM
  • このエントリーをはてなブックマークに追加

概要

wasmer は OS やチップセットから隔離された環境で WebAssembly バイナリを実行できる軽量な仮想マシン。

  1. 概要
  2. hello world までの手順
    1. wasmer と wapm のインストール
  3. 多言語から WebAssembly 機能の呼び出し

hello world までの手順

Rust で記述された hello, world プログラムを WebAssembly にコンパイルして実行するまでの手順について。

wasmer と wapm のインストール

wasmer.io で紹介されているインストールスクリプト経由のインストール以外にも github のリリースページから実行環境ごとのバイナリを入手して手動でインストールすることもできる。

Linux インストール

bash インストーラーで ~/.wasmer/bin に wasm と wapm がインストールされる。

$ curl https://get.wasmer.io -sSfL | sh
Welcome to the Wasmer bash installer!
...
check: wasmer 1.0.0 installed successfully ✓
wasmer & wapm will be available the next time you open the terminal.
If you want to have the commands available now please execute:

source /home/torao/.wasmer/wasmer.sh

$ ~/.wasmer/bin/wasmer --version
wasmer 1.0.0 
Windows インストール

PowerShell からインストールスクリプトを実行する。正常終了すると PATH 環境変数が更新されるので、新しく PowerShell / コマンドプロンプトを起動すると wasmer コマンドが使えるようになっている。

> iwr https://win.wasmer.io -useb | iex
...
> wasmer --version
wasmer 1.0.0

ただし、PowerShell はデフォルトで PowerShell スクリプトが実行できないセキュリティーポリシー (Restricted) に設定されているため、ポリシー設定を変更していなければ以下のようなエラーが表示されるだろう。

> iwr https://win.wasmer.io -useb | iex
PowerShell requires an execution policy in [Unrestricted, RemoteSigned, ByPass] to run the Wasmer Installer.
For example, to set the execution policy to 'RemoteSigned' please run :
'Set-ExecutionPolicy RemoteSigned -scope CurrentUser'

エラーメッセージにあるように実行ポリシーを RemoteSigned に変更してからインストールを実行する。そしてインストール後に Set-ExecutionPolicy Restricted -scope CurrentUser で元に戻しておく。

多言語から WebAssembly 機能の呼び出し

Rust プロジェクトの作成と設定設定

Rust および Cargo はすでにセットアップされているものとする。

> cargo version
cargo 1.48.0 (65cbdd2dc 2020-10-14) 

cargo new で新しい Cargo プロジェクトを作成し、Cargo.taml の依存ライブラリに wasmer を追加する。

> cargo new wasmer-helloworld
     Created binary (application) `wasmer-helloworld` package
> cd wasmer-helloworld
[package]
name = "wasmer-helloworld"
version = "0.1.0"
authors = ["TAKAMI Torao <koiroha@gmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
wasmer = "1.0"