@ledsun blog

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

ruby.wasmをビルドする

ruby.wasmをブラウザで動かす時に https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@2.0.0/dist/browser.script.iife.js を使います。 このJavaScriptをハックして少し便利にしたいときには次の手順でビルドしています。

ビルド

git clone git@github.com:ruby/ruby.wasm.git
cd ruby.wasm
bin/setup
rake npm:ruby-head-wasm-wasi

以上の手順で browser.script.iife.js がビルド出来ます。 bin/setupだけで、依存する物を全部用意出来るはずです。が、ちょっと自信ないです。上手く行かなかったら教えてください。

動作確認

ビルドしたものが上手く動いているか確認します。

https://github.com/ruby/ruby.wasm/blob/main/packages/npm-packages/ruby-wasm-wasi/example/hello.html に browser.script.iife.js を使ったサンプルコードがあります。 これを修正してビルドしたバージョンを動かします。

vi packages/npm-packages/ruby-wasm-wasi/example/hello.html
<html>
  <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@2.0.0/dist/browser.script.iife.js"></script>
  <script type="text/ruby">
    puts "Hello, world!"
  </script>
</html>

の1番目のscriptタグを次のように書き換えます。

<html>
  <script src="../../ruby-head-wasm-wasi/dist/browser.script.iife.js"></script>
  <script type="text/ruby">
    puts "Hello, world!"
  </script>
</html>

ビルドされた browser.script.iife.js は /ruby-head-wasm-wasi/dist/browser.script.iife.js にあります。 つづいてHTTPサーバーを起動します*1

cd packages/npm-packages/
ruby -run -e httpd

ブラウザで http://localhost:8080/ruby-wasm-wasi/example/hello.html を開くと動作確認出来ます。 開発コンソールに次のように表示されれば成功です。

hello.htmlの動作確認

ソースコード

ビルドされるソースコードのエントリポイントは https://github.com/ruby/ruby.wasm/blob/main/packages/npm-packages/ruby-wasm-wasi/src/browser.script.ts です。 このファイルからたどって行くと変更したい機能のソースコードを見つけられると思います。

参考

ruby.wasm/CONTRIBUTING.md at main · ruby/ruby.wasm · GitHub

20230613追記

*1:ruby-head-wasm-wasiディレクトリを参照したいので、途中のディレクトリでHTTPサーバーを起動しています。