ports-and-adapters について
Symfony アプリケーションでポートとアダプターの設計を行う開発スキルです。ドメインルールをフレームワークやベンダーから分離し、ユースケース、インフラアダプター、テストを整理します。
主な機能
- 01ドメイン、アプリケーション、インフラ層
- 02インターフェースによるポート定義
- 03交換可能なインフラアダプター
- 04ユニット・統合テストの指針
活用シーン
- 01ドメインルールを Doctrine や HTTP から分離
- 02ストレージや決済プロバイダーの交換
- 03依存関係を明確にした境界づけられたコンテキストの構成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill ports-and-adaptersインストール後、Claude Code で/ports-and-adaptersを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
ポートとアダプター(Symfony)
使用する場面
- ドメインルールが Doctrine、HTTP、ベンダー SDK に依存してはならない場合。
- インフラストラクチャの依存関係(ストレージ、決済、メールプロバイダー)を切り替え可能、またはフェイクにする必要がある場合。
- 境界づけられたコンテキストを Domain、Application、Infrastructure の各レイヤーに構成する場合。
デフォルトのワークフロー
- ORM 属性を使わず、プレーンな PHP でドメインをモデル化します。エンティティと値オブジェクトを定義します。
- リポジトリーインターフェースなどのポートを、ドメイン内のインターフェースとして宣言します。
- ポートだけに依存するコマンドとハンドラーとして、アプリケーションレイヤーにユースケースを記述します。
- インフラストラクチャにアダプター(Doctrine リポジトリー、API クライアント)を実装し、XML マッピングを使用して、ドメインの外部でエンティティをマッピングします。
- 各ポートをサービス設定でアダプターにバインドします。コントローラーはインフラストラクチャに配置します。
ガードレール
src/Domain/配下から Symfony、Doctrine、ベンダー SDK のクラスをインポートしてはいけません。- 依存関係は内側に向けます。インフラストラクチャはドメインを認識しますが、その逆はありません。
- ビジネスルールのない CRUD モジュールにレイヤーを追加しないでください。
- プレーンなユニットテストでドメインを、統合テストでアダプターをテストします。
段階的な情報開示
- 実行方針とリスク管理には、このファイルを使用します。
- 詳細な実装情報が必要な場合は、参考資料を開きます。
出力の契約
- レイヤー構成とポートインターフェース。
- アダプターとそのサービスバインディング。
- カーネルを起動しないドメインのユニットテスト。
参考資料
reference.md
コメント
Markdown 対応