Skip to content

Servactoryの始め方 ​

規約 ​

  • サービスはServactory::Baseを継承し、app/servicesに配置します。一般的な方法: サービス用の基底クラスとしてApplicationService::Baseを作成します。
  • ドメインごとに名前空間でサービスをグループ化し、クラス名にはアクションを表す動詞を使用します。例: Users::Create、Orders::Process。名前空間にServiceを含めないでください — app/servicesディレクトリがそのコンテキストを提供します。

バージョンサポート ​

Ruby/Rails8.18.07.27.17.06.16.05.25.15.0
4.0✅✅✅✅✅❌❌❌❌❌
3.4✅✅✅✅✅✅✅✅✅❌
3.3✅✅✅✅✅✅✅✅✅❌
3.2✅✅✅✅✅✅✅✅✅❌
3.1❌❌❌❌❌❌❌❌❌❌

インストール ​

Gemfileに以下を追加します:

ruby
gem "servactory"

そして以下を実行します:

shell
bundle install

準備 ​

まず、継承用の基底クラスを準備します。

自動 2.5.0以降 ​

ジェネレーターを実行します:

shell
bundle exec rails g servactory:install

必要なファイルがすべて作成されます。

利用可能なすべてのオプションとジェネレーターについては、Railsジェネレーターを参照してください。

手動 ​

ApplicationService::Exceptions ​

ruby
module ApplicationService
  module Exceptions
    class Input < Servactory::Exceptions::Input; end
    class Output < Servactory::Exceptions::Output; end
    class Internal < Servactory::Exceptions::Internal; end

    class Failure < Servactory::Exceptions::Failure; end
  end
end

ApplicationService::Result 2.5.0以降 ​

ruby
module ApplicationService
  class Result < Servactory::Result; end
end

ApplicationService::Base ​

ruby
module ApplicationService
  class Base < Servactory::Base
    configuration do
      input_exception_class ApplicationService::Exceptions::Input
      internal_exception_class ApplicationService::Exceptions::Internal
      output_exception_class ApplicationService::Exceptions::Output

      failure_class ApplicationService::Exceptions::Failure

      result_class ApplicationService::Result
    end
  end
end

最初のサービス ​

最初のサービスを作成します:

shell
bundle exec rails g servactory:service users/create first_name middle_name last_name

スペックファイルを生成します:

shell
bundle exec rails g servactory:rspec users/create first_name middle_name last_name