solid-ruby について
solid-rubyは、Ruby 4.0+およびRails 8のプロジェクトでモジュール型のSOLIDアーキテクチャを適用するエージェントスキルです。配置規則、コードと文書化の要件、再利用確認に加え、原則のガイドと実装テンプレートを提供します。
主な機能
- 01機能単位のモジュール構成
- 02共有コアサービスとコントラクト
- 03YARD文書と凍結文字列の必須化
- 04新規コード作成前の再利用確認
- 05SOLIDガイドとひな形
活用シーン
- 01新しいRails機能モジュールの構成
- 02実装前の再利用可能なサービス確認
- 03サービス、コントラクト、モデル、テストの作成
- 04モジュール型アーキテクチャ規則に沿ったコード確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-rubyインストール後、Claude Code で/solid-rubyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/contract.mderror.mdmodel.mdmodule.mdservice.mdtest.md詳細
SOLID Ruby は Ruby 4.0+/Rails 8 向けのモジュール型アーキテクチャを徹底します。すべての機能は `app/modules/[feature]/`(コントローラー、サービス、リポジトリー、コントラクト、モデル)に配置し、共有コードは `app/modules/core/` に置きます。コントラクト(ダックタイピングモジュール)は `contracts/` ディレクトリーにのみ配置し、すべてのファイルに `# frozen_string_literal: true` を記述し、すべての公開メソッドに YARD ドキュメントを付ける必要があります。
新しいコードを書く前に、app/modules/core/services と app/modules/core/contracts を対象に DRY チェックを行う必要があります。概要については solid-principles.md を、SRP/OCP/LSP/ISP/DIP の詳細については各原則のリファレンスを、モジュール/サービス/コントラクト/モデル/エラー/テストのひな形についてはテンプレートを参照してください。
SOLID Ruby - モジュール型アーキテクチャ
エージェントのワークフロー(必須)
実装を行う前に、並列でエージェントを 3 つ起動します。それぞれ name を指定して Agent を 1 回呼び出してください。
- fuse-ai-pilot:explore-codebase - 既存のアーキテクチャを分析します
- fuse-ai-pilot:research-expert - Context7 を使用して Ruby/Rails のドキュメントを確認します
- fuse-ai-pilot:sniper - 実装後の検証を行います
DRY - 作成前に再利用する(必須)
新しいコードを書く前に、必ず以下を行います。
- コードベースを Grep して、類似するモジュール、サービス、ロジックを探します
- 共有領域を確認します。
app/modules/core/services/、app/modules/core/contracts/ - 類似コードがある場合は、重複させずに拡張または再利用します
- 2 つ以上の機能で使用するコードは、
app/modules/core/に作成します
アーキテクチャ(モジュール必須)
| レイヤー | 配置場所 |
|---|---|
| コントローラー | app/modules/[feature]/controllers/ |
| サービス | app/modules/[feature]/services/ |
| リポジトリー | app/modules/[feature]/repositories/ |
| コントラクト | app/modules/[feature]/contracts/ |
| モデル | app/modules/[feature]/models/ |
| 共有 | app/modules/core/{services,contracts,concerns}/ |
フラットな app/ 構造は絶対に使わず、常に app/modules/[feature]/ を使用してください。
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイルの上限 | FUSE_SOLID_MAX_LINES |
| コントローラー | 薄く保ち、サービスに委譲する |
| コントラクト | contracts/ ディレクトリーのみ(ダックタイピングモジュール) |
| YARD ドキュメント | すべての公開メソッドに記述する |
| 文字列の凍結 | すべてのファイルに # frozen_string_literal: true を記述する |
| Concern | 共有動作(インターフェースなど)に使用する |
リファレンスガイド
概念
| トピック | リファレンス | 参照するタイミング |
|---|---|---|
| SOLID の概要 | solid-principles.md | クイックリファレンス |
| SRP | single-responsibility.md | 肥大化したクラス |
| OCP | open-closed.md | ストラテジーの追加 |
| LSP | liskov-substitution.md | コントラクト |
| ISP | interface-segregation.md | 肥大化したモジュール |
| DIP | dependency-inversion.md | インジェクション |
| アーキテクチャ | architecture-patterns.md | モジュール型 Rails |
テンプレート
| テンプレート | 使用するタイミング |
|---|---|
| module.md | 機能モジュールの構成 |
| service.md | ビジネスロジックのサービス |
| contract.md | ダックタイピングのコントラクト |
| model.md | Active Record モデル |
| error.md | カスタム例外 |
| test.md | RSpec テスト |
禁止事項
| アンチパターン | 修正方法 |
|---|---|
FUSE_SOLID_MAX_LINES を超えるファイル | 責務ごとに分割する |
| モデル内のビジネスロジック | サービスに切り出す |
| 肥大化したコントローラー | サービスに委譲する |
フラットな app/ 構造 | app/modules/[feature]/ を使用する |
| God クラス | 責務ごとに分割する |
コメント
Markdown 対応