ミニマリストのための Ruby on Rails


今日は、Rails 8 が Web アプリケーション開発者に提案する、「ミニマムな技術スタック」の紹介と、その技術スタックへの愛を語ります。

ミニマム、だが強力な Rails

2024年11月にリリースされた Rails 8 には、rails new で生成したアプリを「そのまま」本番環境で運用できるように、数々の工夫が凝らされています。

  • SQLite3 への書き込みが競合しても、エラー(SQLite3::BusyException) がほぼ発生しなくなった
  • SQLite3 をバックエンドとした、非同期ジョブ(Solid Queue)やキャッシュ(Solid Cache)
  • kamal による1コマンドデプロイ
  • TLS 証明書の生成・管理、TLS 終端をになう kamal-proxy

アプリケーション開発者のやることは至って単純。rails new して、アプリケーションコードを書き、kamal deploy で VPS に本番向けアプリとしてデプロイ。 かつては、チュートリアルや個人の検証・習作くらいでしか許されなかった行動でしょう。しかしいまや、このミニマムな技術スタックは「ビジネスができる」レベルまで昇華したのです。

この革命的な進化を熱く語っているのが、 Supercharge the One Person Framework with SQLite: Rails World 2024 ↗ です。 YassyLab 株式会社様による日本語訳 ↗ もあります。

改めてミニマムな技術スタックを俯瞰

「Ruby on Rails 8 流」な技術スタックを、改めてみてみましょう。

  • フレームワーク: Ruby on Rails
  • データベース: SQLite3
  • コンテナオーケストレーション: Docker
  • デプロイ: kamal
  • TLS 対応: kamal-proxy
  • インフラ: Linux サーバーが1台あれば何でもOK

これを以降 「Minimum Rails」とでも呼ぶことにしましょう。筆者はこれに加えて、

  • Node.js を持ち込まない。フロントエンドは Hotwire で書いて、Asset Pipeline は Propshaft + Importmap を採用
  • app/formsapp/services といった Rails 標準にない独自レイヤーを設けない
  • ドメインロジックは ActiveRecord と密結合させて app/models に集約

という縛りをトッピングして開発するのが大好きです。

Vanilla Rails is plenty ↗ A vanilla Rails stack is plenty ↗ の影響を強く受けています。

ミニマムだと何が嬉しいのか?

Rails 8 の提案する「Minimum Rails」は開発者にどのような幸せをもたらすのでしょうか?筆者が実感しているメリットを挙げましょう。

徹頭徹尾アプリケーション開発に集中できる

ミドルウェア、インフラ、デプロイ、これらアプリケーションを開発運用するうえで欠かせない周辺業務について、Ruby on Rails が用意した解をそのまま採用できます。 われわれがやるべきことは app/modelsapp/controllers を書くだけ。

データベースアクセスが早すぎる

SQLite3 を除く RDBMS へのクエリ発行はほぼ「TCP/IP 通信」でしょう。一方、SQLite3 の場合は「ファイル I/O」です。 必然的にオーダー違いの速度差が生じます。

普通にコード書いているだけなのに、非 SQLite3 アプリケーションより数倍早くレスポンスが返ってくる、みたいなことが、普通に起きます。 ローカル開発だと、うっかりN+1問題を見落しかねない爆速さ。

インフラコストの安さ

かつて、小規模な Rails アプリと言えば Heroku に代表されるような PaaS で、必要な周辺ミドルウェア(RDBMS や Key-Value Store など)とセットで利用するのが、鉄板の選択肢でした。

一方で、「Minimum Rails」においては、Linux サーバー1台でフルスタックな Web アプリケーションを動かせますから、PaaS は不要になります。 VPS を提供する IaaS は豊富にあり、比較的安価で、価格も安定しています。(あくまで、比較的、ではありますが)

2026年現在、筆者が注目しているコストパフォーマンスに優れた VPS サービスを紹介します。

これらのサービスを賢く利用することで、お得に開発・運用ができます。

インフラメンテナンスコストの削減

「Minimum Rails」は Linux サーバー上で Docker コンテナが動いているだけなので、Linux や Docker の一般的な知識でメンテナンスできます。 個人的には、ブラックボックスになりがちな Platform 独自の制約やお作法を学ぶ必要がない点を気に入っています。

一方で、各種サーバー設定やセキュリティ確保を自分で完結することが求められるので、むしろインフラのメンテナンスは PaaS に任せた方がいい、という意見も一理あります。一長一短ですね。

まとめ

以上、Ruby on Rails 8 が切り開いた「ミニマムな Web アプリケーション」についての紹介でした。 全体的に Rails を褒めちぎる内容になっていますが、実際に「Minimum Rails」でビジネスをやるなら、解決すべき課題が多いのもまた事実。

  • SQLite3 本番で動かせるって本当?いうてアクセス数多くなったらパンクするでしょ?そもそもバックアップはどうするの?
  • AZ 分散しないシングルサーバーとか何時代だよ
  • Hotwire はクセが強すぎる。フロントエンドはさすがに Node.js の資産を活用すべきじゃない?

とか、色々な反論・懸念が思いつきます。これらについては、個別の論点として別の記事で深堀りする所存です。

フィードバックを送る

  • • お送りいただいた内容は、筆者が全て目を通し、今後の励みとさせていただきます
  • プライバシー: お名前やメールアドレスの収集は行っておりません
  • 返信: 全てへの返信はお約束できかねますが、必要な場合は本文内に連絡先を添えてください
  • 公開の可能性: 個人を特定できない形で記事内で紹介させていただく場合があります