MVCモデルって何?
MVCモデルは、アプリケーションを3つの部分に分けて整理する設計パターンです。MVCは以下の3つの頭文字から来ています:
- Model(モデル):データを扱う部分
- View(ビュー):画面表示を担当する部分
- Controller(コントローラー):ユーザーの操作を受け取って処理を制御する部分
簡単に言うと、「データ管理係」「画面表示係」「司令塔」の3つに役割分担して、アプリケーションを作りましょうという考え方です。
なぜMVCモデルが必要なの?
従来の問題点
昔のWebアプリケーションでは、全ての処理を1つのファイルに書くことが多くありました。例えば:
<?php
// データベース接続
$pdo = new PDO('mysql:host=localhost;dbname=sample', $user, $pass);
// ユーザーからの入力を受け取る
$name = $_POST['name'];
$email = $_POST['email'];
// データベースに保存
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
// HTMLを出力
echo "<html><body>";
echo "<h1>ユーザー登録完了</h1>";
echo "<p>名前: " . $name . "</p>";
echo "<p>メール: " . $email . "</p>";
echo "</body></html>";
?>
このような書き方だと、以下の問題が発生します:
- コードが複雑になる:全ての処理が混在するため、何をしているかわかりにくい
- 再利用が困難:同じ処理を別の場所で使いたくても、コピペするしかない
- 保守が大変:修正したい部分を見つけるのが困難
- チーム開発が困難:複数人で同じファイルを編集すると衝突しやすい
MVCモデルの利点
MVCモデルを使うことで、これらの問題を解決できます:
- 役割分担が明確:どこに何の処理が書いてあるかすぐわかる
- 再利用しやすい:Modelで作ったデータ処理を複数のControllerで使える
- 保守しやすい:画面を変更したいときはViewだけ、データ処理を変更したいときはModelだけ修正すればOK
- チーム開発がしやすい:デザイナーはView、エンジニアはModelとControllerを担当できる
それぞれの役割を詳しく見てみよう
Model(モデル)- データ管理の専門家
Modelは、データベースとのやり取りやビジネスロジック(業務処理)を担当します。
具体的な役割:
- データベースからデータを取得する
- データベースにデータを保存する
- データの形式をチェックする
- 計算処理を行う
public class UserModel {
private String name;
private String email;
// コンストラクタ
public UserModel(String name, String email) {
this.name = name;
this.email = email;
}
// データベースに保存する処理
public void save() {
// データベース接続処理
// INSERT文の実行
}
// メールアドレスの形式チェック
public boolean isValidEmail() {
return email.contains("@") && email.contains(".");
}
// ゲッター・セッター
public String getName() { return name; }
public String getEmail() { return email; }
}
View(ビュー)- 見た目の専門家
Viewは、ユーザーに見せる画面を作る部分です。HTMLやCSS、JavaScriptなどを使って、データを見やすく表示します。
具体的な役割:
- HTMLページを生成する
- データを整形して表示する
- ユーザーインターフェース(ボタン、フォームなど)を作る
<!DOCTYPE html>
<html>
<head>
<title>ユーザー登録</title>
</head>
<body>
<h1>新規ユーザー登録</h1>
<form action="/users" method="POST">
<div>
<label for="name">名前:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email" required>
</div>
<button type="submit">登録</button>
</form>
</body>
</html>
Controller(コントローラー)- 司令塔
Controllerは、ユーザーからの操作を受け取って、ModelとViewをコントロールする司令塔の役割を果たします。
具体的な役割:
- ユーザーからのリクエストを受け取る
- 必要に応じてModelを呼び出す
- 適切なViewを選択して画面を表示する
@Controller
public class UserController {
// ユーザー登録フォームを表示
@GetMapping("/users/new")
public String showRegistrationForm() {
return "user_form"; // user_form.htmlを表示
}
// ユーザー登録処理
@PostMapping("/users")
public String registerUser(@RequestParam String name,
@RequestParam String email) {
// 1. Modelを作成
UserModel user = new UserModel(name, email);
// 2. バリデーション
if (!user.isValidEmail()) {
return "error"; // エラーページを表示
}
// 3. データベースに保存
user.save();
// 4. 成功画面を表示
return "success"; // success.htmlを表示
}
}
MVCの処理の流れ
実際にユーザーがWebアプリケーションを使うときの流れを見てみましょう:
- ユーザーがアクション:ブラウザでボタンをクリックやフォーム送信
- Controllerが受信:ユーザーのリクエストをControllerが受け取る
- Modelで処理:必要に応じてModelでデータ処理やデータベース操作
- Viewで表示:処理結果をViewで整形してHTMLとして表示
- ユーザーに返却:ブラウザに画面が表示される
ユーザー → Controller → Model → Database
↑ ↓
View ← 結果
実際のフレームワークでの例
多くのWebフレームワークがMVCモデルを採用しています:
Spring Boot(Java)
src/
├── main/
│ ├── java/
│ │ ├── controller/ # Controller
│ │ │ └── UserController.java
│ │ ├── model/ # Model
│ │ │ └── User.java
│ │ └── service/ # ビジネスロジック
│ │ └── UserService.java
│ └── resources/
│ └── templates/ # View
│ ├── user_form.html
│ └── user_list.html
Ruby on Rails
app/
├── controllers/ # Controller
│ └── users_controller.rb
├── models/ # Model
│ └── user.rb
└── views/ # View
└── users/
├── index.html.erb
└── new.html.erb
まとめ
MVCモデルは、Webアプリケーションを作るときの「整理整頓術」のようなものです。
覚えておきたいポイント:
- Model:データの管理とビジネスロジック
- View:画面表示とユーザーインターフェース
- Controller:ユーザーの操作を受け取って全体をコントロール
この3つに分けることで、コードが整理され、保守しやすく、チーム開発もスムーズになります。
最初は「なんで分けるの?」と思うかもしれませんが、アプリケーションが大きくなるにつれて、MVCモデルの恩恵を実感できるはずです。
これからWebアプリケーションを作るときは、「これはModelの仕事?Viewの仕事?Controllerの仕事?」と考える習慣をつけてみてくださいね!