ddd-clean-architecture について
Clean Architecture と DDD に基づくアプリケーション設計を支援する開発者向けスキルです。レイヤー間の依存関係やテスト方針を解説します。
主な機能
- 014 層アーキテクチャの指針
- 02依存ルールとレイヤー境界
- 03DDD のエンティティとユースケースの対応
- 04パッケージとテストの整理
活用シーン
- 01レイヤー構造のアプリケーション設計
- 02コントローラーへの業務ルール配置の回避
- 03テストしやすい I/O インターフェースの定義
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill ddd-clean-architectureインストール後、Claude Code で/ddd-clean-architectureを入力して読み込まれたか確認します。
同梱ファイルLICENSE.txt
詳細
このスキルを使うタイミング
次のような場合に、このスキルを使用します。
- クリーンアーキテクチャのレイヤー(エンティティ、ユースケース、インターフェースアダプター、フレームワーク)に従ってアプリケーションを構成したい
- 依存関係のルールを徹底したい(内側のレイヤーは外側のレイヤーに依存しません)
- プロジェクトのパッケージを整理し、明確なテスト境界を定義したい
- クリーンアーキテクチャとドメイン駆動設計のパターンを組み合わせたい
このスキルの使い方
ワークフロー
- エンティティを定義する(最内層のレイヤー)。企業全体に適用されるビジネスルールを含めます
- ユースケースを定義する(アプリケーションレイヤー)。アプリケーション固有のビジネスロジックを含めます
- インターフェースアダプターを作成する(プレゼンター、ゲートウェイ)。レイヤー間のデータを変換します
- フレームワークを実装する(最外層)。Web、データベース、UI に関する処理を担います
レイヤー構造
com.example.app/
├── entity/ # Entities — business rules, no dependencies
├── usecase/ # Use Cases — application logic, depends only on entity
│ ├── port/ # Input/output port interfaces
│ └── interactor/ # Use case implementations
├── adapter/ # Interface Adapters — presenters, gateways
│ ├── controller/ # Web controllers
│ ├── presenter/ # Response formatting
│ └── gateway/ # Gateway implementations
└── framework/ # Frameworks — DB, web server, external APIs
├── web/
└── persistence/
ユースケースの例
// Use case port (input boundary)
public interface CreateOrderUseCase {
OrderOutput execute(CreateOrderInput input);
}
// Use case interactor
public class CreateOrderInteractor implements CreateOrderUseCase {
private final OrderGateway orderGateway;
private final PaymentGateway paymentGateway;
public CreateOrderInteractor(OrderGateway orderGateway, PaymentGateway paymentGateway) {
this.orderGateway = orderGateway;
this.paymentGateway = paymentGateway;
}
@Override
public OrderOutput execute(CreateOrderInput input) {
Order order = Order.create(input.getItems());
paymentGateway.charge(order.totalAmount());
orderGateway.save(order);
return OrderOutput.from(order);
}
}
ゲートウェイインターフェース(ユースケースレイヤーで定義)
public interface OrderGateway {
void save(Order order);
Optional<Order> findById(String id);
}
ベストプラクティス
- ビジネスルールはエンティティとユースケースに集約し、コントローラーやデータベースレイヤーにビジネスロジックを配置しないでください
- インターフェースを使って I/O を分離します。これにより、コアを置き換えやすく、テストしやすくなります
- エンティティとユースケースは、DDD の集約やドメインサービスに自然に対応します
- コアレイヤーはユニットテストでテストし、外側のレイヤーは統合テストまたは E2E テストでテストします
リソース
- Robert C. Martin 著『Clean Architecture』
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
キーワード
クリーンアーキテクチャ、依存関係のルール、ユースケース、エンティティ、インターフェースアダプター、ゲートウェイ、レイヤー分離、DDD、テスト容易性
コメント
Markdown 対応