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!

コメント