laravel:ports-and-adapters について
Laravel でポートとアダプターのパターンを構成するスキルです。アプリケーションに必要なインターフェースと薄いアダプターを使い、プロバイダー SDK の詳細をドメインコードから分離します。
主な機能
- 01アプリケーション中心の PHP インターフェース
- 02プロバイダー SDK を包むアダプター
- 03設定によるアダプター選択
- 04SDK データを独自型に変換
- 05薄くテスト可能なアダプター
活用シーン
- 01メールプロバイダー SDK の分離
- 02設定による連携先の切り替え
- 03ベンダーのデータをドメインコードから隔離
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:ports-and-adaptersインストール後、Claude Code で/laravel:ports-and-adaptersを入力して読み込まれたか確認します。
詳細
ポートとアダプター(ヘキサゴナル)
安定したインターフェースの背後にインテグレーションを抽象化します。ベンダー SDK をドメインコードに持ち込まないようにします。
構成
- ポート:アプリが必要とするものだけを表現する PHP インターフェース
- アダプター:プロバイダーごとに 1 つ用意し、SDK の癖を吸収します
- 選択:config/env/service provider を使ってアダプターを選択します
例(メール)
// Port
interface MailPort {
public function send(string $to, string $subject, string $html): void;
}
// Adapter
final class SesMailAdapter implements MailPort {
public function __construct(private \Aws\Ses\SesClient $ses) {}
public function send(string $to, string $subject, string $html): void {
// wrap SES specifics here
}
}
// Composition (AppServiceProvider)
$this->app->singleton(MailPort::class, function () {
return match (config('mail.driver')) {
'ses' => new SesMailAdapter(app('aws.ses')),
default => new SmtpMailAdapter(/* ... */),
};
});
ヒント
- SDK のデータを独自の型/DTO に正規化します
- ポートを通じて公開するのは、移植可能な機能のみにします
- アダプターは薄く保ち、十分にテストします
コメント
Markdown 対応