Slide 1

Slide 1 text

Every conference talk is a prediction. A guess at what's worth your 30 minutes. カンファレンスのトークは、どれも予測。30 分を費やす価値があるものは何か、という予測。

Slide 2

Slide 2 text

“Whenever we try to make a prediction, it is out of date about 20 minutes later.” DHH, Rails World 2026 opening keynote 「予測を立てようとしても、20 分後にはもう古くなってしまう」— DHH

Slide 3

Slide 3 text

Kaigi on Rails asked for these slides a week in advance. スライドの提出期限は、トークの一週間前。

Slide 4

Slide 4 text

1 week 10,080 minutes ÷ 20 minutes 504× out of date 一週間。10,080 分。÷ 20 分。つまりこのトークは、504 倍も古い。

Slide 5

Slide 5 text

Old talks rot. But some become ancient wisdom*. * Sometimes self-proclaimed. 古いトークは腐る。ただし、古典になるものもある(時に自称)。

Slide 6

Slide 6 text

×504.0 out of date Inertia Rails The One-Person Framework with React & Friends Svyatoslav Kryukov Evil Martians 令和八年十月七日 と R e a c t 達 ワ ン マ ン ・ フ レ ー ム ワ ー ク R a i l s I n e r t i a

Slide 7

Slide 7 text

×504.0 out of date 第一巻 Do we still need a One-Person Framework? ワンマン・フレームワークは、まだ必要か

Slide 8

Slide 8 text

×504.0 out of date 平 成 十 七 年 我 事 が の 見 為 多 よ さ き 、 ざ を る DHH Look at all the things I’m not doing. — Blog demo, 2005 令 和 八 年 コ 既 ー に ド 手 終 を づ は 書 か り く ら ぬ 世 は DHH We’re done writing code by hand. — Rails World, 2026

Slide 9

Slide 9 text

×504.0 out of date 重要文化財 手書きのコード Hand-written code Ruby · 令和七年 (2025) Author unknown 重要文化財:手書きのコード。

Slide 10

Slide 10 text

×504.0 out of date This talk is about writing less code of nothing. このトークは、書くコードを減らす話。つまり、ゼロをさらに減らす話。

Slide 11

Slide 11 text

×504.0 out of date One person can build anything now. 今や、一人で何でも作れる。

Slide 12

Slide 12 text

×504.0 out of date One person can build anything now. DHH 今や、一人で何でも作れる。自分の Linux ディストリビューションでさえ。

Slide 13

Slide 13 text

×504.0 out of date So where's the benefit of a framework now? エージェントが全部書くなら、フレームワークの価値はどこにあるのか。

Slide 14

Slide 14 text

Writing is cheap. Checking isn’t. Restore unused code caching ce rman perfo ove Impr agentRemove /restme n Perso oreUser to Rena u n used-code ove-p 承 used承認code 承 unmance agent/remove-caching 承Delet e I erfor A 承 /impr agent d d A ve pro "Im 承 rt ve Re on -pers er-to me-us /rena agent 認 + 1oser ode 認agent/ 4,4vices iAdd micr 認 8ncies depende 9 −rfo 認 delete-unused-c 0 +17 AddRdeafarkctomdaarorkgedev-mnetod/aedd-aUpdate 認 " 承 ce an −0 +10,913 rm −0 2 pe ,13 agent /addmicro 承 servi 承 ces 承 agent/upd e date-depen ry ad dencies −0 th t/ 571 +10, en in ag tont/User Person Rename ve-9,758 −0 5 g−0 認 rev +1 age agent/refa 8,or6-e2ve 認ert-impro +ct 認 Add Drop live users search table e認search rch 承 liv dd A ry thing378 -user ce- 承 e-person-to 承 man agent/renam for +1, per 0 − −0 +11,72 5 3 −0 7 承 4 , +4+15 Mig ve-sea ratchanged Make·it 1pofile eFiFtoixagTai d-sli adnd lwi agent/live-search agent/cleanup ·p214changed files t 認 t/ 5 en te y 認 k a fl ,061 −0 承認 x ty 認 po st −0 age e nt/ agen−0 t 75 mig +5,518 ,4 rat y e-t k o-t a 承 ail t/m+7 l win f dx a g+et/ +12,344 +1 −0 −0 ke-igt-pop ,/f0x-i2ty5po−0 認 承 認 9ntfi agaen 承 in h s 61+16認承,−0 st2, st+Ad1dte5d,stct3asc0fod4-rc承ath−ch0einte+1 1575 −0 g 認 Rewrite winriRtueAd 認 承 s + st s d 1 te 2 u a e, r / th 2 t rn 4 −0 n fo e add-test認 s-ien agt/ agent/re ag 9545−0−0 , 0 1 0 + − 4 6 , 0 6 1 4 + 6 +9, 書くのは安い。確認するのは高い。 認 ×504.0 out of date

Slide 15

Slide 15 text

Writing is cheap. Checking isn’t. ×504.0 out of date If you care, you still check the result. Read the code, or do manual QA. Less code → less to check, less to own 品質にこだわるなら、結果を確認する。コードが少なければ、確認するものも、保守するものも少ない。

Slide 16

Slide 16 text

×504.0 out of date So frameworks still pay off Your app stays small: just your business logic Everything else: open source, used and tested by countless apps Patterns everyone knows, including your agents 2005 年と同じ理由で、フレームワークは今も元が取れる。アプリは小さいまま。中身はビジネスロジックだけ。 残りは、何千ものアプリで使われ試されたオープンソース。誰もが、エージェントも知っているパターン。

Slide 17

Slide 17 text

×504.0 out of date What's good for humans is good for agents. 人間にとって良いものは、エージェントにも良い。

Slide 18

Slide 18 text

×504.0 out of date What makes it a One-Person Framework Rails + Hotwire ✓ Rails conventions, all the way down Rails の規約、どこまでも ✓ No build ビルドなし ✓ Easy to deploy デプロイが簡単 ✓ Realtime リアルタイム ✓ Mobile apps モバイルアプリ Rails をワンマン・フレームワークにしているもの。このリストのすべてが、ほぼ手間なしで手に入る。

Slide 19

Slide 19 text

The One-Person Startup The Renaissance Developer Backend · Frontend* · Mobile * Hotwire only. ワンマン・スタートアップ:バックエンドもフロントエンドもモバイルも一人で作る「ルネサンス・ デベロッパー」。※ Hotwire に限る。 ×504.0 out of date

Slide 20

Slide 20 text

×504.0 out of date But the lingua franca of the frontend is React. The biggest ecosystem. でも、フロントエンドの共通語は React。最大のエコシステム。

Slide 21

Slide 21 text

×504.0 out of date The One-Person Enterprise CTO Architecture Frontend React SPA Backend JSON API Mobile React Native React を足すと、ワンマン・エンタープライズになる。 API Contract Review Board Platform Two deploys QA Both sides

Slide 22

Slide 22 text

×504.0 out of date What makes it a One-Person Framework Rails + React Rails conventions, all the way down Rails の規約、どこまでも No build ビルドなし Easy to deploy デプロイが簡単 Realtime リアルタイム Mobile apps モバイルアプリ では、このリストはどうなるか。React を足すと、すべて失われる。Inertia で、ほとんど取り戻せる。

Slide 23

Slide 23 text

×504.0 out of date 第二巻 What is Inertia? Inertia とは何か

Slide 24

Slide 24 text

×504.0 out of date A bridge between backend and frontend Backend Rails · Laravel Django · Phoenix ⇄ Inertia ⇄ ReactFrontend · Vue · Svelte Inertia はバックエンドとフロントエンドの橋渡し。プロトコルなので、どちらも好きなものを選べる。

Slide 25

Slide 25 text

×504.0 out of date Let's build a museum. では、Inertia Rails で美術館を作ろう。

Slide 26

Slide 26 text

Install ×504.0 out of date rails new museum -m https://inertia-rails.dev ⚡ Inertia Rails Setup Which framework? [react, vue, svelte] (react) react Setup path? [foundation, starter_kit] (foundation) foundation Use TypeScript? (y/n) n Use Tailwind CSS v4? (y/n) y 📦 Setting up Rails Vite... 📦 Setting up Tailwind CSS v4... 📦 Setting up Inertia... 📦 Creating welcome page... ━━━ Inertia Rails installed successfully! ━━━ Start the development server: bin/dev テンプレートで新しいアプリを作る。既存のアプリにも同じテンプレートで入れられる。スクリプトが設定を 案内してくれる。

Slide 27

Slide 27 text

×504.0 out of date Install rails new museum -m https://inertia-rails.dev localhost:3000 テンプレートで新しいアプリを作る。既存のアプリにも同じテンプレートで入れられる。スクリプトが設定を 案内してくれる。最後には、設定済みのアプリができている。

Slide 28

Slide 28 text

Scaffold the collection ×504.0 out of date bin/rails generate inertia:scaffold Exhibit title artist year:integer create create route create create create create create create create db/migrate/20261007_create_exhibits.rb app/models/exhibit.rb resources :exhibits app/controllers/exhibits_controller.rb app/javascript/pages/exhibits/index.jsx app/javascript/pages/exhibits/show.jsx app/javascript/pages/exhibits/new.jsx app/javascript/pages/exhibits/edit.jsx app/javascript/pages/exhibits/form.jsx app/javascript/pages/exhibits/exhibit.jsx いつもの Rails のように scaffold。同じファイルができる。少しだけ変わったコントローラと、ビューの代わりに React のページ。

Slide 29

Slide 29 text

×504.0 out of date いつもの scaffold。ただし全部 React。リンクもフォームも、フルリロードなし。

Slide 30

Slide 30 text

×504.0 out of date The controller: a hash class ExhibitsController < InertiaController def show render inertia: { exhibit: serialize_exhibit(@exhibit) } end What the browser gets: the page object { private def serialize_exhibit(exhibit) exhibit.as_json(only: [:id, :title, :artist, :year]) end end } "component": "exhibits/show", "props": { "exhibit": { "id": 1, "title": "turbolinks", "artist": "David Heinemeier Hansson", "year": 2012 } }, "url": "/exhibits/1", "version": "b0ab108c" コントローラは普通の Rails。新しいのは render inertia だけ。渡したものはすべてブラウザに届く。だから フィールドを選ぶ。この JSON をページオブジェクトと呼ぶ。

Slide 31

Slide 31 text

×504.0 out of date The component: props // app/javascript/pages/exhibits/show.jsx import { usePage } from "@inertiajs/react" export default function Show() { const { exhibit } = usePage().props return ( <>

Exhibit #{exhibit.id}

) } /exhibits/1 Exhibit #1 Title: turbolinks Artist: David Heinemeier Hansson Year: 2012 exhibits#show は pages/exhibits/show。いつもの Rails の規約。ハッシュがそのまま props になる。アプリの どこからでも usePage で読める。

Slide 32

Slide 32 text

Two kinds of visits Browser ×504.0 out of date Rails GET /exhibits/1 HTML + page object React mounts the page component GET /exhibits/1/edit · X-Inertia: true page object (JSON) React swaps the page component この仕組みはどう動くのか。最初のアクセスは普通のリクエスト。HTML にページオブジェクトが入っている。 その後は Inertia の visit。返るのはページオブジェクトの JSON だけで、React がページを差し替える。

Slide 33

Slide 33 text

First visit: plain HTML GET /exhibits/1 HTTP/1.1 200 OK Content-Type: text/html {"component":"exhibits/show", "props":{"exhibit":{"id":1,"title":"turbolinks",…}}, "url":"/exhibits/1","version":"b0ab108c"}
最初のアクセスは普通の HTML。データは script タグの中、React は空の div にマウントされる。 ×504.0 out of date

Slide 34

Slide 34 text

×504.0 out of date Every visit after: JSON import { Link } from "@inertiajs/react" Edit this exhibit GET /exhibits/1/edit X-Inertia: true HTTP/1.1 200 OK Content-Type: application/json /exhibits/1/edit Editing exhibit Title turbolinks Update Exhibit {"component": "exhibits/edit", "props": {"exhibit": {"id": 1, "title": "turbolinks", …}}, "url": "/exhibits/1/edit", "version": "b0ab108c"} 読み込みの後の移動は Link で。同じリクエストに、X-Inertia ヘッダーが付く。Rails は JSON で返す。React が ページを描き直す。

Slide 35

Slide 35 text

×504.0 out of date Link: like link_to Inertia scaffold Rails scaffold import { Link } from "@inertiajs/react" <%= link_to "Edit this exhibit", edit_exhibit_path(@exhibit) %> Edit this exhibit Destroy this exhibit <%= button_to "Destroy this exhibit", @exhibit, method: :delete %> From code import { router } from "@inertiajs/react" router.visit(`/exhibits/${exhibit.id}/edit`) Link は link_to と同じ。method を付ければ、button_to にもなる。コードからは router.visit。

Slide 36

Slide 36 text

×504.0 out of date The page object is the contract { } "component": "exhibits/show", "props": { "exhibit": { "id": 1, … } }, "url": "/exhibits/1", "version": "b0ab108c" component : which file React renders props : everything we pass to render inertia url : the address bar, controlled by Rails version : old frontend builds reload themselves ページオブジェクトは、Rails と React の契約。ここから先の機能は、すべてこの JSON の変化。

Slide 37

Slide 37 text

Optional props: only when asked ×504.0 out of date def show render inertia: { exhibit: serialize_exhibit(@exhibit), dependencies: InertiaRails.optional { @exhibit.dependencies } } end { Exhibit#dependencies asks rubygems.org No dependencies, and no request to rubygems.org. } "component": "exhibits/show", "props": { "exhibit": { "id": 4, … } }, "url": "/exhibits/4", "version": "b0ab108c" 依存 gem は rubygems.org に聞くので遅い。optional で包むと、ページオブジェクトから消える。計算も されない。

Slide 38

Slide 38 text

Partial reload: only some props Load dependencies GET /exhibits/4 X-Inertia: true X-Inertia-Partial-Component: exhibits/show X-Inertia-Partial-Data: dependencies {"component": "exhibits/show", "props": {"dependencies": ["activemodel", "activesupport", "mimemagic", "mime-types", "terrapin"]}, "url": "/exhibits/4", "version": "b0ab108c"} ×504.0 out of date /exhibits/4 Exhibit #4 Title: paperclip Year: 2008 Dependencies: activemodel, activesupport, mimemagic, mime-types, terrapin Link で取りに行く。only で dependencies だけを頼む。ヘッダーが二つ増える。Rails は頼まれたものだけを 返す。React は今のページにマージする。これが部分リロード。

Slide 39

Slide 39 text

×504.0 out of date Partial reloads: a building block : right after the page renders usePoll : on a timer : when it scrolls into view : the next page, merged 部分リロードは土台。defer(遅延 props)、ポーリング、見えたら読み込み、無限スクロール。

Slide 40

Slide 40 text

Deferred props: no button needed dependencies: InertiaRails.defer { @exhibit.dependencies } import { Deferred } from "@inertiajs/react" } data="dependencies" > ×504.0 out of date /exhibits/4 Exhibit #4 Title: paperclip Year: 2008 Dependencies: activemodel, activesupport, mimemagic, mime-types, terrapin defer なら、ボタンはいらない。サーバーでは defer、React では Deferred で包み、スピナーと、描画に必要な データを決める。ページが描画されると、Inertia が自分で部分リロードする。

Slide 41

Slide 41 text

×504.0 out of date The page object says what to fetch next { } "component": "exhibits/show", "props": { "exhibit": { "id": 4, … } }, "url": "/exhibits/4", "version": "b0ab108c", "deferredProps": { "default": ["dependencies"] } GET /exhibits/4 X-Inertia: true X-Inertia-Partial-Component: exhibits/show X-Inertia-Partial-Data: dependencies ページオブジェクトが「次はこれを取りに来て」と伝える。クライアントは部分リロードで取りに行く。

Slide 42

Slide 42 text

Infinite scroll: the next page, merged @pagy, @exhibits = pagy(Exhibit.all) render inertia: { exhibits: InertiaRails.scroll(@pagy) { serialize_exhibits(@exhibits) }, } import { InfiniteScroll } from "@inertiajs/react" {exhibits.map((exhibit) => ( ))} ×504.0 out of date /exhibits?page=2 compass cancan rails-api auto_complete quiet_assets machinist 無限スクロールも、ヘルパー数個で済む。サーバーでは Pagy か Kaminari のページ情報を渡す。React では リストを InfiniteScroll で包み、data で props を指定する。それだけで動く。

Slide 43

Slide 43 text

The page object says how to merge { } "component": "exhibits/index", "props": { "exhibits": [...] }, "url": "/exhibits", "version": "b0ab108c", "mergeProps": ["exhibits"], "scrollProps": { "exhibits": { "pageName": "page", "previousPage": null, "currentPage": 1, "nextPage": 2, "reset": false } } ×504.0 out of date GET /exhibits?page=2 X-Inertia: true X-Inertia-Partial-Component: exhibits/index X-Inertia-Partial-Data: exhibits X-Inertia-Infinite-Scroll-Merge-Intent: append ページオブジェクトが「つなげて」と伝える。次のページも部分リロード。ヘッダーが一つ増えるだけ。

Slide 44

Slide 44 text

Shared data: one prop on every page class InertiaController < ApplicationController inertia_share curator: -> { Current.user&.slice(:name) } end const { curator } = usePage().props ×504.0 out of date /exhibits/4 Museum Hi, Mei Exhibit #4 Title: paperclip プロトコルを変えない機能もある。全ページ共通のデータは、一度だけ共有する。ラムダなので、頼まれない 部分リロードでは計算されない。どのコンポーネントからも読める。

Slide 45

Slide 45 text

Inertia Rails 101: recap Pass serialized data from the controller: render inertia: { exhibit: serialize_exhibit(@exhibit) } Get it as props (or use the usePage hook): export default function Show({ exhibit }) { // ... } Use (or router.visit ) instead of tags: Edit this exhibit Inertia Rails 入門のまとめ。コントローラから渡し、props で受け取り、移動は Link で。 ×504.0 out of date

Slide 46

Slide 46 text

×504.0 out of date Under the hood: a small protocol First visit: HTML with the page object inside Every visit after: X-Inertia: true → the page object as JSON Partial reloads: two X-Inertia-Partial-* headers Every feature: more keys ( deferredProps , mergeProps , scrollProps ) 中身は小さなプロトコル。最初のアクセスは、ページオブジェクト入りの HTML。その後は、その JSON だけ。 部分リロードは、ヘッダーが二つ増えるだけ。どの機能も、キーを足すだけ。

Slide 47

Slide 47 text

×504.0 out of date Go deeper: the protocol in 50 lines The joy of Inertia Rails もっと深く知りたい方へ:プロトコル全体を約 50 行で作り直す記事。

Slide 48

Slide 48 text

×504.0 out of date What makes it a One-Person Framework Rails + Inertia + React ✓ Rails conventions, all the way down Rails の規約、どこまでも No build ビルドなし ✓ Easy to deploy デプロイが簡単 Realtime リアルタイム Mobile apps モバイルアプリ △ ◯ ◯ リストを見てみよう。Rails の規約: 。ビルドなし:△、Vite がある。デプロイの簡単さ: 。残りは リアルタイムとモバイル。

Slide 49

Slide 49 text

×504.0 out of date 第三巻 Covering the rest チェックリストの残り

Slide 50

Slide 50 text

×504.0 out of date Polling: a timer and partial reloads import { usePoll } from "@inertiajs/react" usePoll(5000, { only: ["guestbook"] }) Every 5 seconds: a partial reload of guestbook リアルタイムには、まずポーリングがある。中身はタイマーと部分リロードだけ。

Slide 51

Slide 51 text

Realtime today: Action Cable ×504.0 out of date # app/models/guestbook_entry.rb after_create_commit { GuestbookChannel.broadcast_to(exhibit, as_json) } consumer.subscriptions.create({ channel: "GuestbookChannel", exhibit_id }, { received(entry) { router.prependToProp("guestbook", entry) }, }) 本当のリアルタイムなら、今は Action Cable。モデルが合図を送り、クライアントは部分リロード。または、 データを送って prependToProp。リクエストなしでページを更新できる。

Slide 52

Slide 52 text

Live props: even easier coming soon ×504.0 out of date import { actionCable } from "@inertiajs/core/actionCable" createInertiaApp({ live: actionCable({ consumer: createConsumer() }), }) def show render inertia: { exhibit: serialize_exhibit(@exhibit), guestbook: InertiaRails.live(@exhibit, :guestbook) { @exhibit.guestbook_entries.last(50) }, } end もうすぐ、もっと簡単になる。Inertia にライブ props が入る。イニシャライザでトランスポートに Action Cable を設定して、props をライブにするだけ。

Slide 53

Slide 53 text

Broadcast, and every page updates # app/models/guestbook_entry.rb after_create_commit { InertiaRails.broadcast(exhibit, :guestbook) } /exhibits/1 /exhibits/1 Guestbook Guestbook Sign the guestbook Sign the guestbook Mei Breathtaking! Mei Breathtaking! Ken Smaller than I thought. Ken Smaller than I thought. Leave a note Leave a note あとはモデルが「変わった」と知らせるだけ。左で記帳すると、右のページが自動で更新される。 フロントエンドのコードは変えていない。 ×504.0 out of date

Slide 54

Slide 54 text

×504.0 out of date Mobile Ruby Native by Joe Masilotti Supports Inertia Paid, from $299/year per app rubynative.com Inertia Native by Sergey Korolev Inertia on Hotwire Native Free, MIT inertia-native.dev 長いあいだ、モバイルには Capacitor でなんとかする以外の答えがなかった。今年、Inertia に対応した Ruby Native(有料)が出た。そして先週、Inertia Native。Inertia を Hotwire Native につなぐシム。無料、MIT。

Slide 55

Slide 55 text

×504.0 out of date Inertia Native import { initInertiaNative } from "inertia-native" initInertiaNative() createInertiaApp({ /* ... */ }) // iOS: a stock Hotwire Native shell let navigator = Navigator(configuration: .init( name: "main", startLocation: rootURL )) Native navigation, modals, forms, and a bridge inertia-native.dev JS は一行。ネイティブ側は普通の Hotwire Native。ナビゲーションもモーダルもフォームも、ブリッジも。まだ 初期段階なので、ぜひ試して、壊れたところを教えてほしい。

Slide 56

Slide 56 text

×504.0 out of date What makes it a One-Person Framework Rails + Inertia + React ✓ Rails conventions, all the way down Rails の規約、どこまでも No build ビルドなし ✓ Easy to deploy デプロイが簡単 ✓ Realtime リアルタイム ✓ Mobile apps モバイルアプリ △ ◯ ◯ リアルタイム: 。モバイルアプリ: 。これでチェックリストは完成。でもエコシステムはそこで終わらない。

Slide 57

Slide 57 text

×504.0 out of date Beyond the checklist: Alba and Typelizer class ApplicationResource include Alba::Resource helper Alba::Inertia::Resource include Typelizer::DSL end class ExhibitResource < ApplicationResource attributes :id, :title, :artist, :year end class ExhibitsShowResource < ApplicationResource has_one :exhibit, serializer: ExhibitResource end // generated by Typelizer export interface Exhibit { id: number title: string artist: string year: number | null } import { exhibits } from "@/routes" exhibits.show(4).url // "/exhibits/4" github.com/okuramasafumi/alba · github.com/skryukov/alba-inertia · github.com/skryukov/typelizer チェックリストの先へ:ツール。シリアライザは大倉雅史さんの Alba がおすすめ。alba-inertia で Inertia の props に対応させた。Typelizer は Rails のメタデータから型を、そして URL ヘルパーを生成する。

Slide 58

Slide 58 text

SSR: preconfigured # config/puma.rb plugin :inertia_ssr Node starts and stops with Puma Node fails? The browser renders the page ×504.0 out of date …

Exhibit #1

Title: turbolinks

Year: 2012

SSR は設定済み。puma.rb に一行。空だった div に、サーバーで描いた HTML が入る。Node は Puma と一緒に 動く。落ちてもブラウザが描画する。

Slide 59

Slide 59 text

Starter kits and skills ×504.0 out of date rails new myapp \ -m https://inertia-rails.dev npx skills add inertia-rails/skills Authentication, dashboard, settings, dark mode shadcn/ui for React · Vue · Svelte Skills: your agent writes idiomatic Inertia Rails (hopefully) 新しいプロジェクトをよく始める人には、スターターキット。認証もダッシュボードも設定済み。shadcn/ui で、 三つのフロントエンドすべてに。公式のスキルで、エージェントも Inertia Rails らしく書ける。(たぶん)

Slide 60

Slide 60 text

×504.0 out of date What's good for agents is good for humans. エージェントにとって良いものは、人間にも良い。

Slide 61

Slide 61 text

×504.0 out of date Rails, the One-Person Framework, is great for both. ワンマン・フレームワークの Rails は、人間にもエージェントにも向いている。

Slide 62

Slide 62 text

×504.0 out of date The One-Person Framework grows Inertia: Hotwire Native for React, Vue and Svelte ReActionView: more interactivity in Hotwire apps Marco Roth, “Herb in Rails 8.2”: today, 16:15, this hall ワンマン・フレームワークは広がる。Inertia なら、React・Vue・Svelte でも Hotwire Native が使える。 ReActionView は、Hotwire アプリをもっとインタラクティブにする。 Marco Roth さんの講演は今日 16:15、このホールで。

Slide 63

Slide 63 text

×504.0 out of date The Renaissance Developer Backend · Frontend · Mobile ルネサンス・デベロッパー、ふたたび。※ もう Hotwire に限らない。

Slide 64

Slide 64 text

×504.0 out of date 令 和 八 年 松 本 慣 大 我 性 い ら あ な に り る 勢 ひ と We have huge momentum and inertia. — 『鼎談』 · Matz, Rails World 2026

Slide 65

Slide 65 text

Thank you for your time. rails new myapp -m https://inertia-rails.dev npx skills add inertia-rails/skills inertia-rails.dev · github.com/inertiajs/inertia-rails ×504.01 out of date Slides and links 今週、試してみてください。コマンドは二つ:あなた用と、エージェント用。ご清聴ありがとうございました。 このハンコを持ってきました。持ち物に押したい方は、声をかけてください。