Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inertia Rails: The One-Person Framework with Re...

Inertia Rails: The One-Person Framework with React & Friends

Rails promises a small team can stay productive across the whole stack. But what if you want to build your UI in React (or Vue, or Svelte)? Reach for it the usual way and Rails loses some of its magic. It becomes a JSON API behind a separate React app, and your small application grows into two codebases you sync by hand.

The Rails ecosystem has a way out. Inertia Rails turns React into a view layer: your controllers still render the pages, with no API and no tangled client-state in between. Let’s see how React learns to play by the rules of the One-Person Framework!

Docs: https://inertia-rails.dev
The protocol in 50 lines: https://evilmartians.com/chronicles/the-joy-of-inertia-rails-painting-your-own-with-50-happy-little-lines
Inertia Native: https://inertia-native.dev
Slides and links: https://evilmartians.com/events/inertia-rails-one-person-framework-kaigi-on-rails

Avatar for Svyatoslav Kryukov

Svyatoslav Kryukov

October 15, 2026

More Decks by Svyatoslav Kryukov

Other Decks in Programming

Transcript

  1. Every conference talk is a prediction. A guess at what's

    worth your 30 minutes. カンファレンスのトークは、どれも予測。30 分を費やす価値があるものは何か、という予測。
  2. “Whenever we try to make a prediction, it is out

    of date about 20 minutes later.” DHH, Rails World 2026 opening keynote 「予測を立てようとしても、20 分後にはもう古くなってしまう」— DHH
  3. Kaigi on Rails asked for these slides a week in

    advance. スライドの提出期限は、トークの一週間前。
  4. 1 week 10,080 minutes ÷ 20 minutes 504× out of

    date 一週間。10,080 分。÷ 20 分。つまりこのトークは、504 倍も古い。
  5. Old talks rot. But some become ancient wisdom*. * Sometimes

    self-proclaimed. 古いトークは腐る。ただし、古典になるものもある(時に自称)。
  6. ×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
  7. ×504.0 out of date 第一巻 Do we still need a

    One-Person Framework? ワンマン・フレームワークは、まだ必要か
  8. ×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
  9. ×504.0 out of date 重要文化財 手書きのコード Hand-written code Ruby ·

    令和七年 (2025) Author unknown 重要文化財:手書きのコード。
  10. ×504.0 out of date This talk is about writing less

    code of nothing. このトークは、書くコードを減らす話。つまり、ゼロをさらに減らす話。
  11. ×504.0 out of date One person can build anything now.

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

    DHH 今や、一人で何でも作れる。自分の Linux ディストリビューションでさえ。
  13. ×504.0 out of date So where's the benefit of a

    framework now? エージェントが全部書くなら、フレームワークの価値はどこにあるのか。
  14. 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
  15. 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 品質にこだわるなら、結果を確認する。コードが少なければ、確認するものも、保守するものも少ない。
  16. ×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 年と同じ理由で、フレームワークは今も元が取れる。アプリは小さいまま。中身はビジネスロジックだけ。 残りは、何千ものアプリで使われ試されたオープンソース。誰もが、エージェントも知っているパターン。
  17. ×504.0 out of date What's good for humans is good

    for agents. 人間にとって良いものは、エージェントにも良い。
  18. ×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 をワンマン・フレームワークにしているもの。このリストのすべてが、ほぼ手間なしで手に入る。
  19. The One-Person Startup The Renaissance Developer Backend · Frontend* ·

    Mobile * Hotwire only. ワンマン・スタートアップ:バックエンドもフロントエンドもモバイルも一人で作る「ルネサンス・ デベロッパー」。※ Hotwire に限る。 ×504.0 out of date
  20. ×504.0 out of date But the lingua franca of the

    frontend is React. The biggest ecosystem. でも、フロントエンドの共通語は React。最大のエコシステム。
  21. ×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
  22. ×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 で、ほとんど取り戻せる。
  23. ×504.0 out of date A bridge between backend and frontend

    Backend Rails · Laravel Django · Phoenix ⇄ Inertia ⇄ ReactFrontend · Vue · Svelte Inertia はバックエンドとフロントエンドの橋渡し。プロトコルなので、どちらも好きなものを選べる。
  24. 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 テンプレートで新しいアプリを作る。既存のアプリにも同じテンプレートで入れられる。スクリプトが設定を 案内してくれる。
  25. ×504.0 out of date Install rails new museum -m https://inertia-rails.dev

    localhost:3000 テンプレートで新しいアプリを作る。既存のアプリにも同じテンプレートで入れられる。スクリプトが設定を 案内してくれる。最後には、設定済みのアプリができている。
  26. 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 のページ。
  27. ×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 をページオブジェクトと呼ぶ。
  28. ×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 ( <> <h1>Exhibit #{exhibit.id}</h1> <Exhibit exhibit={exhibit} /> </> ) } /exhibits/1 Exhibit #1 Title: turbolinks Artist: David Heinemeier Hansson Year: 2012 exhibits#show は pages/exhibits/show。いつもの Rails の規約。ハッシュがそのまま props になる。アプリの どこからでも usePage で読める。
  29. 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 がページを差し替える。
  30. First visit: plain HTML GET /exhibits/1 HTTP/1.1 200 OK Content-Type:

    text/html <script data-page="app" type="application/json"> {"component":"exhibits/show", "props":{"exhibit":{"id":1,"title":"turbolinks",…}}, "url":"/exhibits/1","version":"b0ab108c"} </script> <div id="app"></div> 最初のアクセスは普通の HTML。データは script タグの中、React は空の div にマウントされる。 ×504.0 out of date
  31. ×504.0 out of date Every visit after: JSON import {

    Link } from "@inertiajs/react" <Link href="/exhibits/1/edit">Edit this exhibit</Link> 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 が ページを描き直す。
  32. ×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) %> <Link href={`/exhibits/${exhibit.id}/edit`}> Edit this exhibit </Link> <Link href={`/exhibits/${exhibit.id}`} method="delete" as="button"> Destroy this exhibit </Link> <%= 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。
  33. ×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 の変化。
  34. 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 で包むと、ページオブジェクトから消える。計算も されない。
  35. Partial reload: only some props <Link href={`/exhibits/${exhibit.id}`} only={["dependencies"]}> Load dependencies

    </Link> 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 は今のページにマージする。これが部分リロード。
  36. ×504.0 out of date Partial reloads: a building block <Deferred>

    : right after the page renders usePoll : on a timer <WhenVisible> : when it scrolls into view <InfiniteScroll> : the next page, merged 部分リロードは土台。defer(遅延 props)、ポーリング、見えたら読み込み、無限スクロール。
  37. Deferred props: no button needed dependencies: InertiaRails.defer { @exhibit.dependencies }

    import { Deferred } from "@inertiajs/react" <Deferred fallback={<Spinner />} data="dependencies" > <Dependencies list={dependencies} /> </Deferred> ×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 が自分で部分リロードする。
  38. ×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 ページオブジェクトが「次はこれを取りに来て」と伝える。クライアントは部分リロードで取りに行く。
  39. 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" <InfiniteScroll data="exhibits"> {exhibits.map((exhibit) => ( <Exhibit key={exhibit.id} exhibit={exhibit} /> ))} </InfiniteScroll> ×504.0 out of date /exhibits?page=2 compass cancan rails-api auto_complete quiet_assets machinist 無限スクロールも、ヘルパー数個で済む。サーバーでは Pagy か Kaminari のページ情報を渡す。React では リストを InfiniteScroll で包み、data で props を指定する。それだけで動く。
  40. 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 ページオブジェクトが「つなげて」と伝える。次のページも部分リロード。ヘッダーが一つ増えるだけ。
  41. 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 プロトコルを変えない機能もある。全ページ共通のデータは、一度だけ共有する。ラムダなので、頼まれない 部分リロードでは計算されない。どのコンポーネントからも読める。
  42. 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 <Link> (or router.visit ) instead of <a> tags: <Link href="/exhibits/1/edit">Edit this exhibit</Link> Inertia Rails 入門のまとめ。コントローラから渡し、props で受け取り、移動は Link で。 ×504.0 out of date
  43. ×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 だけ。 部分リロードは、ヘッダーが二つ増えるだけ。どの機能も、キーを足すだけ。
  44. ×504.0 out of date Go deeper: the protocol in 50

    lines The joy of Inertia Rails もっと深く知りたい方へ:プロトコル全体を約 50 行で作り直す記事。
  45. ×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 がある。デプロイの簡単さ: 。残りは リアルタイムとモバイル。
  46. ×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 リアルタイムには、まずポーリングがある。中身はタイマーと部分リロードだけ。
  47. 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。リクエストなしでページを更新できる。
  48. 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 をライブにするだけ。
  49. 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
  50. ×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。
  51. ×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。ナビゲーションもモーダルもフォームも、ブリッジも。まだ 初期段階なので、ぜひ試して、壊れたところを教えてほしい。
  52. ×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 モバイルアプリ △ ◯ ◯ リアルタイム: 。モバイルアプリ: 。これでチェックリストは完成。でもエコシステムはそこで終わらない。
  53. ×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 ヘルパーを生成する。
  54. 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 <!-- GET /exhibits/1, with SSR --> <script data-page="app">…</script> <div id="app" data-server-rendered="true"> <h1>Exhibit #1</h1> <div> <p><strong>Title:</strong> turbolinks</p> <p><strong>Year:</strong> 2012</p> </div> </div> SSR は設定済み。puma.rb に一行。空だった div に、サーバーで描いた HTML が入る。Node は Puma と一緒に 動く。落ちてもブラウザが描画する。
  55. 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 らしく書ける。(たぶん)
  56. ×504.0 out of date What's good for agents is good

    for humans. エージェントにとって良いものは、人間にも良い。
  57. ×504.0 out of date Rails, the One-Person Framework, is great

    for both. ワンマン・フレームワークの Rails は、人間にもエージェントにも向いている。
  58. ×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、このホールで。
  59. ×504.0 out of date The Renaissance Developer Backend · Frontend

    · Mobile ルネサンス・デベロッパー、ふたたび。※ もう Hotwire に限らない。
  60. ×504.0 out of date 令 和 八 年 松 本

    慣 大 我 性 い ら あ な に り る 勢 ひ と We have huge momentum and inertia. — 『鼎談』 · Matz, Rails World 2026
  61. 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 今週、試してみてください。コマンドは二つ:あなた用と、エージェント用。ご清聴ありがとうございました。 このハンコを持ってきました。持ち物に押したい方は、声をかけてください。