クリーンアーキテクチャ - 変更に強い境界設計

中級 | 4分 で読める | 2026.06.14

公式ドキュメント

クリーンアーキテクチャは、業務ルールをUI、DB、Webフレームワークなどの詳細から切り離す設計思想です。

Entityを中心にUse Case、Interface Adapter、Frameworkを同心円で配置し、コード依存は内向き、外部処理は内側のinterfaceを外側が実装するClean Architecture図

Dependency Rule

中心に近いコードは、外側の事情を知りません。

Framework / DB → Adapter → Use Case → Domain

矢印はコードの依存方向です。ユースケースがDBへ保存する必要があっても、特定ORMを直接呼びません。内側で保存用interfaceを定義し、外側のadapterが実装します。

interface OrderRepository {
  save(order: Order): Promise<void>;
}

class PlaceOrder {
  constructor(private orders: OrderRepository) {}

  async execute(input: PlaceOrderInput) {
    const order = Order.place(input);
    await this.orders.save(order);
  }
}

Controllerは入力をユースケース用の値へ変換し、結果をHTTPへ戻します。外部形式をドメインへ持ち込みません。

分ける判断

境界を置く価値があるのは、重要な業務ルールを外部技術の変更から守りたい場所です。

  • DBや外部APIをテスト用実装へ置き換えたい
  • 業務ルールと入出力処理が混ざり、変更理由が増えている

小さなCRUDへ一律に層を作ると、変換だけのコードが増えます。層の数ではなく、依存方向と変更理由で判断します。

まとめ

  • 業務ルールを内側、DBやUIを外側に置く
  • コードの依存は外側から内側へ向ける
  • Use Caseはアプリの操作、Adapterは内外の形式変換を担当する
  • 小さな処理まで機械的に多層化しない

業務モデルはドメイン駆動設計(DDD)、実装方法は依存性注入(DI)入門で扱います。

参考リソース

← 一覧に戻る
PR
PR
PR
PR