【えむぶいしー】

MVC とは?

最終更新:
💡 アプリを「データ・画面・制御」の3つの役割に分ける設計図

アプリケーションをModel(データ・業務の処理)・View(表示)・Controller(入力への対応)の役割に分ける設計パターン。責務を分離し、変更やテストを考えやすくする。

📌 このページのポイント
WebのMVC:商品一覧を表示する例 利用者 Controller 一覧への入力に対応 Model 商品データ・処理 要求 取得 データ View 一覧のHTMLを作る データを渡す 応答 責務を分け、必要な情報を受け渡す
Railsでリクエストに対応し、ModelのデータをControllerからViewへ渡し、HTMLを応答する流れを簡略化した図。MVCの全実装で同じ矢印になるわけではない。
ひよこ ひよこ
MVCって何で3つに分けるの?
ペンギン先生 ペンギン先生
表示、業務のルール、入力への対応が混ざりすぎないようにするためだよ。責務を分けると変更箇所やテスト対象を考えやすくなる。ただし画面に新しいデータを出す変更なら複数の役割を直すこともあり、必ず一か所で済むわけではないんだ
ひよこ ひよこ
Modelはデータベースのこと?
ペンギン先生 ペンギン先生
Modelはアプリが扱うデータや業務の処理を表す役割だよ。データベースへの保存も関係するけれど、データベースそのものだけを指すわけではない。ASP.NET Coreの説明でも、アプリの状態と業務のルールをModelの責務にしているね
ひよこ ひよこ
図の流れはどう読むの?
ペンギン先生 ペンギン先生
Railsで商品一覧のページを表示する例だよ。Controllerがリクエストに対応し、Modelから商品のデータを得てViewへ渡す。ViewがHTMLを組み立て、それを応答として返す。図はこのやり取りを簡略化しているんだ
ひよこ ひよこ
どのMVCでもこの矢印になるの?
ペンギン先生 ペンギン先生
3つに責務を分ける考え方は共通でも、通知やデータの受け渡し方はフレームワークで変わるよ。WebのMVCと画面アプリのMVCの違いにも注意しよう。Controllerへ何でも詰め込むと、責務を分けた利点が小さくなるね
ひよこ ひよこ
ReactなどもMVCを使うの?
ペンギン先生 ペンギン先生
ReactでUIを作るだけでは、ModelやControllerをどう構成するかまでは決まらないよ。コンポーネントの分け方とアプリ全体の責務の分け方を区別しよう。MVCという名前だけで特定の構造を決めつけず、各環境の設計や説明を確かめるといいね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「MVC」って出てきたら「データ・表示・入力への対応を役割で分ける設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Model-View-Controller」 = モデル・ビュー・コントローラー
💬 3つの役割の頭文字。Modelはアプリのデータや業務の処理、Viewは表示、Controllerは入力への対応、と捉えると覚えやすいよ

参考資料

← 用語集にもどる