opal-homura
homura stack が使う Opal fork です。Ruby を Workers の V8 で実行できる JavaScript へコンパイルする土台で、アプリ側は通常どおり require 'opal' として扱います。
役割
- Ruby ソース、vendored Ruby ライブラリ、precompiled ERB / assets を ESM bundle に変換します。
- homura が必要とする Opal パッチと runtime contract に合わせた compiler behavior を提供します。
- 公開 gem 名は
opal-homuraですが、Bundler の require 名はopalのままです。
Gemfile
gem 'opal-homura', '= 1.8.3.rc1.5', require: 'opal'
require: 'opal' を外すと既存の Opal toolchain が期待する require 名から外れます。アプリケーションコードから opal-homura を直接 require する必要はありません。
ビルド内での位置
homura build は Opal に -I app -I gems/... -I lib -I vendor -I build を渡し、アプリ、gem、vendored shim、precompiled templates をひとつの bundle にします。
できること / できないこと
| できること | できないこと | |
|---|---|---|
| Ruby | Sinatra / Rack / Sequel など pure Ruby 中心のコードを compile | C extension や OS process 前提の gem をそのまま実行 |
| require | require 'opal' と既存 Opal 互換の入口を維持 | require 'opal-homura' を public API として扱う |
| runtime | Workers の ESM entrypoint に載せる JS を生成 | Node サーバーを常駐させて Rack を動かす |