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
コニカミノルタの工場でまた爆発 7月の爆発火災から復旧直後
企業・業界動向
2021-08-14 04:27
吉田カバン、公式ECサイト多言語化で「WOVN.io」導入
IT関連
2023-01-19 00:13
サイバーエージェント、エイベックスの筆頭株主に
企業・業界動向
2021-05-29 09:59
日立と阪急阪神HD、情報連携アプリを活用したヘルスケアサービスの実証を開始
IT関連
2023-04-12 20:18
スウェーデンの電動航空機スタートアップHeart Aerospaceが200機を受注
モビリティ
2021-07-27 02:23
タニタが「アイドルマスター」コラボ計量器 歌詞の“空耳”きっかけで「5年の時を経て」実現
ネットトピック
2021-08-11 19:48
東日本大震災から進化を続ける“移動基地局” 災害時の通信ライフラインを確保する最新技術
トップニュース
2021-03-12 11:09
WebAssemblyアプリ開発で最も使われている言語は3年連続で「Rust」、Webアプリ開発が最多、欲しい機能はスレッド。The State of WebAssembly 2023
JavaScript
2023-10-27 22:55
ビールの醸造かすを生分解性フィルムに変えるMi Terroが1.7億円調達
IT関連
2022-03-07 15:25
SoftBankが米国のヒスパニック系移民向けサービスに大型投資
フィンテック
2021-04-25 16:43
富士通、企業のSX推進を支援する「Uvance」–2025年度に売上高7000億円目指す
IT関連
2023-09-27 10:57
無料版「Google Meet」の最大通話時間、3人以上は60分までに戻る
アプリ・Web
2021-07-14 13:27
在宅・被災地などの医療現場でリアルタイム検査が可能な免疫センサー機器を開発するイムノセンスが1.3億円調達
ヘルステック
2021-04-07 00:41
AWS、わざとクラウド障害を起こす新サービス「AWS Fault Injection Simulator」提供開始。カオスエンジニアリングをマネージドサービスで
AWS
2021-03-17 00:12