【えむぶいしー】

MVC とは?

💡 アプリを「データ・画面・制御」の3つの役割に分ける設計図
📌 このページのポイント
MVC パターン ユーザー 操作・閲覧 Controller 入力を処理・制御 Model データ・ロジック View 画面表示 操作 更新指示 データ通知 表示 ユーザー → Controller → Model → View → ユーザー 責務を分離して保守性・拡張性を高める設計パターン
Model・View・Controllerに責務を分離する設計パターン
ひよこ ひよこ

MVCって何で3つに分けるの?

ペンギン先生 ペンギン先生

それぞれの責任を分けることで変更の影響を小さくできるからだよ。画面のデザインを変えたいときはViewだけ、データの扱い方を変えたいときはModelだけ触ればいい。全部一緒に書いてあると、1つ変えようとするだけで全体に影響が出る。

ひよこ ひよこ

RailsのMVCとiOSのMVCは同じ?

ペンギン先生 ペンギン先生

名前は同じでも実装が結構違う。RailsはControllerがHTTPリクエストを受けてModelを操作し、ViewにデータをレンダリングさせてHTMLを返す。iOSのMVCはViewとControllerが密接で「Massive View Controller」問題(Controllerが肥大化する問題)として知られるほど。MVCは「パターン名」であって、実装は環境によってかなり変わる。

ひよこ ひよこ

MVVMって何が違うの?

ペンギン先生 ペンギン先生

MVVM(Model-View-ViewModel)はViewModelがModelとViewを仲介する。特にデータバインディングと相性がよく、AngularSwiftUIVue.jsで採用されている。ViewModelはViewの「表示用のデータを整えた版」を持つ。MVCのControllerがUI操作に紐づくのに対し、ViewModelはUIを直接参照せず、テストがしやすい。

ひよこ ひよこ
ペンギン先生 ペンギン先生

ReactはMVCに当てはまらないとされることが多い。Viewに特化したライブラリで、アーキテクチャパターン自体は開発者が選ぶ設計になってる。Fluxアーキテクチャ(データが一方向に流れる)をFacebook が提唱して、それがReduxにつながった。「MVC=Web開発の標準」という時代からコンポーネントベース・単方向データフローへのシフトが起きているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
MVCって出てきたら「データ・画面・制御を分けた設計パターン」と思えばだいたいOK!
📖 おまけ:英語の意味
「Model-View-Controller」 = モデル・ビュー・コントローラー
💬 1979年にSmallTalk-80の設計で生まれた。Webフレームワーク(Rails・Django・Laravel)に広く採用された
← 用語集にもどる