より高速なRubyのWebAssembly実装「Ruvy」、Shopifyがオープンソースで公開。Ruby仮想マシンとRubyアプリを組み合わせてビルド

今回は「より高速なRubyのWebAssembly実装「Ruvy」、Shopifyがオープンソースで公開。Ruby仮想マシンとRubyアプリを組み合わせてビルド」についてご紹介します。

関連ワード (利用者、向上、様々等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


昨年(2023年)12月にリリースされた「Ruby 3.2」では、WebAssemblyによって実装されたRubyランタイム「Ruby.wasm」が正式版となりました。これによりWebブラウザや単体のWebAssemblyランタイムの上でRubyランタイムを実行し、Rubyプログラムを実行できるようになりました。

このRuby.wasmをベースに、さらに高速なRubyのWebAssembly実装となる「Ruvy」が、Shopifyからオープンソースとして公開されました。

Calling all #Ruby developers! Explore a new tool for leveraging Ruby to create #WebAssembly modules. Check out our blog post introducing Ruvy here: https://t.co/koxtWMiKPE

— Shopify Engineering (@ShopifyEng) October 18, 2023

Ruvyの開発元であるShopifyは、Ruby on Railsを用いて大規模なECサイト構築サービスを展開しており、Rubyの開発に対して積極的に貢献していることでも知られています。例えばRuby 3.1では同社が開発した高速なJITコンパイラ「YJIT」がメインラインにマージされました。

Ruvyの実体はRubyをビルドするためのツール群

今回、同社が公開した「Ruvy」は、正確にはRuby.wasmの技術をベースに、より高速な実行を可能にするRubyのWebAssemblyバイナリを生成する一連のツール群(ツールチェーン)です。

その高速性のカギは、RubyランタイムすなわちC言語で書かれたRubyのソースコードであるCRubyをWebAssemblyバイナリにビルドする際に、実行対象となるRubyプログラムも一体化してWebAssemblyバイナリ化してしまうという点にあります。

つまりRuvyには、Ruby.wasmのようなコンパイル済みのバイナリはありません。Rubyアプリケーションごとに利用者が自分でビルドすることになります。前述の通り、そのための一連のツール群が「Ruvy」の実体です。

例えばRubyプログラム「hllo_world.rb」をRuvyで実行する場合、次のようにビルドを行い、生成された「index.wasm」を実行することで、「Hello world」という結果を得ることになります。

Ruvyはビルド時に仮想マシンを初期化済み

同社のブログ記事「Introducing Ruvy 」の説明では、Ruvyの利点は2つあると説明されています。

1つはRubyのアプリケーションと組み合わせてビルドされた時点で、Ruby仮想マシンの初期化まで済ませてしまうことによる高速化です。「Introducing Ruvy」から一部を引用します。

Whereas Ruvy pre-initializes the Ruby virtual machine when the Wasm module is built, which improves runtime performance by around 20%.

RuvyはWasmモジュールのビルド時にRuby仮想マシンを事前に初期化するため、実行時のパフォーマンスが約20%向上する。

Ruby.wasmでは、WebAssemblyがWASI(WebAssembly System Interface)を通じてファイルシステム(もしくはRuby.wasmが備える仮想ファイルシステム)を通じてRubyプログラムを読み込み、同時にRuby仮想マシンが初期化されます。

Ruvyではそのプロセスをビルド時に済ませているために、実行時には時間短縮になるというわけです。

もう1つの利点は、エッジコンピューティングのような小さなコンピューティング環境でも実行しやすい点だと説明されています。

Wasm modules created by Ruvy do not require providing a file path as a WASI argument. This makes it compatible with computing environments that cannot be configured to provide additional WASI arguments to start functions, for example various edge computing services.

Ruvyによって作成されたWASMモジュールは、WASI引数としてファイルパスを提供する必要がありません。このため、例えば様々なエッジコンピューティングサービスなど、追加のWASI引数を提供するように設定できないコンピューティング環境との互換性を実現できます。

サーバレス環境で最適に実行することを想定したJavy/Ruvy

Shopifyは「Shopify Functions」と呼ばれるサーバレス環境を提供しており、ここでWebAssemblyを実行可能です。こうしたサーバレス環境では、しかも小さなコンピューティングリソースで高速に起動し、実行可能なアプリケーションが求められます。

Shopifyは今年(2023年)2月に、このShopify Functionsで最適に実行できるようにJavaScriptエンジンをWebAssembly化した「Javy」を公開しています。

Javyは、今回のRuvyと同様にJavaScriptエンジンとJavaScriptプログラムを組み合わせてWebAssembly化するというアプローチを採用しています。Ruvyは(名称からも連想されるとおり)JavyのRuby版として、同様にShopify Functionsの環境での実行を想定して開発されたものだといえるでしょう。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
「GIGAスクール構想対象自治体の約半数がChromebookを選択」とGoogle
企業・業界動向
2021-02-19 23:46
東京学芸大と内田洋行が連携–未来型教室で得た教育ITの知見を全国へ
IT関連
2024-02-15 03:39
ポケモンGO、1週間限定「ミュウツー」再降臨 「メタグロス」もレイドに
くらテク
2021-07-17 18:09
プライバシー重視の風潮に乗りユーザーの「同意」を管理するDidomiが好調
ネットサービス
2021-07-11 12:31
「たまごサンドおいしい」オリンピック訪日記者の投稿で“コンビニ飯”に注目 ローソンも反応
ネットトピック
2021-08-06 08:04
Twilio Japan、「三越伊勢丹リモートショッピングアプリ」開発を支援
IT関連
2022-06-14 23:06
オープンソースのWebAssemblyサーバレス基盤「Wasm Workers Server 1.0」正式リリース。RubyとPythonのWASMランタイムに対応し、Ruby/Pythonでの記述が可能に
JavaScript
2023-03-09 18:07
「ChatGPT」の「高度な音声モード」、ウェブ版でも利用可能に
IT関連
2024-11-22 06:50
厚労省、Android版「COCOA」をアップデート 通知の不具合を解消、“1日1回再起動”が不要に
企業・業界動向
2021-04-22 00:01
漫画の海賊版が再び拡大 サイト相次ぎ被害急増、「漫画村」超す
IT関連
2021-03-30 08:45
ウクライナ情報変革副大臣インタビュー「IT軍団と29億円相当の暗号資産による寄付」について語る
IT関連
2022-03-05 21:17
「Xbox ワイヤレスヘッドセット」1万978円で発売
製品動向
2021-03-17 04:39
Apple、4月最終週の「iOS 14.5」リリースでATTのトラッキング申請機能スタート
アプリ・Web
2021-04-22 04:32
AWS、ロシアで新規契約の受け付けを停止–マイクロソフトも新規販売を一時停止
IT関連
2022-03-10 10:57