0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Clean Architecture】Frameworks are Details(フレームワークは詳細にすぎない)― 技術に振り回されないアーキテクチャ設計

Posted at

はじめに

多くのプロジェクトでは最初にこう考えがちです。

  • 「Spring Boot を使って何を作ろうか?」
  • 「Rails のモデル設計はどうする?」
  • 「Flutter の Widget 構成は?」

しかし Robert C. Martin(Uncle Bob)は 「フレームワークは詳細にすぎない」 と述べています。
つまり、フレームワークを中心に設計してはいけない ということです。


1. フレームワークは「道具」にすぎない

  • フレームワークは便利だが、アプリケーションの本質ではない
  • DB、Web、UI すべて「フレームワークやライブラリ」によって変わる
  • しかし ビジネスルールはそれらに依存しないはず

フレームワークは「使い捨ての道具」、ビジネスロジックこそが長持ちする資産。


2. Clean Architecture の同心円における位置づけ

  • 中心(Entities, UseCases) = アプリの本質
  • 外側(Frameworks) = 技術的詳細(DB, Web, UI, FW)

フレームワークは一番外側にある「可変要素」にすぎません。


3. 実装例(Kotlin + Spring Boot)

// 内側: ビジネスルール
data class Order(val id: String, val total: Int)

interface OrderRepository {
    fun save(order: Order)
}

// 内側: ユースケース
class PlaceOrderUseCase(private val repo: OrderRepository) {
    fun execute(order: Order) {
        if (order.total <= 0) throw IllegalArgumentException("金額が不正")
        repo.save(order)
    }
}

// 外側: フレームワークに依存する実装
@Repository
class JpaOrderRepository(private val jpaRepo: SpringDataOrderRepo) : OrderRepository {
    override fun save(order: Order) = jpaRepo.save(order.toEntity())
}

// 外側: Web コントローラ
@RestController
class OrderController(private val useCase: PlaceOrderUseCase) {
    @PostMapping("/orders")
    fun place(@RequestBody req: OrderRequest) {
        useCase.execute(Order(req.id, req.total))
    }
}
  • PlaceOrderUseCaseSpring も JPA も知らない
  • DB・Web・フレームワークが変わってもユースケースは変わらない

4. なぜ「フレームワークは詳細」なのか?

  1. 流行り廃りが激しい
    • Struts, JSF, GWT, AngularJS… かつて流行したが今は廃れた技術
    • でもアプリのルールは残る
  2. フレームワークは選択肢のひとつに過ぎない
    • Kotlin: Spring Boot / Ktor / Micronaut
    • Flutter: Riverpod / Bloc / Provider
    • どれを選んでもビジネスルールは同じ
  3. 本質はビジネスロジック
    • 技術に依存させないことで、テスト容易性・長期的な保守性を確保

5. よくあるアンチパターン

  • 「Spring Boot の機能を中心に設計してしまう」
  • 「Rails の ActiveRecord モデルがそのままドメインモデル」
  • 「Flutter の Widget に直接ビジネスロジックを書く」

→ これらはすべて フレームワークが主役になってしまった構造
本来、フレームワークはただの道具 に過ぎません。


まとめ

  • Frameworks are Details = フレームワークは外側の詳細であり、アプリの本質ではない
  • ビジネスロジック(Entities, UseCases)は フレームワークに依存しない 形で設計すべき
  • フレームワークを選ぶのは最後でよい。中心は常に ビジネスルール

つまり、「技術に振り回されない設計」 こそが Clean Architecture の目的なのです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?