1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MVCについて本気出してまとめてみた

Last updated at Posted at 2020-12-18

はじめに

Railsを当たり前のように使っているのですが、
「ところでMVCって何?」と問われると、意外と説明が難しい…と感じたので
自分なりに言語化するために、今一度まとめてみました。

※ここで扱うMVCは、Railsで使われる所謂「MVC2」と呼ばれるものです。

MVCとは

Model View Controllerの略称で、
プログラム全体を、データの表示部分とデータの処理、データベース管理の3つの要素に分けた、Webアプリケーションのデザインパターンです。

Railsの場合、MVCの処理はざっと、下図(自作…:sweat_smile:)の流れで行われます。

スクリーンショット 2020-12-18 15.38.32.png

処理の流れに合わせて、MVCの各機能を順に説明します。

MVCに入る前の… ルーティングとは

クライアントからまずリクエストを受け取ります。
**リクエスト内容から、対応する処理を持つコントローラーへ行先を指定する「対応表」**のような役割を持ちます。

C:Controller(コントローラー)

クライアントからのリクエストに対する処理を制御する部分です。
リクエストに該当するアクションを実行し、揃えた内容をレスポンスとしてクライアントへ返します。

レスポンスに必要な情報を揃えるために

  • モデルに伝えて、必要なデータを用意する
  • 画面表示に必要なデータをビューに渡す

といった、他機能との「橋渡し」のような役割を持っています。

M:Model(モデル)

**データベースとやり取りをする「窓口」**のような機能を持ちます。
コントローラーからの指示を元にデータベースへアクセスし、
必要なデータを取得や、データの加工(挿入・更新・削除)を行う部分です。

また、データの検証(バリデーション)やテーブル同士の関連付けなど、データベース内に保存されるデータについての細かい設定をする役割も担っています。

V:View(ビュー)

最終的なWebページの見た目を設定する部分です。
コントローラーから渡されたデータをHTMLなどで整形し、レスポンスとして返す画面表示を行います。

また、入力フォームからデータを取得し、コントローラーへ渡すこともあります。

MVCのメリット

下記2点が大きなメリットです。

  • 機能毎に分離しており、分業がしやすい
  • 他の機能部分の変更による影響を受けにくく、保守性が高まる

終わりに/感想

個人開発でなんとなくMVCを分かっているつもりでしたが、
記事にまとめることで、改めて理解を深めることが出来たと感じています。

初学者で拙い記事ですが、少しでもお役に立てると嬉しく思います。
最後まで読んでいただき、誠にありがとうございました。

開発環境

Ruby 2.6.5
Rails 6.0.3.4
MySQL
Visual Studio Code
(GoogleChrome)

参考記事・書籍

【書籍】Ruby on Rails6 超入門/掌田津耶乃
【公式】Railsドキュメント
【Qiita】MVCという概念をさくっと理解するためのまとめ。
【Qiita】MVCモデルについて
【Qiita】RailsのMVCをまとめてみる
【ピカワカ】MVCフレームワークを1から丁寧に解説!

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?