Webアプリケーションを効率的に開発・保守するためには、「MVCアーキテクチャ」の理解が不可欠です。MVCは多くのフレームワーク(Laravel、Symfonyなど)にも採用されている設計パターンで、PHPで自作ミニフレームワークを作ることで理解を深めることができます。
本記事では、MVCとは何か、PHPによる簡易MVC構成の実装、ルーティングとコントローラーの分離について学びます。

MVCとは?設計パターンと役割分担
MVCは、以下の3つの要素から成る設計パターンです:
- Model(モデル):データ処理やビジネスロジック
- View(ビュー):HTMLなどユーザーに見せる部分
- Controller(コントローラー):ユーザーからの入力を受け取り、ModelとViewをつなぐ
この分離により、保守性・再利用性・チーム開発の効率が向上します。
PHPで簡易MVC構成を作ってみよう
次のようなディレクトリ構造を使って、簡単なMVCを構築します。
/ ├── index.php ... フロントコントローラー ├── controllers/ │ └── UserController.php ├── models/ │ └── User.php ├── views/ │ └── user_view.php
1. index.php(ルーティングと呼び出し)
<?php
// シンプルなルーティング(例:?action=show)
$action = $_GET['action'] ?? 'index';
require_once 'controllers/UserController.php';
$controller = new UserController();
$controller->$action();
?>
2. controllers/UserController.php
<?php
require_once 'models/User.php';
class UserController {
public function index() {
$userModel = new User();
$users = $userModel->getAllUsers();
include 'views/user_view.php';
}
public function show() {
echo "ユーザー詳細ページ(show)";
}
}
?>
3. models/User.php
<?php
class User {
public function getAllUsers() {
return [ ['id' => 1, 'name' =>'佐藤'], ['id' => 2, 'name' => '田中'] ]; } }
?>
4. views/user_view.php
<h2>ユーザー一覧</h2>
<ul>
<?php
foreach ($users as $user):
?>
<li><?= htmlspecialchars($user['name'], ENT_QUOTES, 'UTF-8') ?></li>
<?php
endforeach;
?>
</ul>
ルーティングとコントローラーの処理分離
index.phpが「フロントコントローラー」として、URLパラメータ(例:?action=index)に応じてコントローラーメソッドを呼び出します。
この設計により、URL設計と処理ロジックが分離され、拡張・保守が容易になります。
例:URLによって動作が変化
/index.php?action=index
→ ユーザー一覧表示/index.php?action=show
→ 詳細ページ
将来的には、これを発展させて「ルーティングクラス」や「コントローラ自動読み込み」に進化させることもできます。
まとめ
今回は、PHPでMVCアーキテクチャを理解するために:
- MVCの基本構造と各要素の役割
- ディレクトリを分けた簡易MVC構成
- ルーティングとコントローラー処理の分離
を実装ベースで学びました。MVCの考え方は、LaravelやCakePHPなどのフレームワーク理解にも直結します。