ファットモデルを解消するためにconcernsを活用する

2025/08/05

モデルを責務ごとに分割するためにconcernsを使用する。

concernsを使用することで、データアクセスとビジネスロジックをその責任の単位でカプセル化できる。

concernsは複数のモデルで使用されるコードをカプセル化することでより威力を発揮するが、ファットモデルを解消する点で一つのモデルでのみ使用されるロジックであっても、concernsを使用することは有効である。

データベースと直接的なやり取りを行わない場合は、PORO(Plain Old Ruby Object)を使用する。

# app/models/concerns/taggable.rb
module Taggable
  extend ActiveSupport::Concern

  included do
    has_many :taggings, as: :taggable, dependent: :destroy
    has_many :tags, through: :taggings
  end

  def tag_names
    tags.map(&:name)
  end
end
# app/models/post.rb
class Post < ApplicationRecord
  include Taggable

  # Postモデル固有のロジックや関連付け
  belongs_to :user
end
# app/models/video.rb
class Video < ApplicationRecord
  include Taggable

  # Videoモデル固有のロジック
  belongs_to :user
end

関連ページ

ファットモデルを解消するためにPOROを活用する

参考

バックリンク