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本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
rails-service-patterns.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
rails-service-patternsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Rails Service Object Patterns
Railsアプリケーションでビジネスロジックを抽出および整理するためのパターンです。
このSkillが適用される場合
- コントローラ/モデルから複雑なロジックをサービスオブジェクトに抽出する場合
- コマンド/クエリ分離パターンを実装する場合
- 複数ステップのビジネスプロセスを処理する場合
- 結果オブジェクトとエラー処理を設計する場合
app/servicesディレクトリを整理する場合
コア原則
単一責任の原則
各サービスは一つのことをうまく行うべきです。
- サービスには動詞 + 名詞で名前を付けます:
CreateOrder、SendEmail、ProcessPayment - サービスを焦点を絞り、構成可能に保ちます
- パブリックメソッドは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
callorperform)
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