# ヘキサゴナル設計 (hexagonal-architecture)

> ポートとアダプターの構成でシステムを設計・リファクタリングし、ビジネスロジックをフレームワークや永続化から切り離します。

- カテゴリ: [アーキテクチャ設計](https://www.myskills.tools/ja/categories/architecture/)
- 提供元: コミュニティ · Affaan Mustafa
- リポジトリ: https://github.com/affaan-m/ECC/tree/main/skills/hexagonal-architecture (commit d29cf65)
- SKILL.md: https://github.com/affaan-m/ECC/blob/main/skills/hexagonal-architecture/SKILL.md
- インストールコマンド: `npx skills add affaan-m/ECC --skill hexagonal-architecture`
- ライセンス: MIT
- 対応ツール: Claude Code, Codex, Cursor, Copilot, OpenCode
- 権限: read-repo ✓, write-files ✓, shell ✗, network ✗
- 状態: スキャン済み
- ルールスキャンですべてのリスクを検出できるわけではありません。インストール前にこのスキルの SKILL.md を読み、権限を確認してください。

## 基本ルール

依存の向きは常に内側で、ドメインは外部に依存せず、アダプターが外縁でポートを実装します。

## 実行フェーズ

1. **ユースケース境界** — 一つのユースケースに明確な入出力 DTO を定め、req や GraphQL の context などの通信の詳細を境界の外に置きます。
2. **出力ポートを先に** — 永続化、外部呼び出し、ログ、時計などすべての副作用をポートとして定義し、技術ではなく能力を表します。
3. **ユースケース実装** — ユースケースはコンストラクタや引数でポートを受け取り、不変条件の検証、ドメインルールの調整、単純なデータの返却だけを行います。
4. **アダプターと配線** — 外縁に入力・出力アダプターを実装して変換はそこに閉じ込め、依存の組み立ては一か所のコンポジションルートにまとめます。
5. **境界ごとにテスト** — ユースケースは偽のポートで単体テストし、アダプターは実インフラで結合テストします。既存システムは一気に書き換えず、スライスごとに移行します。

## 権限の説明（SKILL.md より）

| 機能 | 必要か | 説明 |
|---|---|---|
| ファイル書き込み | 必要 | ドメイン、ユースケース、ポート、アダプター、コンポジションルート、テストのコードを作成・リファクタリングします。 |
| コマンド実行 | 不要 | コマンドの実行は求めていません。 |
| 外部通信 | 不要 | ネットワークにはアクセスしません。 |

## SKILL.md のフロントマター（YAML）

```yaml
---
name: hexagonal-architecture
description: Design, implement, and refactor Ports & Adapters systems with clear domain boundaries, dependency inversion, and testable use-case orchestration across TypeScript, Java, Kotlin, and Go services. Use when introducing or refactoring toward Ports and Adapters, or when domain logic has become entangled with I/O.
metadata:
  origin: ECC
---
```

ホーム: https://www.myskills.tools/ja/ · URL: https://www.myskills.tools/ja/skills/hexagonal-architecture/
