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契約審査プラットフォーム「LegalForce」が契約書作成や審査受付を一元化できる「案件管理」機能を発表
リーガルテック
2021-07-09 12:08
パナソニック、ローカル5Gの実証実験を開始
IT関連
2021-01-19 13:08
KDDI、国際電話の着信拒否機能を提供 「ワン切り詐欺」防止へ
セキュリティ
2021-02-09 12:50
電通のグループ横断組織、メタバース活用を支援する新ソリューション
IT関連
2022-05-27 20:27
AWSの主要サービスをローカルでエミュレート、「LocalStack」が1.0に到達
AWS
2022-07-25 13:27
VCのAntlerはアフリカでどうやってアーリーステージのスタートアップを構築しているのか
VC / エンジェル
2021-03-17 22:21
GMO、希少ドメインの先行予約開始 「get.beer」が約45万円など計82万件 22日まで
企業・業界動向
2021-04-13 21:48
エキナカの“一等地”にeスポーツ施設……なぜ? JR東に聞いた (1/2 ページ)
DX
2021-03-09 01:19
第1回:ソーシャルエンジニアリングの歴史と進化
IT関連
2022-08-13 09:42
IntelのゲルシンガーCEO、「半導体不足はあと2年続く可能性がある」
企業・業界動向
2021-06-02 02:58
SailPoint、国内にサービス提供基盤を構築–AWSの東京リージョンを活用
IT関連
2022-02-01 20:33
国内企業のAI活用、リーダー企業とフォロワー企業で格差進む–IDC調査
IT関連
2021-03-17 00:57
「Chromebook」で仮想デスクトップを使用するには–タスク別にアプリを整理
IT関連
2022-08-19 23:47
マイクロソフト、生成AIのリスク特定に役立つ「PyRIT」ツールを公開
IT関連
2024-02-27 07:42