solid-rust について
solid-rust は、Rust 2024 プロジェクトでモジュール型の SOLID アーキテクチャを実践するコーディングスキルです。コード再利用や層の配置、エラー処理、ドキュメントの規則に加え、実装前にエージェントを並列で起動する手順を定めています。
主な機能
- 01機能ごとのモジュール構成
- 02追加前の重複・再利用チェック
- 03トレイト境界によるジェネリクスと配置規則
- 04thiserror による独自エラー
- 05公開項目への Rustdoc
- 06テンプレートと SOLID 参考資料
活用シーン
- 01Rust の新機能モジュールの設計
- 02再利用可能なサービスやトレイトの確認
- 03ハンドラー、テスト、エラーのひな形作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ claude-plugins --skill solid-rustインストール後、Claude Code で/solid-rustを入力して読み込まれたか確認します。
詳細
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 - モジュール型アーキテクチャ
エージェントのワークフロー(必須)
実装を行う前に、name を指定した Agent 呼び出しをそれぞれ1回行い、3つのエージェントを並行して起動してください。
- 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 |
| サービス | src/modules/[feature]/services.rs |
| リポジトリ | src/modules/[feature]/repository.rs |
| トレイト | src/modules/[feature]/traits.rs |
| モデル | src/modules/[feature]/models.rs |
| 共有 | src/core/{services,traits,models}/ |
フラットな src/ 構造は絶対に使用せず、常に src/modules/[feature]/ を使用してください。
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイルの行数制限 | FUSE_SOLID_MAX_LINES |
| ハンドラー | 薄く保ち、サービスに処理を委譲します |
| トレイト | traits.rs または src/core/traits/ のみ |
| Rustdoc | すべての公開項目に /// を付けます |
| エラー処理 | カスタムエラーには thiserror を使用します |
| ジェネリクス | 具体型ではなくトレイト境界を使用します |
リファレンスガイド
概念
| トピック | リファレンス | 参照する場面 |
|---|---|---|
| SOLID の概要 | solid-principles.md | クイックリファレンス |
| SRP | single-responsibility.md | 肥大化した構造体 |
| OCP | open-closed.md | 実装の追加 |
| 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 | 単体テストおよび統合テスト |
禁止事項
| アンチパターン | 対処方法 |
|---|---|
FUSE_SOLID_MAX_LINES を超えるファイル | 責務ごとに分割します |
| impl ファイル内のトレイト | traits.rs に移動します |
Box<dyn Any> | 適切なトレイト境界を使用します |
フラットな src/ 構造 | src/modules/[feature]/ を使用します |
| ライブラリコードでの Unwrap | Result<T, E> を使用します |
コメント
Markdown 対応