solid-rust について
solid-rustは、Rust 2024プロジェクトでモジュラーアーキテクチャとSOLID原則を適用するスキルです。モジュール配置、ファイル長、ドキュメントの規則を定め、実装前に再利用可能なコードを確認します。
主な機能
- 01src/modules/配下の機能別モジュール
- 02src/core/への共有コード配置
- 03Traitの配置とジェネリック境界の規則
- 04thiserrorとrustdocの要件
- 05実装前のDRY・再利用確認
活用シーン
- 01Rustの機能モジュールの構成
- 02SOLIDアーキテクチャ規則に沿ったコードレビュー
- 03サービス、Trait、ハンドラー、テストのひな型作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-rustインストール後、Claude Code で/solid-rustを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/error.mdhandler.mdmodule.mdservice.mdtest.mdtrait-def.md詳細
SOLID Rust は Rust 2024 エディション向けのモジュラーアーキテクチャを強制します。すべての機能は `src/modules/[feature]/`(handlers.rs、services.rs、repository.rs、traits.rs、models.rs)の下に配置し、共有コードは `src/core/` に置き、トレイトは `traits.rs` または `src/core/traits/` にのみ配置し、ジェネリクスは具象型ではなくトレイト境界を使用し、`thiserror` でカスタムエラーを処理し、すべての公開アイテムに rustdoc の `///` コメントを付けます。
新しいコードを書く前に、src/core/services と src/core/traits に対する DRY チェックを必須とします。概要については solid-principles.md を、SRP/OCP/LSP/ISP/DIP の詳細については各原則のリファレンスを、モジュール/サービス/トレイト/ハンドラー/エラー/テストの雛形についてはテンプレートを参照してください。
SOLID Rust - モジュラーアーキテクチャ
エージェントワークフロー(必須)
実装の前に、必ず 3 つのエージェントを並列で起動してください。それぞれ name を指定した Agent 呼び出しを 1 回ずつ行います。
- fuse-ai-pilot:explore-codebase - 既存のアーキテクチャを分析する
- fuse-ai-pilot:research-expert - Context7 経由で Rust ドキュメントを検証する
- fuse-ai-pilot:sniper - 実装後の検証を行う
DRY - 作成する前に再利用する(必須)
新しいコードを書く前に:
- 類似するトレイト、サービス、ロジックがないかコードベースを grep する
- 共有の場所を確認する:
src/core/services/、src/core/traits/ - 類似のコードが存在する場合 -> 重複させるのではなく拡張/再利用する
- コードが 2 つ以上の機能で使用される場合 ->
src/core/に作成する
アーキテクチャ(モジュールは必須)
| レイヤー | 場所 | 最大行数 |
|---|---|---|
| ハンドラー | src/modules/[feature]/handlers.rs | 50 |
| サービス | src/modules/[feature]/services.rs | 100 |
| リポジトリ | src/modules/[feature]/repository.rs | 100 |
| トレイト | src/modules/[feature]/traits.rs | 30 |
| モデル | src/modules/[feature]/models.rs | 50 |
| 共有 | src/core/{services,traits,models}/ | - |
フラットな src/ 構造を決して使用しないでください - 常に src/modules/[feature]/ を使用します
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイル制限 | 100 行(90 行で分割) |
| ハンドラー | 50 行未満、サービスに委譲する |
| トレイト | traits.rs または src/core/traits/ のみ |
| Rustdoc | すべての公開アイテムに /// |
| エラー処理 | カスタムエラーには thiserror を使用する |
| ジェネリクス | 具象型ではなくトレイト境界を使用する |
リファレンスガイド
概念
| トピック | リファレンス | 参照するタイミング |
|---|---|---|
| SOLID 概要 | solid-principles.md | クイックリファレンス |
| SRP | single-responsibility.md | 肥大化した構造体 |
| OCP | open-closed.md | impl の追加 |
| LSP | liskov-substitution.md | トレイトの契約 |
| ISP | interface-segregation.md | 肥大化したトレイト |
| DIP | dependency-inversion.md | ジェネリクス/DI |
| アーキテクチャ | architecture-patterns.md | モジュラークレート |
テンプレート
| テンプレート | 使用するタイミング |
|---|---|
| module.md | 機能モジュールの構造 |
| service.md | ビジネスロジックサービス |
| trait-def.md | トレイト定義 |
| handler.md | HTTP ハンドラー(Axum) |
| error.md | カスタムエラー(thiserror) |
| test.md | 単体テスト + 統合テスト |
禁止事項
| アンチパターン | 修正 |
|---|---|
| 100 行を超えるファイル | 90 行で分割する |
| impl ファイル内のトレイト | traits.rs に移動する |
Box<dyn Any> | 適切なトレイト境界を使用する |
フラットな src/ 構造 | src/modules/[feature]/ を使用する |
| ライブラリコードでの unwrap | Result<T, E> を使用する |
コメント
Markdown 対応