PHPクラス設計入門
このガイドについて
PHP エンジニアが「クラス設計そのもの」を入門から実践まで学べる全14章のガイドです。前半でフレームワークに依存しないクラス設計の原則を身につけ、後半でその原則を Laravel の実務コードに応用します。読み終えると、Fat Controller / Fat Model のようなよくある設計の崩れを自分の言葉で説明し、どう直すか自分で判断できる状態を目指します。
このガイドの特徴
- 2部構成: 第1部(第1-7章)はフレームワーク非依存の PHP でクラス設計原則を解説、第2部(第8-14章)で Laravel のモデル/サービスクラス設計に応用します
- 判断基準を重視: 「何が正解か」の暗記でなく、「なぜこの設計を選ぶか」を各章末の練習問題で反復します
- クラス設計止まり: 第2部は Laravel でのクラス設計にとどまり、DDD やクリーンアーキテクチャの層実装には踏み込みません(詳しくは下記「このガイドで扱わないこと」)
- モダン PHP 前提: PHP 8.2 以上(readonly / enum / コンストラクタプロモーション)と Laravel 11 以上を対象
ガイドの構造
章立て
第1部: PHPによるクラス設計の原則(フレームワーク非依存)
| # | 章 | 概要 |
|---|---|---|
| 01 | はじめに | なぜクラス設計を学ぶのか。god class / 変更に弱いコードの実例で動機付け |
| 02 | PHP のクラス基本文法 | プロパティ・メソッド・コンストラクタ・可視性修飾子・readonly・コンストラクタプロモーション・enum |
| 03 | カプセル化と情報隠蔽 | public property の危険性、tell-don't-ask、ゲッター/セッターの要否判断 |
| 04 | 単一責任の原則 | クラスを小さく保つ。god class の兆候と責務分割の実例 |
| 05 | 継承とコンポジション | is-a / has-a、なぜ継承よりコンポジションが優先されるか |
| 06 | インターフェースと抽象への依存 | 契約に基づく設計、依存性逆転の入り口 |
| 07 | 凝集度・結合度と SOLID 総整理 | 第1部の集大成。O/L/I を補い、SOLID 5原則を凝集度/結合度という物差しで振り返る |
第2部: Laravelにおけるクラス設計の実践
| # | 章 | 概要 |
|---|---|---|
| 08 | 第2部の導入 | Fat Controller / Fat Model とは何か。本パートの範囲(クラス設計止まり)を明示 |
| 09 | Eloquent モデルの責務 | モデルに書いていい責務/書くべきでない責務の判断基準 |
| 10 | サービスクラスへの責務分割 | Controller 肥大化時に Service クラスへ処理を切り出す判断基準 |
| 11 | 依存性注入と Laravel のコンテナ | 第1部のインターフェース設計を Laravel でどう実践するか |
| 12 | 例外設計とバリデーション | カスタム例外クラス、Form Request の基本的な使い方、fail-fast な設計 |
| 13 | 実践: クラス設計のリファクタリング | Fat Controller/Fat Model のビフォーアフターで第1部の原則を総動員 |
| 14 | まとめ | 実務で自分で判断するためのチェックリストと、次のステップ |
対象読者
- クラス設計の基本原則を体系的に学びたい PHP エンジニア(第1部は Laravel の経験不問)
- Fat Controller / Fat Model の問題を感じている Laravel エンジニア
- Laravel × DDD × クリーンアーキテクチャ実践入門 を難しく感じ、その手前の基礎を固めたい人
前提知識
| 必須度 | 知識 | 対象範囲 |
|---|---|---|
| 必須 | PHP の基本文法(変数・関数・制御構文) | 全14章 |
| 不要 | クラス設計の経験 | 全14章(本ガイドで基礎から解説) |
| 第1部: 不要 / 第2部: 必須 | Laravel の基本的な MVC 構造・ルーティング・Eloquent の基本的な CRUD 操作 | 第8章以降(不安がある場合は第8章冒頭で案内する前提リンクを参照) |
推奨される読み方
- クラス設計そのものが初めて: 第1部から順番に読み、各章末の練習問題で理解を確認しながら進める
- クラス設計の基礎はあり、Laravel での応用を急ぎたい: 第1部を流し読みし、第8章から本格的に始める
- 辞書的に使いたい: 上の章立て表から該当する章を直接開く
このガイドで扱わないこと
- DDD 戦術パターン(値オブジェクト・エンティティ・集約・リポジトリパターン等)— Laravel × DDD × クリーンアーキテクチャ実践入門 が担当
- クリーンアーキテクチャの層実装(ユースケース層・プレゼンテーション層・トランザクション境界の管理等)— 同上
- Laravel フレームワーク自体の入門(ルーティングの書き方・Eloquent の基本操作等)— 第2部はこれらの経験済みを前提とする
関連ガイド
- Laravel × DDD × クリーンアーキテクチャ実践入門 — 本ガイドで扱わない DDD・クリーンアーキテクチャの実践編
- クリーンコード入門 — クラス — TypeScript でのクラス設計の考え方(言語は異なるが原則は共通)
- クリーンコード入門 — SOLID 原則 — TypeScript での SOLID 原則の解説