Academic-cap Rails Learning

2. 🧩 MVCとは?

🎯 この項の目的


Railsを動かす3人の“主役”たち(モデル・コントローラ・ビュー)の役割を理解すること。

これを理解すれば、「どのファイルに何を書くのか」が自然と見えてきます✨




🏭 1. MVCはRailsの「分業システム」


Railsは「Webアプリの時短工場」として紹介しましたが、

その工場の中では、3つの担当(Model・View・Controller) がチームとして働いています。


それぞれの役割を簡単にたとえると、こんな感じ👇



この3人が協力して、1つのWebアプリを動かしているんです。




💬 2. MVCの流れをイメージしてみよう


ユーザーがブラウザでボタンを押したとき、Railsの中ではこんな流れが起きています👇

👩‍💻 ユーザー
   ↓ (クリック!)
🧭 ルーティング(入口で案内)
   ↓
🎮 コントローラ(司令塔が命令を出す)
   ↓
🧱 モデル(データを取りに行く・保存する)
   ↓
🎨 ビュー(画面を表示)
   ↓
🌐 ユーザーのブラウザに返る

この流れを「リクエスト→レスポンスの流れ」と呼びます。

次の章ではもう少し詳しく見ていきますが、

ここでは「それぞれの役割のつながり」をざっくり掴むことが大切です💡




🧱 3. モデル(Model)=「データの倉庫係」


モデルは、データベースとやり取りする部分です。

たとえば、ユーザー情報・投稿内容・コメントなどを保存・取得します。

# app/models/post.rb
class Post < ApplicationRecord
  validates :title, presence: true
end

💬 ポイント:


  • モデルは「データのルール」を決める(例:タイトルが空じゃダメ!)
  • Post モデルなら、対応するテーブルは posts(自動で紐づく)
  • データを扱う命令(保存・検索など)は、ほぼモデルに書く


📦 たとえ:

倉庫係が「商品(データ)」を正しく棚に置いたり、取り出したりするような役割です。




🎮 4. コントローラ(Controller)=「司令塔・現場監督」


コントローラは、ユーザーの行動に応じて「何をするか」を決める部分です。


たとえば、「投稿一覧を表示したい」とリクエストが来たら、

「モデルにデータを取りに行け」「ビューに表示させろ」と命令します。

# app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end

💬 ポイント:


  • def index のようなメソッドを「アクション」と呼ぶ
  • アクションごとに、ビュー(表示する画面)が自動で対応する
  • データの処理はモデルに、見た目はビューに任せる(司令塔は命令だけ!)


🎯 たとえ:

工場の監督が「倉庫係、商品を持ってきて!」「デザイナー、きれいに並べて!」と指示を出す感じです。




🎨 5. ビュー(View)=「見た目担当のデザイナー」


ビューは、**ユーザーが実際に目で見る部分(画面)**です。

HTMLとRubyを組み合わせて、動的にページを作ります。


💬 ポイント:


  • <%= %> の中はRubyのコード。変数や値を表示できる。
  • コントローラで用意した @posts をここで使う。
  • ファイル名とアクション名をそろえると、自動で対応する(規約より設定!)


🎨 たとえ:

工場の「展示係」が、倉庫から届いた商品をきれいに陳列するようなイメージです。




🔁 6. 3つの役割の関係をまとめると



💬 覚え方のコツ:


モデル=倉庫、コントローラ=司令塔、ビュー=デザイナー。
コントローラが全体をまとめ、モデルとビューをつなぐ。




🌱 7. まとめ:MVCはRailsの心臓部!


  • Railsは MVC構造 でできている
  • それぞれの役割を分けることで、整理されたコードを書ける
  • コントローラが中心となり、モデルとビューをつないでアプリを動かす


💡 一言で言うと:


「モデルはデータを管理し、コントローラが指示を出し、ビューが見せる。」
この3つがチームプレイでWebアプリを動かしている🎮


次の章に行く前に...

この章で学んだ知識を覚えよう!

この章で学んだことを、Xでアウトプットしましょう ✨

対応するクイズに挑戦して理解を定着させましょう💡

クイズを解く