はじめに — Laravel × DDD × クリーンアーキテクチャ入門
本書は継続的に改善しています。気になる点や改善提案があれば、お気軽にコメントをお寄せください。
この本で学ぶこと
本書は、Vue/ReactなどでSPA開発経験があり、バックエンドAPI開発を学びたい方を対象に、Laravelを使ったドメイン駆動設計(DDD)とクリーンアーキテクチャの考え方をステップバイステップで解説します。
本書ではLaravelの基礎から解説します。Chapter 2「Laravel API開発の基礎」でLaravelの基本を学んでから、DDDの世界に進みます。
本書を読み終えると、以下のことができるようになります。
- LaravelでAPIバックエンドを構築できる
- DDDの主要概念(エンティティ、値オブジェクト、集約、リポジトリ)を理解し、実装できる
- LaravelプロジェクトにDDDの考え方を適用できる
- Eloquent Modelとドメインエンティティの違いを理解し、適切に使い分けられる
- 複数テーブルへの保存やトランザクション管理を適切に設計できる
本書の想定アーキテクチャ
本書では、SPAフロントエンド + APIバックエンドのアーキテクチャを想定しています。
本書の対象読者と前提知識はガイドのトップページにまとめています。読み進める前に一度ご確認ください。
本書ではPHP 8.2以上の構文(readonly、enum、コンストラクタプロモーションなど)を使用します。Chapter 2でこれらの構文も解説するので、PHP 7系の経験しかない方でも大丈夫です。
本書の構成
本書は 5 部構成です。各部のテーマと収録章はガイドのトップページの構造図・学習の流れにまとめています。
本書で使用する例
本書では、ECサイトの注文システムを題材として使用します。
この題材を通じて、DDDの各概念がどのように実装に落とし込まれるかを学びます。
サンプルコードについて
本書のサンプルコードは、以下の環境を想定しています。
- PHP 8.2以上
- Laravel 11以上
コードは説明のために簡略化している場合があります。実際のプロジェクトでは、エラーハンドリングやバリデーションなどを追加してください。
DDDとクリーンアーキテクチャの概要
DDDとは何か
DDD(Domain-Driven Design:ドメイン駆動設計)は、エリック・エヴァンスが提唱した、ビジネスロジックを中心に据えたソフトウェア設計手法です。
「ドメイン」とは、ソフトウェアが解決しようとするビジネス領域や問題領域のことを指します。例えば、ECサイトであれば「注文」「在庫管理」「決済」などがドメインに該当します。
DDDの核心的なアイデアは以下の通りです:
- ビジネスロジックをコードの中心に置く:データベースやフレームワークではなく、ビジネスルールを最優先に設計する
- ドメインエキスパートとの対話:ビジネス知識を持つ人とエンジニアが協力し、共通の言語で設計する
- コードでビジネスを表現:「このシステムが何をするのか」がコードから読み取れるようにする
従来の開発では「どうやって保存するか(DB設計)」から始めがちですが、DDDでは「何をするシステムなのか(ビジネスロジック)」を最初に考えます。これにより、ビジネス要件の変更に強いシステムを作ることができます。
クリーンアーキテクチャとは何か
クリーンアーキテクチャは、ロバート・C・マーチン(Uncle Bob)が提唱した、ビジネスロジックを外部依存から隔離するアーキテクチャパターンです。
クリーンアーキテクチャの重要な原則:
- 依存関係の方向:外側の層(UI、DB)は内側の層(ビジネスロジック)に依存するが、内側は外側を知らない
- ビジネスロジックの独立性:フレームワークやデータベースが変わっても、ビジネスロジックは影響を受けない
- テスタビリティ:外部依存を切り離せるため、単体テストが容易になる
本書では、DDDの考え方をクリーンアーキテクチャで実装していきます。
参照リソース
本書を読み進める上で、以下のリソースも参考にしてください。
Laravel公式ドキュメント
- Laravel Documentation - Laravel公式ドキュメント(英語)
- Laravel 日本語ドキュメント - 日本語翻訳版
DDDの原典
-
エリック・エヴァンス著『ドメイン駆動設計』(通称:DDD本、青本)
- DDDの生みの親による原典。深く学びたい方におすすめ
- 翔泳社から日本語訳が出版されています
-
ヴァーン・ヴァーノン著『実践ドメイン駆動設計』(通称:IDDD本、赤本)
- 実装に重点を置いたDDD解説書。コード例が豊富
クリーンアーキテクチャ
- ロバート・C・マーチン著『Clean Architecture』
- クリーンアーキテクチャの提唱者による解説書
- KADOKAWA から日本語訳『Clean Architecture 達人に学ぶソフトウェアの構造と設計』が出版されています
上記の書籍は理論的な内容が中心ですが、本書はLaravelでの実装に特化しています。理論書と合わせて読むことで、より深い理解が得られます。
それでは、DDDの世界へ踏み出しましょう。