LaravelのMVCとは?初心者にも分かりやすく解説

開発

こんにちは、PHPエンジニアのYUUKIです。

最近Laravelの仕組みを体型的に学ぶ為、Laravel入門という本を参考に勉強しています。

今回はLaravel入門に書いてある、Laravelで使われているアーキテクチャスタイルのMVCについてわかりやすく解説していきます。

MVCとは

MVCとは、Model-View-Controllerの略で、
一言でいうと「Webアプリの裏側で動いている、Webの仕組みのパターン」のことを指します。

  • Modelはデータベースに近い概念で、主にデータベースの値を取得、挿入、更新、削除したりするSQLを書きます。
  • Viewは画面側の概念で、主にHTMLを書きます。Laravelでは、HTMLとPHPの処理を分離させる「テンプレートエンジン」という機能が組み込まれた「Blade」を採用しています。
  • ControllerはModelとViewとブラウザの中継部分で、主にDBから取ってきた値のバリデーションや、追加機能をViewに渡す役割を持っています。


文章だけだとイメージしにくいと思うので、以下にMVCのイメージ図を記します。

出典:Ruby on Rails チュートリアル 第2章 MVCモデル Usersリソース 継承やDBの仕組みを解説


MVCでは「Routing」という機能を用いることで、指定したURL(パス)にControllerファイルとメソッド(アクション)を紐付けます。たとえば、あるURLにアクセスしたとして、それがRoutingでControllerに紐付いていた場合は、紐付いているControllerとアクションを呼び出します。

具体的には、Controllerファイル名とそのControllerにある関数(アクション)をURL(パス)と紐付けます。

Routingは、routes/web.phpのファイルに、以下のような形式で記述します。

Route::HTTPメソッド(’パス名’, ‘コントローラ名@アクション名’)

↑の形式で実際に書いたコードを↓に載せます。

#ルート/hello にgetでアクセスした際、HelloControllerのindexアクションを呼び出す
Route::get('hello', 'HelloController@index');
#ルート/hello にpostをリクエストすると、HelloControllerのpostアクションを呼び出す
Route::post('hello', 'HelloController@post');


ちなみに、MVCの各ファイルは下記のパス配下に置きます。

  • Model Illuminate/Database/Eloquent/Model/ここに置く
  • Controller app/Http/Controllers/ここに置く
  • View resources/views/ここに置く


MVCの作成には、「artisan makeコマンド」を使用します。

MVCのメリット

MVCとはそもそも、Webの「アーキテクチャスタイル」で、プロダクトを作る際に用いる「共通の枠組み」の概念の一つです。

アーキテクチャスタイルについて、詳しく知りたい方は↓の記事をご覧ください。


MVCに沿った設計を行うことで、組んだプログラムを別の人に引き継ぐ際に、各処理が明確化し、かつ分かりやすくなります。

MVCは殆どのWeb系言語のフレームワークに採用されているため、LaravelでMVCを学ぶことで他のWeb言語のフレームワークを使用した時にも、全体のアーキテクチャをすんなり理解することが出来ます。

LaravelのMVCまとめ

  • MVCとはWebのアーキテクチャスタイル
  • MVCを用いることで、保守性に富んだ設計をすることが容易
  • Modelはデータベースへの問い合わせに対応し、VIewは画面側の出力処理を書き、ControllerはModelとViewとブラウザの中継部分
  • Laravelでは、VIewにテンプレートエンジンの「Blade」が組み込まれている
この記事を書いた人

元専業アフィリエイター。
2019年にプログラマーに転向し、受託開発企業からキャリアをスタート。
使用言語は主にPHP。SwiftやFlutterにも興味有。

Yuukiをフォローする
開発
Yuukiをフォローする
技術ブログ東京

コメント

  1. […] LaravelのMVCとは?初心者にも分かりやすく解説Laravel入門に書いてある、Laravelで使われているアーキテクチャスタイルのMVCについてわかりやすく解説していきます。tech.cloud-blazer.com2020.02.29 […]

タイトルとURLをコピーしました