@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる?

Enable src attribute in script tag in browser.script.iife.js. by ledsun · Pull Request #49 · ruby/ruby.wasm · GitHub が取り込まれたので使ってみました。

<script defer src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-10-01-a/dist/browser.script.iife.js"></script>
<script type="text/ruby" src="main.rb"></script>

つかったら、Rubyスクリプトファイルをわけたくなりました。

<script defer src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-10-01-a/dist/browser.script.iife.js"></script>
<script type="text/ruby" src="wordle_search.rb"></script>
<script type="text/ruby" src="main.rb"></script>

おお、見覚えがあります。 src属性に対応したら、jQuery時代のモジュール依存関係解決と同じ事ができるようになったみたいです。 なら、JavaScriptのimport相当の動きも欲しくなります。

<script type="text/ruby" src="wordle_search.rb"></script>
<script type="text/ruby" src="main.rb"></script>

と書く代わりに

require_relative "wordle_search"

と、書くと依存関係を解決して欲しいです。 つまり、次の動きを期待します。

  1. http://example.com/lib/hoge/example.rb を実行するとき
  2. example.rbにrequire_relative "fuga/fuga_lib"が含まれていたら
  3. 先に http://example.com/lib/hoge/fuga/fuga_lib.rb を実行する

あれ?これはもしかして GitHub - WICG/import-maps: How to control the behavior of JavaScript imports をサポートするれば、bundlerでインストールしたGemを読み込めるようにもなるのでしょうか?

問題はあります。Rubyruquirerequirue_relativeは、スクリプトの中間に書けます*1。 そうすると、 とは限りません。 こういうのどうするんでしょう?ruby.wasmからコールバック関数を呼ぶといいのでしょうか?それともruby.wasm内でrequire_relativeをハックするのでしょうか?

まずは、位置を意識しない雑なハックをしてみて、これが本当に欲しいのものなのか、確かめてみるのが良さそうです。