jpskill.com
🛠️ 開発・MCP コミュニティ

rails-service-patterns

Railsのサービスオブジェクトやビジネスロジックの整理を支援し、コマンドパターンやクエリオブジェクトなどの設計パターン適用時に、より効率的な開発を促すSkill。

📜 元の英語説明(参考)

Rails service object patterns and business logic organization. Automatically invoked when working with service objects, extracting business logic, implementing command/query patterns, or organizing app/services. Triggers on "service object", "service", "business logic", "workflow", "orchestration", "command pattern", "query object", "form object", "interactor", "result object".

🇯🇵 日本人クリエイター向け解説

一言でいうと

Railsのサービスオブジェクトやビジネスロジックの整理を支援し、コマンドパターンやクエリオブジェクトなどの設計パターン適用時に、より効率的な開発を促すSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o rails-service-patterns.zip https://jpskill.com/download/10049.zip && unzip -o rails-service-patterns.zip && rm rails-service-patterns.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10049.zip -OutFile "$d\rails-service-patterns.zip"; Expand-Archive "$d\rails-service-patterns.zip" -DestinationPath $d -Force; ri "$d\rails-service-patterns.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して rails-service-patterns.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → rails-service-patterns フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Rails Service Object Patterns

Railsアプリケーションでビジネスロジックを抽出および整理するためのパターンです。

このSkillが適用される場合

  • コントローラ/モデルから複雑なロジックをサービスオブジェクトに抽出する場合
  • コマンド/クエリ分離パターンを実装する場合
  • 複数ステップのビジネスプロセスを処理する場合
  • 結果オブジェクトとエラー処理を設計する場合
  • app/services ディレクトリを整理する場合

コア原則

単一責任の原則

各サービスは一つのことをうまく行うべきです。

  • サービスには動詞 + 名詞で名前を付けます: CreateOrderSendEmailProcessPayment
  • サービスを焦点を絞り、構成可能に保ちます
  • パブリックメソッドは1つ(通常は call または perform

依存性注入

サービスをテスト可能で柔軟にします。

class NotificationService
  def initialize(mailer: UserMailer, sms_client: TwilioClient.new)
    @mailer = mailer
    @sms_client = sms_client
  end
end

サービスパターン

詳細な実装については、patterns.md を参照してください。

  • Basic Service Pattern
  • Result Object Pattern
  • Form Objects
  • Query Objects
  • Policy Objects

クイックリファレンス

Pattern When to Use
Basic Service トランザクション処理を伴う単純な操作
Result Object 呼び出し元が成功/失敗 + データ/エラーを必要とする場合
Form Object 複数のモデルにまたがる複雑なフォーム
Query Object 複雑な ActiveRecord クエリ
Policy Object 認可ロジック (Pundit-style)

サービスのテスト

RSpec.describe CreateOrder do
  let(:user) { create(:user) }
  let(:service) { described_class.new(user, cart_items) }

  describe '#call' do
    it 'creates an order' do
      expect { service.call }.to change { Order.count }.by(1)
    end

    context 'when payment fails' do
      before { allow(PaymentProcessor).to receive(:charge).and_raise(PaymentError) }

      it 'rolls back the transaction' do
        expect { service.call }.not_to change { Order.count }
      end
    end
  end
end

関連ドキュメント

  • patterns.md - 例を含む詳細なサービスパターン
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Rails Service Object Patterns

Patterns for extracting and organizing business logic in Rails applications.

When This Skill Applies

  • Extracting complex logic from controllers/models into service objects
  • Implementing command/query separation patterns
  • Handling multi-step business processes
  • Designing result objects and error handling
  • Organizing the app/services directory

Core Principles

Single Responsibility

Each service should do one thing well:

  • Name services with verb + noun: CreateOrder, SendEmail, ProcessPayment
  • Keep services focused and composable
  • One public method (typically call or perform)

Dependency Injection

Make services testable and flexible:

class NotificationService
  def initialize(mailer: UserMailer, sms_client: TwilioClient.new)
    @mailer = mailer
    @sms_client = sms_client
  end
end

Service Patterns

See patterns.md for detailed implementations of:

  • Basic Service Pattern
  • Result Object Pattern
  • Form Objects
  • Query Objects
  • Policy Objects

Quick Reference

Pattern When to Use
Basic Service Simple operations with transaction handling
Result Object When callers need success/failure + data/error
Form Object Complex forms spanning multiple models
Query Object Complex ActiveRecord queries
Policy Object Authorization logic (Pundit-style)

Testing Services

RSpec.describe CreateOrder do
  let(:user) { create(:user) }
  let(:service) { described_class.new(user, cart_items) }

  describe '#call' do
    it 'creates an order' do
      expect { service.call }.to change { Order.count }.by(1)
    end

    context 'when payment fails' do
      before { allow(PaymentProcessor).to receive(:charge).and_raise(PaymentError) }

      it 'rolls back the transaction' do
        expect { service.call }.not_to change { Order.count }
      end
    end
  end
end

Related Documentation

  • patterns.md - Detailed service patterns with examples