【Laravel基礎学習2】MVCとはなにかについて解説

laravelアイキャッチ Laravel

こんにちは、かつコーチです。

Laravelは、MVC(Model-View-Controller)アーキテクチャに基づいて設計されたフレームワークです。

MVCは、アプリケーションの構造を分離する設計パターンで、保守性や再利用性を高め、

コードの可読性を向上させるために広く使われています。

今回はそのMVCモデルについて詳しく解説します。

MVCとは?

  • Model(モデル): アプリケーションのデータやビジネスロジックを扱う部分。
  • View(ビュー): ユーザーに表示する部分、UI(ユーザーインターフェース)を担当する。
  • Controller(コントローラー): リクエストを受け取り、モデルやビューと連携して適切なレスポンスを生成する。

これら3つのコンポーネントが互いに分離されていることで、

システム全体の複雑さが軽減され、開発の柔軟性が向上します。


LaravelにおけるMVCの仕組み

Model(モデル)

モデルは、データベースとのやり取りを担当し、データの取得、保存、更新、削除などの操作を行います。

Laravelでは、モデルはEloquent ORMを通じてデータベースのレコードをオブジェクトとして扱い、

各レコードに対して直接操作を行うことができます。

  • 役割: データの取得や保存、バリデーション、ビジネスロジックの一部を担います。
  • Eloquent ORM: Laravelに内蔵されたORM(Object-Relational Mapping)で、データベースとのやり取りを簡潔に行うことができ、リレーション(関係)やスコープ、イベントなどの豊富な機能が提供されています。
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // 必要に応じてテーブル名、プライマリキー、タイムスタンプの設定ができる
    protected $table = 'posts';
    protected $primaryKey = 'id';
    public $timestamps = true;
}
  • クエリの例:
    • 全レコードを取得: Post::all();
    • 特定のレコードを取得: Post::find($id);
    • 条件付きクエリ: Post::where('status', 'published')->get();
    • リレーションの扱い: Post::with('comments')->find($id);

View(ビュー)

ビューは、ユーザーに表示されるHTMLやUI部分を担当します。

LaravelではBladeテンプレートエンジンを使用して、動的なコンテンツを効率よく表示します。

Bladeを使用することで、PHPコードをHTMLに埋め込むことが簡単になり、

テンプレートの継承やコンポーネントの再利用も容易に行えます。

  • 役割: データを表示するためのテンプレートを提供し、UIロジックを管理します。
  • Bladeテンプレートエンジン: BladeはLaravelのテンプレートエンジンで、テンプレートの継承や条件分岐、ループ、コンポーネントなどが簡単に記述できます。
<!-- resources/views/posts/index.blade.php -->
@extends('layouts.app')

@section('content')
    <h1>All Posts</h1>
    @foreach($posts as $post)
        <div class="post">
            <h2>{{ $post->title }}</h2>
            <p>{{ $post->content }}</p>
        </div>
    @endforeach
@endsection
  • Bladeの特徴:
    • テンプレートの継承: @extends@section でレイアウトを分けて使える。
    • コンポーネントとスロット: UI要素をコンポーネント化して再利用できる。
    • 条件分岐とループ: @if, @foreach, @for などの構文が使える。

Controller(コントローラー)

コントローラーは、リクエストを処理し、ビジネスロジックを実行してレスポンスを返す部分です。

Laravelのコントローラーは、ユーザーのリクエストを受け取り、

必要なデータをモデルから取得し、それをビューに渡します。

また、バリデーションや認証、アクセス制御などもコントローラーで処理されます。

  • 役割: リクエストを処理し、必要なモデルを呼び出してデータを取得し、ビューにデータを渡してレスポンスを生成する。
  • :
<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    // 全ての投稿を表示
    public function index()
    {
        $posts = Post::all();
        return view('posts.index', compact('posts'));
    }

    // 特定の投稿を表示
    public function show($id)
    {
        $post = Post::find($id);
        return view('posts.show', compact('post'));
    }

    // 新規投稿を作成するフォームの表示
    public function create()
    {
        return view('posts.create');
    }

    // 新しい投稿を保存
    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required',
            'content' => 'required',
        ]);

        Post::create($validated);

        return redirect()->route('posts.index');
    }
}
  • コントローラーの主な処理:
    • ユーザーリクエストの受け取り。
    • データのバリデーション。
    • 必要なデータの取得や更新。
    • 処理結果のレスポンス生成(HTML, JSON, リダイレクトなど)。

MVCの流れ

  1. リクエスト: ユーザーがブラウザやAPIクライアントからリクエストを送信。
  2. ルーティング: 送信されたリクエストはLaravelのルートファイル(web.phpapi.php)で定義されたルートに従って処理される。
  3. コントローラーの呼び出し: ルートに関連付けられたコントローラーがリクエストを処理し、必要なロジックを実行する。
  4. モデルのデータ操作: コントローラーが必要に応じてモデルを使ってデータベース操作を行う(データの取得、保存、更新、削除など)。
  5. ビューにデータを渡す: コントローラーは取得したデータをビューに渡し、最終的なレスポンスを生成する。
  6. レスポンス: 最後に、ビューがHTMLやJSON形式で生成され、クライアントに返される。

LaravelのMVCの利点

  1. 役割の分離: ビジネスロジック(モデル)、UI(ビュー)、リクエストの処理(コントローラー)が明確に分かれているため、保守性と可読性が向上します。
  2. 再利用性: MVCパターンにより、ビューやモデルを他の部分で再利用しやすくなります。
  3. テストが容易: 各コンポーネントが独立しているため、個別にテストを行いやすくなります。特にLaravelのEloquent ORMは、データベースにアクセスする部分のテストを簡単にします。
  4. 開発のスピードアップ: Laravelの標準的なMVCアーキテクチャは、多くの一般的な機能が組み込まれており、素早く開発を進めることができます。
  5. 柔軟性: 大規模なアプリケーションにスケールしやすい構造を持っており、新しい機能の追加や変更が容易です。

まとめ

LaravelのMVCアーキテクチャは、ウェブアプリケーションの開発をシンプルかつ強力にするための設計パターンです。

モデルはデータベースとのやり取りを担い、

コントローラーはリクエストを処理し、

ビューはユーザーに表示されるUIを管理します。

これにより、保守性、再利用性、可読性が高いアプリケーションを効率的に構築することができます。

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