BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Shopify、RubyコードからWasmモジュールを作成するツールチェーン「Ruvy」をオープンソース化

Shopify、RubyコードからWasmモジュールを作成するツールチェーン「Ruvy」をオープンソース化

原文リンク(2023-11-02)

最近Spotifyによってオープンソース化されたRuvyは、RubyコードをWasmモジュールに変換するWebAssemblyツールチェーンである。ruby.wasmをベースに、RuvyはRustで実装され、パフォーマンスを向上させ、Wasmモジュールの実行を簡素化するための最適化が含まれている。

Ruvyは、ruby.wasmが提供するRubyインタプリタモジュールを活用し、wasi-vfs(WASI仮想ファイルシステム)を使用して、指定されたすべてのRubyソースファイルとともに単一のモジュールにパッケージ化する。wasi-vfsは、.wasmバイナリに埋め込まれた仮想ファイルシステムを作成し、WebAssemblyランタイムでホストファイルシステムへのアクセスを有効にすることなく、Rubyソースファイルをruby.wasmで読めるようにする一般的なメカニズムを提供する。

Ruby.wasm/wasi-vfsでデフォルトで行われるように、実行のためにメモリにロードされるときとは逆に、WasmモジュールがビルドされるときにRuby VMを事前に初期化することで、Ruvyがパフォーマンスを向上させる。ShopifyのシニアWasm開発者Jeff Charles氏は、これにより実行時のパフォーマンスが20%向上したと説明する。

さらにCharles氏は、RuvyはCraneliftコンパイラを使ってWasmからネイティブコードにコンパイルするのに必要な時間を30%に短縮すると説明する。

Ruvyを使用するもう一つの利点は、WASIの引数としてファイルパスを必要とせずに、実行構文を簡素化できることだ。これは、必要なファイルをまとめてパッケージ化しているおかげである。これは例えば、メインのエンドポイント関数に追加のWASI引数を与えることができない様々なエッジ・コンピューティング・サービスに特に関連する。

現時点では、Ruvyはソース配布版としてのみ提供されており、使用する前にビルドする必要がある。必要な依存関係rustupwasm32-wasicmake、macOSホスト用のRosetta 2など)をすべてインストールすれば、ビルドの手順は基本的にとても簡単だ。あとはmakeを実行し、以下の例のようにRuvyを実行してruby_examples/hello_world.rbソースからindex.wasmモジュールを作成するだけだ。

$ cargo run --package=cli ruby_examples/hello_world.rb -o index.wasm

前述したように、--preloadコマンドラインフラグを使って、Ruby VMに渡すべきRubyファイルを含むディレクトリを指定できる。

Charles氏は、Ruvyは現時点では単純なRubyプログラムしか実行できないことを強調している。具体的には、まだRuby gemsをrequireできないため、Ruby標準ライブラリの大部分を利用できない。将来的には、この制限を取り除くために、標準ライブラリからのコードのロードと、非ネイティブのサードパーティ製gemのロードを可能にする予定だという。

作者について

この記事に星をつける

おすすめ度
スタイル

BT