WebAssemblyを使ってRubyプログラムをWASIアプリケーションとしてブラウザ外で動かす
はじめに
前回の記事ではRubyプログラムをブラウザ上で動かしてみました。今回はRubyプログラムをブラウザ外でWASIアプリケーションとして動かしてみます。Rubyの実行環境込みでパッケージングすることで、可搬性のある配布物を作ることができます。
WASIパッケージを作る
ruby.wasm のページが参考になります。
Dependencies のところに書かれている wasi-vfs と wasmtime を先にインストールします。
wasi-vfsのインストール
wasi-vfs のサイトの Installation の通りです。
$ export WASI_VFS_VERSION=0.4.0
$ unzip wasi-vfs-cli-x86_64-unknown-linux-gnu.zip
$ sudo mv wasi-vfs /usr/local/bin/wasi-vfs
wasmtimeのインストール
wasmtime のサイトの Installation の通りです。
$ curl https://wasmtime.dev/install.sh -sSf | bash
WASIパッケージを作る
まずビルド済の ruby.wasm をダウンロードして展開します。
$ curl -LO https://github.com/ruby/ruby.wasm/releases/latest/download/ruby-3.2-wasm32-unknown-wasi-full.tar.gz
$ tar xfz ruby-3.2-wasm32-unknown-wasi-full.tar.gz
$ mv 3.2-wasm32-unknown-wasi-full/usr/local/bin/ruby ruby.wasm
実行対象のRubyプログラムを作ります。
$ mkdir src
$ echo "puts 'Hello, World!'" > src/my_app.rb
wasi-vfs でパッケージングします。
$ wasi-vfs pack ruby.wasm --mapdir /src::./src --mapdir /usr::./3.2-wasm32-unknown-wasi-full/usr -o my-ruby-app.wasm
実行
wasmtime を使って実行します。実行対象のRubyプログラムをパッケージ内のパスで指定します。
$ wasmtime my-ruby-app.wasm -- /src/my_app.rb
Hello, World!