5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モデル層?コントローラー層??

Posted at

MVCモデルって何?

MVCモデルは、アプリケーションを3つの部分に分けて整理する設計パターンです。MVCは以下の3つの頭文字から来ています:

  • Model(モデル):データを扱う部分
  • View(ビュー):画面表示を担当する部分
  • Controller(コントローラー):ユーザーの操作を受け取って処理を制御する部分

簡単に言うと、「データ管理係」「画面表示係」「司令塔」の3つに役割分担して、アプリケーションを作りましょうという考え方です。

なぜMVCモデルが必要なの?

従来の問題点

昔のWebアプリケーションでは、全ての処理を1つのファイルに書くことが多くありました。例えば:

old_style.php
<?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>";
?>

このような書き方だと、以下の問題が発生します:

  1. コードが複雑になる:全ての処理が混在するため、何をしているかわかりにくい
  2. 再利用が困難:同じ処理を別の場所で使いたくても、コピペするしかない
  3. 保守が大変:修正したい部分を見つけるのが困難
  4. チーム開発が困難:複数人で同じファイルを編集すると衝突しやすい

MVCモデルの利点

MVCモデルを使うことで、これらの問題を解決できます:

  1. 役割分担が明確:どこに何の処理が書いてあるかすぐわかる
  2. 再利用しやすい:Modelで作ったデータ処理を複数のControllerで使える
  3. 保守しやすい:画面を変更したいときはViewだけ、データ処理を変更したいときはModelだけ修正すればOK
  4. チーム開発がしやすい:デザイナーはView、エンジニアはModelとControllerを担当できる

それぞれの役割を詳しく見てみよう

Model(モデル)- データ管理の専門家

Modelは、データベースとのやり取りやビジネスロジック(業務処理)を担当します。

具体的な役割:

  • データベースからデータを取得する
  • データベースにデータを保存する
  • データの形式をチェックする
  • 計算処理を行う
UserModel.java
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ページを生成する
  • データを整形して表示する
  • ユーザーインターフェース(ボタン、フォームなど)を作る
user_form.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を選択して画面を表示する
UserController.java
@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アプリケーションを使うときの流れを見てみましょう:

  1. ユーザーがアクション:ブラウザでボタンをクリックやフォーム送信
  2. Controllerが受信:ユーザーのリクエストをControllerが受け取る
  3. Modelで処理:必要に応じてModelでデータ処理やデータベース操作
  4. Viewで表示:処理結果をViewで整形してHTMLとして表示
  5. ユーザーに返却:ブラウザに画面が表示される
ユーザー → 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アプリケーションを作るときの「整理整頓術」のようなものです。

覚えておきたいポイント:

  1. Model:データの管理とビジネスロジック
  2. View:画面表示とユーザーインターフェース
  3. Controller:ユーザーの操作を受け取って全体をコントロール

この3つに分けることで、コードが整理され、保守しやすく、チーム開発もスムーズになります。

最初は「なんで分けるの?」と思うかもしれませんが、アプリケーションが大きくなるにつれて、MVCモデルの恩恵を実感できるはずです。

これからWebアプリケーションを作るときは、「これはModelの仕事?Viewの仕事?Controllerの仕事?」と考える習慣をつけてみてくださいね!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?