@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

ruby.wasmではファイルに書き込めない

require_relativeはパッチれない - @ledsun blog で、Rubyスクリプトの実行前に、Rubyスクリプトを静的にあつかってrequire_relativeを置き換えることにしました。 そこで次のアイデアを思いつきました。

Rubyスクリプトの実行前に、require_relativeの参照先スクリプトを取得して、RubyVMのファイルシステムに書き込んでしまえばいいのでは?

これができると次のメリットがあります。

  • fetch(Promise)を待つのが、RubyVMの外側になる
  • Rubyスクリプトをfetchで取得できる
  • 並列ダウンロードが可能になる

というわけで、ruby.wasmでファイリングシステムに書き込みができるか試してみます。

Rubyでファイルを書き込むワンライナーです。 irbで動くことを確認します。

irb(main):004:0> File.open("test.rb", "w", 0755) { _1.write "hello" }
=> 5

これをruby.wasmで動かすと

ruby.wasmでファイルを作ろうとすると例外が起きます。

class Errno::ENOTCAPABLE (Ruby 3.1 リファレンスマニュアル)

システムコールのエラーコードを表す例外クラスです。

ファイルをオープンできないみたいです。

あれ?でもrequireで標準Gemは読み込めます。 例えば'require "csv"'は実行可能です。 何か方法があるのかもしれません。