homura Docs App | Posts About Login
Ctrl+K

Rack apps

homura-runtime は Sinatra に依存しない Rack adapter を持っています。つまり config.rurun 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.rurun がアプリの入口になります。

ビルドとデプロイ

bundle exec homura build --standalone
npx wrangler deploy

wrangler.tomlmain は生成物の 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-runtimeopal-homura だけで成立します。