アプリ設計の大きな流れ(2025)
2025年時点で推奨される Rails アプリ設計の全体像をまとめたページです。
Rails 7〜8 系の思想(Hotwire、Importmap / Vite、ViewComponent、Service層、Async Job、Security 強化 など)を踏まえた構成になっています。
■ 全体像(2025年版)
現代の Rails アプリ設計は、以下の 6 層を意識すると整理しやすくなります。
- UI / プレゼンテーション層(ビュー層)
- アクション層(コントローラ / Turbo Streams / FormObject)
- アプリケーション層(Service / Interactor)
- ドメイン層(PORO / Domain Models / Policies)
- 永続化層(ActiveRecord / Repository / QueryObject)
- インフラ層(外部API, Queue, Cache, CDN など)
各層の役割を明確化することで、Fat Model / Fat Controller の問題を避け、
保守性とテスト容易性が大幅に向上します。
1. UI / プレゼンテーション層(View, ViewComponent, Hotwire)
● 役割
- 画面描画に専念
- Ruby のロジックを極力持たない
- DOM 更新は Turbo / Stimulus に委ねる
● 主な構成要素
- ERB / Slim
- ViewComponent
- Turbo Frame
- Turbo Stream
- Stimulus
● ViewComponent の例
<%# app/components/user_card_component.rb %>
class UserCardComponent < ViewComponent::Base
def initialize(user:)
@user = user
end
end
2. アクション層(Controller / Turbo / FormObject)
● 役割
- 入出力の橋渡し
- ロジックは Service・Domain に委譲(薄く保つ)
- Turbo Stream のレスポンス制御
● FormObject の例
class UserSignupForm
include ActiveModel::Model
attr_accessor :email, :password
def save
return false unless valid?
User.create(email: email, password: password)
end
end
3. アプリケーション層(Service / Interactor)
● 役割
- ビジネスユースケースを実行する
- Controller から呼び出される
- 複数モデルを横断する処理を担当
● Service の典型構造
class UserSignupService
def call(form)
User.transaction do
user = User.create!(form.to_h)
WelcomeMailer.send_welcome(user)
end
end
end
2025 年の Rails 設計では Service を使ったユースケース分離 が一般化しています。
4. ドメイン層(PORO / Domain Models / Policies)
● 役割
- ビジネスルールの中心
- Rails に依存しない純粋な Ruby(PORO)が中心
- 業務判定やロジックの多くをこの層に集める
● 例:年齢チェックのドメインオブジェクト
class AgeChecker
def initialize(birthdate)
@birthdate = birthdate
end
def adult?
(Date.today - @birthdate).to_i / 365 >= 18
end
end
5. 永続化層(ActiveRecord / QueryObject / Repository)
● 役割
● QueryObject 例
class ActiveUsersQuery
def call
User.where(active: true).order(created_at: :desc)
end
end
6. インフラ層(外部サービス・非同期処理など)
● 役割
- メール、JOB、API 通信、SNS、決済 など
- アプリからはインターフェース越しに利用する
● 外部 API ラッパー(PORO で作成)
class PaymentApi
def charge(user, amount)
# 外部 API 通信の処理を書く
end
end
■ 設計全体の流れ(2025年版)
以下の順で考えると、アプリが破綻しにくくなります。
- ユースケース一覧を作る(=サービス層の入口一覧)
- ドメインルールを整理(PORO)
- データ構造(DB / モデル)を決める
- 画面(View / Turbo)を設計
- Controller で入出力を定義
- Service にユースケース処理を書く
- ドメイン層でルールを扱う
- テストを RSpec / SystemTest で書く
■ 2025 年の Rails 設計のキーワード
- Fat Controller / Fat Model を許容しない
- Hotwire(Turbo, Stimulus)ベースの UI
- ViewComponent でビューの再利用性を向上
- Service(Usecase)層で業務を整理
- PORO を活用したドメインロジック分離
- 非同期処理(ActiveJob / external queue)
- 外部API はインターフェース化
- テスト容易性を最優先にする
■ まとめ
2025 年の Rails では、
「Rails の良さを活かしつつ、責務をはっきり分離する」
ことが最重要になっています。
- UI は Hotwire と ViewComponent
- Controller は薄く
- Service がユースケースを担当
- Domain(PORO)が業務ルールの中心
- Model は永続化担当
- 外部サービスは切り出す
この流れを押さえると、大規模化しても壊れないアプリが作れます。
最終更新:2025年12月10日 08:01