solid-java について
SOLID原則と機能別モジュールでコードを構成するJavaチーム向けのアーキテクチャスキルです。責務分担、再利用、依存性注入、実装のひな形に関するルールとテンプレートを提供します。
主な機能
- 01機能別のモジュール構成
- 02共有コードの再利用チェック
- 03サービスに委譲する薄いコントローラー
- 04DTOにrecord、制限付き階層にsealed型を使用
- 05公開メソッドへのJavadoc
- 06アーキテクチャとコードのテンプレート
活用シーン
- 01Javaコードベースを機能別モジュールに整理
- 02再利用可能な共有サービスやインターフェースの確認
- 03サービス、リポジトリ、テストのひな形作成
- 04実装時のSOLID原則の適用
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ claude-plugins --skill solid-javaインストール後、Claude Code で/solid-javaを入力して読み込まれたか確認します。
詳細
SOLID Java では、Java 25 以降(現行の LTS)向けにモジュール化アーキテクチャを適用します。すべての機能は `modules/[feature]/` 配下(コントローラー、サービス、リポジトリ、インターフェース、モデル/DTO)に配置し、共有コードは `modules/core/` に配置します。インターフェースは `modules/[feature]/interfaces/` のみに配置し、コントローラーは薄く保ってサービスに処理を委譲します。ファイルは `FUSE_SOLID_MAX_LINES` 以内に収め、DTO にはレコード、制限付き階層にはシールド型を使用し、すべての public メソッドに Javadoc を付けます。
新しいコードを書く前に、modules/core/services と modules/core/interfaces を対象に DRY チェックを必ず行います。概要は solid-principles.md を、SRP/OCP/LSP/ISP/DIP の詳細は各原則のリファレンスを、モジュール/サービス/インターフェース/リポジトリ/エラー/テストのひな形はテンプレートを参照してください。
SOLID Java - モジュール化アーキテクチャ
エージェントのワークフロー(必須)
実装を行う前に、name を指定した Agent 呼び出しをそれぞれ 1 回ずつ使い、3 つのエージェントを並行して起動してください。
- fuse-ai-pilot:explore-codebase - 既存のアーキテクチャを分析します
- fuse-ai-pilot:research-expert - Context7 を使って Java のドキュメントを確認します
- fuse-ai-pilot:sniper - 実装後の検証を行います
DRY - 作成する前に再利用(必須)
新しいコードを書く前に必ず行うこと:
- 類似のインターフェース、サービス、ロジックがないか、コードベースを Grep で検索します
- 共有領域を確認します:
modules/core/services/、modules/core/interfaces/ - 類似コードが存在する場合 -> 重複させず、拡張または再利用します
- 2 つ以上の機能でコードを使う場合 ->
modules/core/に作成します
アーキテクチャ(モジュール必須)
| レイヤー | 場所 |
|---|---|
| コントローラー | modules/[feature]/controllers/ |
| サービス | modules/[feature]/services/ |
| リポジトリ | modules/[feature]/repositories/ |
| インターフェース | modules/[feature]/interfaces/ |
| モデル/DTO | modules/[feature]/models/ |
| 共有 | modules/core/{services,interfaces,models}/ |
フラットな src/ 構造は絶対に使用せず、必ず modules/[feature]/ を使用してください
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイルの上限 | FUSE_SOLID_MAX_LINES |
| コントローラー | 薄く保ち、サービスに処理を委譲します |
| インターフェース | modules/[feature]/interfaces/ のみ |
| Javadoc | すべての public メソッドに記述します |
| レコード | DTO に使用します(Java 16 以降) |
| シールド型 | 制限付き階層に使用します(Java 17 以降) |
リファレンスガイド
概念
| トピック | リファレンス | 参照するタイミング |
|---|---|---|
| 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 | モジュール化パターン |
テンプレート
| テンプレート | 使用するタイミング |
|---|---|
| module.md | 機能モジュールの構造 |
| service.md | ビジネスロジックサービス |
| interface.md | 契約の定義 |
| repository.md | データアクセス層 |
| error.md | カスタム例外 |
| test.md | モックを使った単体テスト |
禁止事項
| アンチパターン | 修正方法 |
|---|---|
FUSE_SOLID_MAX_LINES を超えるファイル | 責務ごとに分割します |
| 実装ファイル内のインターフェース | interfaces/ ディレクトリに移動します |
サービス内の new ConcreteClass() | 依存性注入を使用します |
フラットな src/ 構造 | modules/[feature]/ を使用します |
| ゴッドクラス | 責務ごとに分割します |
コメント
Markdown 対応