homura Docs App | Posts About Login
Ctrl+K

sinatra-inertia

Sinatra で Inertia.js v2 protocol を扱う adapter です。アプリケーションのルートは Sinatra らしく render 'Page' と書き、page object、partial reload、deferred props、validation error sweep は gem が引き受けます。

役割

セットアップ

gem 'sinatra-inertia', '~> 0.1'
require 'sinatra/base'
require 'sinatra/inertia'

class App < Sinatra::Base
  register Sinatra::Inertia

  set :page_version, ENV.fetch('ASSETS_VERSION', '1')
  set :page_layout, :layout

  share_props do
    { flash: flash_payload, csrfToken: csrf_token }
  end
end

ページを render する

get '/' do
  render 'Todos/Index',
         todos: -> { todos },
         stats: defer(group: 'meta') { todo_stats }
end

route 内に Inertia 固有の protocol 語彙を置かないのが推奨形です。互換 API として inertia / inertia_share / Inertia.defer も残っています。

validation errors

post '/todos' do
  if params[:title].to_s.strip.empty?
    page_errors title: 'title is required'
    redirect to('/'), 303
  end

  # write model...
  redirect to('/'), 303
end

example

完全な Workers + D1 + React の例は examples/inertia-todo です。production deploy は inertia-todo.kazu-san.workers.dev で動いています。

できること / できないこと

できることできないこと
Page protocolInertia v2 page object、partial reload、deferred props、merge propsRails controller / ActiveSupport 前提の API
FrontendReact / Vue / Svelte など Inertia client と接続クライアント bundle の生成そのもの
Workershomura build の auto-await と D1 route props に対応ブラウザ history / component rendering をサーバーだけで完結