stackbook

← 作るもの

業務システム・管理画面

社内ツール、予約、受発注

条件DB中心 · PaaS · 1〜2人 · MVP · 制約なし

推奨:Ruby / Rails

推奨

Ruby / Rails

  • DB中心のCRUDなので性能差は効かない。画面数の多い業務システムはRailsが最も速く作れる(§2-10 手順2)

構成行を開くと詳細(乗り換える条件・根拠・費用・習熟度)

アプリRails+Hotwire+tailwindcss-rails+ViewComponent

Rails

公式サイト ↗

言語別の既定§2-3

Railsの標準構成(「Rails omakase」)にできるだけ乗る。外部依存を増やさないことが最大のメリットになる。

選ぶ場面§2-10

  • DBの読み書きと業務ロジックが中心ボトルネックはDB。言語の性能差はほぼ効かないので、開発速度とチームで選ぶ

既定:認証Ruby / Rails

乗り換える条件

  • DeviseOAuth連携・多要素認証など機能を一式揃えたいとき
  • Rodauth高度なセキュリティ要件

既定:CRUD中心のWebアプリ・管理画面作成物ごとの言語の決め方

乗り換える条件

  • TypeScript外部API連携が中心、またはReactで画面を作り込みたいとき
  • Kotlin業務ルールが非常に複雑で、既存のJava資産と連携するとき

既定:Rails認証・認可

乗り換える条件

  • DeviseOAuth連携・多要素認証など機能を一式揃えたいとき(§2-3)

採用の根拠§22-2

CRUD中心のアプリで開発速度が非常に高い。近年のRailsはSolid Queue/Solid Cache/Solid Cableでジョブ・キャッシュ・WebSocketをDBだけで動かせるため、Redisなどの追加ミドルウェアが不要。GitHubやShopifyが大規模に運用している実績がある。Kamalで特定のPaaSに依存せずデプロイできる

「Rubyは下火では」→ 採用企業は安定して存在し、フレームワークは毎年活発に更新されている

成長したら → PostgreSQL§24

きっかけ
複数台構成にしたい、書き込み待ちが目立つ
最初からの備え
SQLite固有の書き方を避け、ActiveRecordの範囲で書く

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)アプリ:Rails+Hotwire+tailwindcss-rails+ViewComponent
  • 業務システム・社内ツール(Rails構成)認証:Railsの認証ジェネレータ(社内ならGoogle/Entra IDのSSO)
  • 個人開発・MVPRailsワンマン:Rails+SQLite+Kamal+VPS

習熟度

Hotwire

公式サイト ↗

既定:フロントRuby / Rails

乗り換える条件

ケース別の構成§19

tailwindcss-rails

公式サイト ↗

既定:CSSRuby / Rails

ケース別の構成§19

ViewComponent

公式サイト ↗

既定:コンポーネントRuby / Rails

乗り換える条件

  • PhlexRubyだけでビューを書きたいとき

ケース別の構成§19

DBPostgreSQL

PostgreSQL

公式サイト ↗

既定:RDBDB本体とホスティング

乗り換える条件

  • MySQL既存システムとの互換が必要なときのみ

採用の根拠§22-2

OSSでライセンス費用がかからない。AWS、GCP、Azureを含む主要クラウドがすべてマネージド版を提供している。拡張機能(pgvector、pg_bigm)でベクトル検索や日本語全文検索までこなせるため、専用DBを増やさずに済む

「MySQLの方が一般的では」→ 機能・標準SQLへの準拠・拡張性で優位。移行ツールも揃っている

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)DB:PostgreSQL
  • 業務システム・社内ツール(TypeScript構成)DB:PostgreSQL+Drizzle
  • 自社SaaS(B2B)DB:PostgreSQL(テナントIDカラム+Row Level Security)
  • AI/LLMプロダクトDB・ベクトル:PostgreSQL+pgvector
  • 個人開発・MVPGo単体:Go+PostgreSQL+htmx

習熟度

ジョブ・キャッシュSolid Queue/Solid Cache

Solid Queue

公式サイト ↗

既定:ジョブRuby / Rails

乗り換える条件

  • Sidekiq非常に高スループットが必要なとき

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)ジョブ・キャッシュ:Solid Queue/Solid Cache

Solid Cache

公式サイト ↗

既定:キャッシュRuby / Rails

乗り換える条件

  • Redis既存のRedis基盤がある場合

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)ジョブ・キャッシュ:Solid Queue/Solid Cache
認証Railsの認証ジェネレータ(社内ならGoogle/Entra IDのSSO)

Rails

公式サイト ↗

言語別の既定§2-3

Railsの標準構成(「Rails omakase」)にできるだけ乗る。外部依存を増やさないことが最大のメリットになる。

選ぶ場面§2-10

  • DBの読み書きと業務ロジックが中心ボトルネックはDB。言語の性能差はほぼ効かないので、開発速度とチームで選ぶ

既定:認証Ruby / Rails

乗り換える条件

  • DeviseOAuth連携・多要素認証など機能を一式揃えたいとき
  • Rodauth高度なセキュリティ要件

既定:CRUD中心のWebアプリ・管理画面作成物ごとの言語の決め方

乗り換える条件

  • TypeScript外部API連携が中心、またはReactで画面を作り込みたいとき
  • Kotlin業務ルールが非常に複雑で、既存のJava資産と連携するとき

既定:Rails認証・認可

乗り換える条件

  • DeviseOAuth連携・多要素認証など機能を一式揃えたいとき(§2-3)

採用の根拠§22-2

CRUD中心のアプリで開発速度が非常に高い。近年のRailsはSolid Queue/Solid Cache/Solid Cableでジョブ・キャッシュ・WebSocketをDBだけで動かせるため、Redisなどの追加ミドルウェアが不要。GitHubやShopifyが大規模に運用している実績がある。Kamalで特定のPaaSに依存せずデプロイできる

「Rubyは下火では」→ 採用企業は安定して存在し、フレームワークは毎年活発に更新されている

成長したら → PostgreSQL§24

きっかけ
複数台構成にしたい、書き込み待ちが目立つ
最初からの備え
SQLite固有の書き方を避け、ActiveRecordの範囲で書く

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)アプリ:Rails+Hotwire+tailwindcss-rails+ViewComponent
  • 業務システム・社内ツール(Rails構成)認証:Railsの認証ジェネレータ(社内ならGoogle/Entra IDのSSO)
  • 個人開発・MVPRailsワンマン:Rails+SQLite+Kamal+VPS

習熟度

Google Workspace

公式サイト ↗

既定:社内ツール認証・認可

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)認証:Railsの認証ジェネレータ(社内ならGoogle/Entra IDのSSO)

Microsoft Entra ID

公式サイト ↗

既定:社内ツール認証・認可

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)認証:Railsの認証ジェネレータ(社内ならGoogle/Entra IDのSSO)
認可Pundit

Pundit

公式サイト ↗

既定:認可Ruby / Rails

乗り換える条件

  • Action Policyルールが複雑でキャッシュやテスト支援が欲しいとき

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)認可:Pundit
管理画面Avo

Avo

公式サイト ↗

既定:管理画面Ruby / Rails

乗り換える条件

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)管理画面:Avo
帳票Playwright(HTML→PDF)

Playwright

公式サイト ↗

既定:テスト(E2E)TypeScript(Node.js)

既定:PDF生成ファイル・画像・動画

乗り換える条件

  • Typst帳票のレイアウトを厳密に制御したいとき

代替:システムテストRuby / Rails

既定は Capybara+Selenium(Rails標準)。安定性・速度を重視するとき に乗り換える。

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)帳票:Playwright(HTML→PDF)
デプロイKamal(オンプレVM・VPS)またはRender

Kamal

公式サイト ↗

既定:デプロイRuby / Rails

乗り換える条件

既定:VPS・オンプレVMどこで動かすか

乗り換える条件

  • Docker Compose+手動単一サーバーで更新頻度が低いとき

成長したら → 複数台/ECS§24

きっかけ
1台で処理しきれない、冗長化が必要
最初からの備え
アプリをステートレスにする。セッションとファイルはDB・S3に置く

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)デプロイ:Kamal(オンプレVM・VPS)またはRender
  • 個人開発・MVPRailsワンマン:Rails+SQLite+Kamal+VPS

習熟度

Render

公式サイト ↗

既定:自由に選べる・Webアプリどこで動かすか

乗り換える条件

  • Fly.ioリージョンの指定やマシン単位の細かい制御が必要なとき
  • Railway個人・検証用途

既定:PRプレビュー環境CI/CD・リポジトリ運用

乗り換える条件

  • Neonのブランチ機能と組み合わせてDBも分離プレビューごとに本番相当のデータで確認したいとき

代替:デプロイRuby / Rails

既定は Kamal。サーバー管理をしたくないとき に乗り換える。

成長したら → AWS(ECS+RDS+Terraform)§24

きっかけ
閉域網・監査・細かい権限管理が必要になった
最初からの備え
Dockerfileでビルドし、設定はすべて環境変数から読む

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)デプロイ:Kamal(オンプレVM・VPS)またはRender
  • 業務システム・社内ツール(TypeScript構成)デプロイ:Render(AWSならECS on Fargate、オンプレならコンテナでVM)
  • データ基盤・バッチ実行:RenderのCron Job(AWSならECSのスケジュールタスク)
テストMinitest+システムテスト

Minitest

公式サイト ↗

既定:テストRuby / Rails

乗り換える条件

  • RSpec+FactoryBotチームがRSpecに慣れている、または既存資産があるとき

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)テスト:Minitest+システムテスト
静的解析RuboCop、Brakeman、bundler-audit

RuboCop

公式サイト ↗

既定:Lint+フォーマットRuby / Rails

乗り換える条件

  • Standard設定を一切考えたくないとき

ケース別の構成§19

Brakeman

公式サイト ↗

既定:セキュリティ静的解析Ruby / Rails

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)静的解析:RuboCop、Brakeman、bundler-audit

bundler-audit

公式サイト ↗

既定:依存の脆弱性Ruby / Rails

ケース別の構成§19

  • 業務システム・社内ツール(Rails構成)静的解析:RuboCop、Brakeman、bundler-audit

§19-4の構成

構成図 業務システム・社内ツール(Rails構成)

flowchart TB
  U["社員"] --> SSO["SSO<br/>Google/Entra ID"] --> R["Rails<br/>Hotwire"]
  R --> DB[("PostgreSQL<br/>Solid Queue/Solid Cache")]
  R --> PDF["Playwright<br/>PDF 帳票"]
  K["Kamal"] -. "デプロイ" .-> R

作り始める

共通の準備

# 言語・ツールのバージョン固定(使う言語だけ)
mise use node@lts pnpm@latest
mise use go@latest
mise use ruby@latest
mise use python@latest uv@latest

# Gitフックと依存更新
pnpm add -D lefthook && pnpm exec lefthook install
# renovate.json を置き、GitHubでRenovateアプリを有効化する

業務システム・Rails構成(§19-4)

gem install rails
rails new app -d postgresql -c tailwind
cd app
bin/rails generate authentication
bundle add pundit pagy
# Kamalの設定は config/deploy.yml に生成済み

次に読む