サービスクラスとは?
Ruby on Railsのアーキテクチャ内で特定のビジネスロジックや操作をカプセル化するためのクラスです。
コーディングをしている時にアプリケーションのコントローラーやモデルが肥大化してしまうということがあると思います。
サービスクラスを使用することで、これらのロジックを適切に分離し、各クラスの責任を明確に保つことができます。
使用する時には、特定のビジネスルールや操作を一元管理する時に使用します。
導入メリット
Ruby on Railsでアプリケーションを開発する際、モデルやコントローラーにビジネスロジックが集中すると、コードが複雑になり保守性や拡張性が低下してきます。
サービスクラスを導入することで、ビジネスロジックを分離するとこで、コードの整理、テストのしやすさ、バグの早期発見、新機能の追加やリファクタリングの効率が上がります。
モジュールだはダメなの?
このような機能で似たものとして、モジュールがあります。しかしなぜモジュールはダメなのかというと、インスタンス変数が持てないということが理由です。
サービスオブジェクトは、通常、複数のメソッドやステップを経て処理を実行します。
この際、インスタンス変数を用いて状態を管理することが多いため、モジュールではカバーができないのです。
作成方法
1.サービスクラスを格納するためのディレクトリを作成
ディレクトリは標準では実装されていないため、app/servicesを作成します。
その中に処理の内容がわかるようなクラス名を定義したファイルを作成します。
サービスクラスの中身
サービスクラスは特定のビジネスロジックやタスクをカプセル化するクラスで、単一の公開メソッド(例: call や perform)を持ち、その中で必要な操作を行います。
class UserService
def initialize(user_params)
@user_params = user_params
end
def call
# ユーザー登録のロジック
end
end
サービスクラスを使ってみる
作成したサービスクラスは、コントローラー、モデル、他のサービスクラスなどで呼び出すことができます。
呼び出し方としてはクラスメソッドのため、インスタンス化を行い、そこから「.call」で実際の処理を行うよう設定することで処理を実装できます。
class UsersController < ApplicationController
def create
UserService.new(user_params).call
# その他の処理
end
end