Webサービスを作ろうと勉強を始めたあなたが、必ずどこかで耳にする「MVC」。
このアルファベット3文字を見た瞬間、教科書を閉じたくなる気持ちはわかります。
しかし、これは現代のWebシステム開発を回すために必要なものです。
プログラミング界の「三権分立」
さっそく結論ですがMVCとは、「やること」を3つに分けて、喧嘩しないようにする仕組みです。
もしあなたが友人と文化祭で「タピオカ屋」をやるとします。
タピオカを茹でる人、注文を聞く人、お客さんに商品を渡してニコッとする人。
これを一人でやろうとするとどうなるか。
タピオカを茹でながら注文を聞き、笑顔で商品を渡そうとして、足元の鍋をひっくり返してパニクります。
プログラミングも同じです。
すべてを一つのファイルに書き込むと、コードは絡まり合い、解読不能な「スパゲッティ」になります。
それを防ぐのがMVCフレームワークです。
M・V・Cという3人のやべー連中
MVCは、Model、View、Controllerの頭文字です。
彼らはそれぞれ性格が違いすぎて仲が悪いですが、仕事の上では完璧な連携を見せます。
「超人気の激務なラーメン屋」に例えて解説します。
M(Model):頑固一徹のデータ職人
彼は厨房の奥にいる気難しい料理長です。
彼が管理しているのは「データ」と「処理」という食材だけ。
- 仕事内容:データベースからデータを引っ張り出す、計算する、保存する。
- 性格:マジモンのコミュ障です。お客さんの顔(画面のデザイン)なんて見ません。
- 口癖:「画面の色?知らん。俺は最高のスープ(正しいデータ)を作るだけだ」
彼は自分の仕事である「データの整合性」だけに命をかけています。
もしラーメンに髪の毛(不正なデータ)が入っていたら、彼は顔真っ赤にしてブチギレてエラーを返します。
しかし、それがどのような皿(デザイン)に盛り付けられるかには一切興味がありません。
V(View):中身すっからかんのおしゃれ番長
彼女はホール担当のウェイターであり、盛り付け係です。
ユーザー(お客さん)が目にする「画面(見た目)」を作ります。
- 仕事内容:データを人間に見やすい形(HTML)にして表示する。
- 性格:中身(ロジック)のことは何もわかりません。
- 口癖:「計算とかムリ。とりあえずこの数字を赤色にして太字にすれば映えるでしょ?」
彼女はスープの味(データの正しさ)については責任を持ちません。
渡されたものをいかに綺麗に見せるか。それだけが彼女の生きる道です。
C(Controller):過労死寸前の中間管理職
彼は板挟みになる中間管理職です。
一番かわいそうなポジションです。
ユーザーからのアクセス(注文)を受け取り、それをさばきます。
- 仕事内容
1. ユーザーからのリクエストを受け取る。
2. Modelに「おい、データよこせ」と命令する。
3. Modelから受け取ったデータをViewに「これで画面作って」と渡す。
4. 完成した画面をユーザーに返す。 - 性格
自分では料理も接客もしません。ひたすら仲介します。 - 口癖
「モデルさん、早くしてください!ビューさん、笑顔が足りません!」
彼がいなければ、頑固な料理長とおしゃれ番長は一生口を聞かず、店は崩壊します。
Webサービスの裏側では常にControllerが走り回っているのです。
サンプルコードで見るブラック労働
ではPHPのような何かで、Controllerがどのように働いているかを見てみましょう。
雰囲気だけ伝わればと思います。
// Controller(店長)の頭の中
class RamenController {
// お客さんが「醤油ラーメン」を注文した時の処理
public function orderShoyu() {
// Model(料理長)へ命令(醤油ラーメンのデータを作らせる)
$soup = RamenModel::makeSoup('shoyu');
// View(ウェイター)へ命令(できたスープを持たせて客席へ行かせる)
return View::render('fancy_bowl', $soup);
}
}Code language: PHP (php)
このように、Controllerは指示を出すだけで、実作業はそれぞれのプロに丸投げします。
これが「疎結合」と呼ばれる状態で、システムを長持ちさせる秘訣です。
なぜわざわざ分けるのか?
「めんどい、1つのファイルに全部書けばいいじゃん」
最初はみんなそう思います。
しかし、もしModelとViewが癒着していたらどうなるでしょう。
例えば、「スープの味(データ処理)を変えたいだけ」なのに、「どんぶりの柄(HTML)」まで書き直さなければならなくなります。
あるいは、「スマホ用に表示を変えたい(Viewの変更)」だけなのに、誤ってスープの配分(Model)を触ってしまい、味が激変(バグ発生)します。
役割を分けていれば、以下のようになります。
- 「デザインの変更はViewのファイルだけ触ればいい」
- 「計算式の変更はModelのファイルだけ触ればいい」
デザイナーとプログラマーが別々に作業しても、お互いのファイルを壊す心配がありません。
平和は、適切な距離感から生まれるのです。
有名なMVCフレームワークたち
この「M・V・C」の仕組みを最初からセットにして、使いやすくまとめたキットを「MVCフレームワーク」と呼びます。
これらは、最初から整理整頓された棚が用意されているようなものです。
- Laravel (PHP):PHPで人気のあるフレームワーク。全部入りで便利。
- Ruby on Rails (Ruby):高速開発の王道。「設定より規約」というスパルタ教育が特徴。
- Django (Python):真面目で堅実。AI系とも仲良し。
これらを使えば、フォルダ構成が最初から「Model」「View」「Controller」に分かれています。
あなたは、決められたM、V、Cそれぞれにコードを放り込むだけで、洗練されたWebアプリが作れます。
悩む前に使ってみる
MVCという概念は文字で読むと複雑ですが、実際にコードを書いてみて慣れると「ああ、これは楽だ」と直感的にわかります。
部屋が片付いていると、探し物がすぐに見つかるのと同じ快感です。
最初はControllerのファイルを開いて、Modelを呼び出してみましょう。
画面に文字が出た瞬間、あなたはもうスタッフを操る敏腕経営者です。


コメント