RubyのWebAssembly/WASIへの移植が実現、プレリリース版のバイナリ公開。RubyGemsにも対応

今回は「RubyのWebAssembly/WASIへの移植が実現、プレリリース版のバイナリ公開。RubyGemsにも対応」についてご紹介します。

関連ワード (報告、正式、開発助成金等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

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


Ruby言語のインタプリタをWebAssemblyランタイムで実行できるようにする移植作業が実現しました。WebAssembly版Rubyのバイナリファイルがプレリリース版として公開され、実際に試すことができます(ruby/ruby.wasm)。

RubyのWebAssemblyへの移植作業が始まったことは、1月に公開した記事「RubyがWebAssemblyのWASI対応へ前進。ブラウザでもサーバでもエッジでもどこでもWebAssembly版Rubyが動くように」で紹介しましたが、この移植作業が早くも完了したことが、移植を行ったkatei (Yuta Saito)氏が公開したドキュメント「An Update on WebAssembly/WASI Support in Ruby」で報告されています。

fig

このドキュメントは、Rubyアソシエーションによる開発助成金の対象であった今回のWebAssembly/WASIへの移植作業について、その完了を報告するものです。

今回の移植作業はRubyのリファレンス実装であるCRubyに対して行われました。そのためRubyの次バージョンでは、Webブラウザを始めとするWebAssemblyランタイム上でRubyのインタプリタが実行できる、WebAssembly版Rubyの正式版が登場することはほぼ確実とみられます。

これによりWebブラウザやエッジなどさまざまなWebAssemblyランタイム上でRubyインタプリタが実行できるようになり、そこでRubyのコードがそのまま実行可能になることを意味します。

実際に前述のドキュメント「An Update on WebAssembly/WASI Support in Ruby」では、WebAssembly版Rubyを用いてWebブラウザ上でRubyインタプリタを走らせることで、Rubyコードを実行する以下の3種類のデモ環境が紹介されています。

  • TryRuby now supports CRuby as an engine option
  • Optcarrot on browser
  • irb on browser

WASI対応で高いポータビリティ。性能はmrubyとほぼ同等

今回行われたRubyのWebAssemblyへの移植は、単にRubyのリファレンス実装であるCRubyのソースコードをWebAssemblyバイナリへコンパイルしたものではなく、OSのファイルシステムへのアクセスなど、OSに依存するシステムコールなどを抽象化してポータビリティを実現する業界標準仕様の「WASI」(WebAssembly System Interface)への対応を含んでいます。

そのため、WASIに対応したWebAssemblyライタイム上であれば、このWebAssembly/WASI版RubyはOSやWebブラウザなどのプラットフォームに依存することなく、どこでも実行可能なポータビリティを備えたWebAssemblyバイナリとなっています。

また、仮想ファイルシステム(VFS)機能も搭載しており、Webブラウザのような基本的にはファイル操作ができない環境でもファイルシステムからの読み込みなどの操作を可能にしています。

VFSについて、移植を行ったkatei (Yuta Saito)氏はPublickeyからの質問に答えて以下のように説明しています。

「VFSもRubyに必要な機能は実装が完了しております。VFSではBytecode AllianceのWasm事前初期化ツールWizerを使うことで初期化中にホストのファイルを吸い出し、開発者がファイルを埋め込む際にRuby自体のビルドを必要としない方式を採用しています」

つまり事前初期化ツールを用いて仮想ファイルシステムに「.rb」を埋め込んでおけば、開発者はシングルファイルでRubyのアプリケーションがデプロイ可能なバイナリを作成可能になり、Rubyアプリケーションの配布が容易になる、ということです。

またRubyGemsなどの周辺ツールとの連携については「RubyGemsがWASI環境で動作するようになり、拡張ライブラリを含まないGemであれば動作するようになっています。またJavaScriptとの連携強化も行っており、Rubyとホスト環境との相互運用のためのnpmパッケージを公開しております」とのこと。

「An Update on WebAssembly/WASI Support in Ruby」では処理速度を比較したベンチマークテストの結果も示されています。

「パフォーマンスに関してはWasmの例外機能の成長によって更に改善出来る可能性がありますが、プロジェクト期間で一定の改善を達成でき、optcarrot(Ruby製ゲームエミュレータ)ではmrubyと同レベルのベンチマーク結果となっています」

RubyをWebAssembly/WASI環境で実行可能にする移植作業は、これで実現できたといえそうですが、katei (Yuta Saito)氏は今後も以下のような作業をしていくつもりとのことです。

「今後の予定としては、SpiderMonkeyで行われているWizerを使った高速化テクニックの検証や、VFSのサイズ圧縮、RDocとの連携によってライブラリドキュメントのサンプルRubyコードをブラウザ上で実行可能にする、といったことを思案しております」

Rubyのメジャーバージョンアップは毎年クリスマスのタイミングで行われています。今年のクリスマスに登場するであろうRuby 3.2でWebAssembly/WASI版Rubyの正式リリースを楽しみに待つことにしましょう。

関連記事

移植作業の開始を紹介したこの記事で、CRuby、WebAssembly、WASIなどについて詳しく紹介していますので、合わせてお読みください。

  • RubyがWebAssemblyのWASI対応へ前進。ブラウザでもサーバでもエッジでもどこでもWebAssembly版Rubyが動くように

COMMENTS


Recommended

TITLE
CATEGORY
DATE
インテルが直面する課題–競合の台頭とAI時代への適応
IT関連
2024-10-19 22:02
レノボ、端末管理ソフトを提供–リモートワーク対応のIT部門の負担を軽減
IT関連
2022-02-17 10:41
金属3Dプリント構造物では世界最大級、センサーで痛み具合・交通量が計測可能なステンレス製3Dプリント橋が登場
パブリック / ダイバーシティ
2021-07-20 16:56
アドバンスト・メディア、LGWAN対応のAI音声認識文字起こしを開始
IT関連
2022-12-08 09:08
三越伊勢丹、グループ内顧客・商品データ分析基盤をクラウドに移行
IT関連
2023-03-22 01:56
グーグルのProject Zero、パッチ適用を促すため30日間の猶予期間を新設
IT関連
2021-04-19 16:49
パロアルトネットワークス、「Prisma Access 2.0」を提供開始
IT関連
2021-04-13 10:01
Twitterがより目立つ「誤報警告ラベル」をテスト中
ネットサービス
2021-07-03 17:31
TikTokはホロコーストに関する誤情報に立ち向かっているが、反ユダヤ主義は根強い
IT関連
2022-01-30 19:57
日本HP、リモートアクセスやハイブリッドワークを実現する新ワークステーション
IT関連
2023-04-20 00:44
NECと東京海上日動、企業の再生可能エネルギー導入と脱炭素経営で協業
IT関連
2021-05-28 05:57
EAがロシアとベラルーシでのゲーム・コンテンツ販売を停止、Origin、EA Appでの購入不可に
IT関連
2022-03-08 19:16
Deel、渋谷区「SHIBUYA STARTUP SUPPORT」と提携–スタートアップ企業を支援
IT関連
2022-11-22 01:17
NTT西、日本MSと協業–自治体DXで立ちはだかる壁にソリューション提供
IT関連
2023-05-24 07:33