Rack apps
homura-runtime は Sinatra に依存しない Rack adapter を持っています。つまり config.ru に run app を書く、普通の Rack アプリケーションだけでも Workers にデプロイできます。
最小構成
# app/app.rb
class App
def call(env)
[
200,
{ 'content-type' => 'text/plain; charset=utf-8' },
["hello from Rack\n"]
]
end
end
# config.ru
require_relative 'app/app'
run App.new
run app は Rack の標準形です。Sinatra では run App を省略できる場面がありますが、それは Sinatra が Rack app を組み立ててくれるためです。Rack だけで書く場合は config.ru の run がアプリの入口になります。
ビルドとデプロイ
bundle exec homura build --standalone
npx wrangler deploy
wrangler.toml の main は生成物の build/worker.entrypoint.mjs を指します。
Rack から binding を読む
Workers の binding は Rack env に載ります。低レベル Rack app では env['cloudflare.env'] や runtime が用意する wrapper を直接使い、Sinatra を使う場合は d1 / kv / bucket などの helper が薄く包みます。
class App
def call(env)
cf_env = env['cloudflare.env']
name = cf_env ? `(#{cf_env}.APP_NAME || 'homura')`.to_s : 'homura'
[200, { 'content-type' => 'text/plain' }, ["#{name}\n"]]
end
end
いつ Rack だけを選ぶか
| 選ぶ理由 | 説明 |
|---|---|
| HTTP endpoint が少ない | health check、webhook、proxy のような薄い Worker なら Rack だけで十分です。 |
| Sinatra DSL が不要 | routing や helper より Rack middleware / env を直接扱いたい場合に向きます。 |
| gem surface を最小化したい | homura-runtime と opal-homura だけで成立します。 |