メインコンテンツまでスキップ

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 / 変更に弱いコードの実例で動機付け
02PHP のクラス基本文法プロパティ・メソッド・コンストラクタ・可視性修飾子・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 とは何か。本パートの範囲(クラス設計止まり)を明示
09Eloquent モデルの責務モデルに書いていい責務/書くべきでない責務の判断基準
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部はこれらの経験済みを前提とする

関連ガイド