💎

Rails 8 + SQLite — プロダクションで使える理由

PostgreSQLなしでもいい時代が来た — 37signalsが証明したSQLiteプロダクション運用

Rails 8からSQLiteがプロダクション環境で公式に推奨されるデータベースになった。「SQLiteは開発用」という認識はもう過去のものだ。

なぜ今SQLiteか?

Rails 8で導入されたSolidシリーズ(Solid Queue、Solid Cache、Solid Cable)がゲームチェンジャーだ。以前はRedis(キャッシュ、ジョブキュー)とPostgreSQL(DB)を別々に運用する必要があったが、今はSQLite1つでDB+キャッシュ+ジョブキュー+WebSocketまで全て処理できる。

37signals(Basecamp、HEY開発元)がこの構成を実際のプロダクションで使用している。DHH(Rails創設者)自身が「ほとんどのWebアプリにPostgreSQLは過剰」と発言している。

SQLiteがプロダクションで使える理由

  1. サーバーレス — 別プロセス/ポート不要でファイル1つで動作。DBサーバー管理不要
  2. WALモード — Write-Ahead Loggingで読み書き同時実行性が大幅改善
  3. Solidシリーズ — Redis/Memcachedなしでキャッシュ・ジョブ・ケーブル全てSQLiteベース
  4. デプロイ簡素化 — DBサーバー設定、コネクションプール管理、マイグレーション順序の心配不要
  5. コスト削減 — RDS/CloudSQL等のマネージドDB費用がゼロ
  6. バックアップ簡単 — ファイルコピー1回で全バックアップ完了

PostgreSQLが依然必要な場合

  • 同時書き込みが非常に多いアプリ(秒間数千件以上のINSERT)

  • 複数サーバーから同じDBにアクセスする場合(SQLiteはシングルサーバー)

  • jsonb、Full Text Search、PostGIS等PostgreSQL専用機能が必要な場合

  • 既にPostgreSQLベースのインフラが構築された大規模チーム

ほとんどの中小規模アプリ、1人/少人数チームプロジェクト、SaaS MVP、サイドプロジェクトにはSQLiteで十分。

Rails 8 Solidシリーズ — Redis/PostgreSQLなしで全てSQLite

機能 以前(Rails 7) 現在(Rails 8)
データベース PostgreSQL / MySQL SQLite(WALモード)
バックグラウンドジョブ Sidekiq + Redis Solid Queue(SQLite)
キャッシュ Redis / Memcached Solid Cache(SQLite)
WebSocket Action Cable + Redis Solid Cable(SQLite)
必要な外部サービス PostgreSQL + Redis(最低2つ) なし(ファイルのみ)

SQLite推奨

  • ✓ 1人または少人数チーム
  • ✓ SaaS MVP、サイドプロジェクト
  • ✓ インフラコスト最小化
  • ✓ 読み取り中心のアプリ
  • ✓ シングルサーバーで十分

PostgreSQL推奨

  • ✓ 秒間数千件以上の同時書き込み
  • ✓ マルチサーバー構成が必要
  • ✓ jsonb、PostGIS、FTSが必要
  • ✓ 既存PostgreSQLインフラがあるチーム
  • ✓ 水平スケーリング計画あり

キーポイント

1

Rails 8プロジェクト作成時、デフォルトDBが既にSQLite(別途設定不要)

2

config/database.ymlでWALモード有効化を確認(Rails 8デフォルト設定)

3

Solid Queue(ジョブ)、Solid Cache(キャッシュ)、Solid Cable(WebSocket)を有効化

4

KamalまたはFly.ioでデプロイ — DBサーバー設定自体が不要

5

jsonbの代わりにjson型を使用(SQLiteはjsonb非対応)

メリット

  • インフラ構成ゼロ — DBサーバー、Redis、Memcached全て不要
  • デプロイ簡素化 — ファイルコピーだけでDB移行可能
  • RDS/CloudSQL費用ゼロ — 毎月数千円節約
  • レイテンシ最小 — ネットワークホップなしでディスク直接アクセス
  • 37signalsが実プロダクションで検証済み

デメリット

  • シングルサーバー専用 — 複数サーバーからの同時アクセス不可
  • 同時書き込みボトルネック — 大量INSERT時にパフォーマンス低下の可能性
  • jsonb、PostGIS、Full Text Search等PostgreSQL専用機能非対応
  • 水平スケーリング不可 — トラフィック急増時は垂直スケーリングのみ

ユースケース

1人/少人数チームのSaaS MVP サイドプロジェクト、個人ブログ、ポートフォリオ インフラコストを最小化したいスタートアップ 読み取り中心のアプリ(ブログ、ドキュメント、カタログ等)