mcpField
P
ports-and-adapters

ports-and-adapters

github.com/dev-toolings開発22782 回インストール3 週間前に更新
リポジトリ

ports-and-adapters について

Symfony アプリケーションでポートとアダプターの設計を行う開発スキルです。ドメインルールをフレームワークやベンダーから分離し、ユースケース、インフラアダプター、テストを整理します。

主な機能

  1. 01ドメイン、アプリケーション、インフラ層
  2. 02インターフェースによるポート定義
  3. 03交換可能なインフラアダプター
  4. 04ユニット・統合テストの指針

活用シーン

  1. 01ドメインルールを Doctrine や HTTP から分離
  2. 02ストレージや決済プロバイダーの交換
  3. 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 の各レイヤーに構成する場合。

デフォルトのワークフロー

  1. ORM 属性を使わず、プレーンな PHP でドメインをモデル化します。エンティティと値オブジェクトを定義します。
  2. リポジトリーインターフェースなどのポートを、ドメイン内のインターフェースとして宣言します。
  3. ポートだけに依存するコマンドとハンドラーとして、アプリケーションレイヤーにユースケースを記述します。
  4. インフラストラクチャにアダプター(Doctrine リポジトリー、API クライアント)を実装し、XML マッピングを使用して、ドメインの外部でエンティティをマッピングします。
  5. 各ポートをサービス設定でアダプターにバインドします。コントローラーはインフラストラクチャに配置します。

ガードレール

  • src/Domain/ 配下から Symfony、Doctrine、ベンダー SDK のクラスをインポートしてはいけません。
  • 依存関係は内側に向けます。インフラストラクチャはドメインを認識しますが、その逆はありません。
  • ビジネスルールのない CRUD モジュールにレイヤーを追加しないでください。
  • プレーンなユニットテストでドメインを、統合テストでアダプターをテストします。

段階的な情報開示

  • 実行方針とリスク管理には、このファイルを使用します。
  • 詳細な実装情報が必要な場合は、参考資料を開きます。

出力の契約

  • レイヤー構成とポートインターフェース。
  • アダプターとそのサービスバインディング。
  • カーネルを起動しないドメインのユニットテスト。

参考資料

  • reference.md

コメント