3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サービスクラスとは?

Posted at

サービスクラスとは?

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

参考サイト:
https://chatgpt-list.xyz/engineer/rails/rails%E3%81%A7%E5%88%9D%E3%82%81%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?