カテゴリ: Laravel 更新日: 2025/12/14

Laravelでレイアウトを共通化する方法(layoutsディレクトリの活用)

Laravelでレイアウトを共通化する方法(layoutsディレクトリの活用)
Laravelでレイアウトを共通化する方法(layoutsディレクトリの活用)

先生と生徒の会話形式で理解しよう

生徒

「Laravelで複数のページを作るとき、毎回ヘッダーやフッターを同じように書くのは大変です。何か簡単に共通化できる方法はありますか?」

先生

「はい、あります。LaravelのBladeテンプレートにはレイアウトという仕組みがあって、よく使うページの枠組みをまとめて使い回せるんです。」

生徒

「レイアウトって具体的にどういうものですか?」

先生

「レイアウトは例えばヘッダー、フッター、メニューなどの共通部分を1つのファイルにまとめて、ページごとに変わる内容だけ差し込む仕組みです。これでコードの重複を減らせますよ。」

生徒

「実際にどうやって作るんですか?」

先生

「それでは、Laravelでのレイアウト共通化の方法をわかりやすく説明しますね!」

1. レイアウトとは?

1. レイアウトとは?
1. レイアウトとは?

レイアウトは、ウェブページで共通して使う部分(ヘッダー、フッター、メニューなど)を1つのファイルにまとめたものです。これにより、複数のページで同じ部分を毎回書く必要がなくなります。

たとえば、家の設計図のように、家の共通の骨組みを決めておいて、部屋の中の家具や飾りだけ変えるイメージです。

2. layoutsディレクトリの役割

2. layoutsディレクトリの役割
2. layoutsディレクトリの役割

Laravelのビュー(HTMLのテンプレート)は resources/views フォルダにあります。その中に layouts というフォルダを作り、レイアウト用のファイルを置くのが一般的です。

この layouts フォルダは、複数のページで共通して使うレイアウトテンプレートを管理する場所です。

3. レイアウトファイルの作り方

3. レイアウトファイルの作り方
3. レイアウトファイルの作り方

まずは resources/views/layouts/app.blade.php というファイルを作ります。ここに共通のHTML枠組みを書きます。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Laravelアプリ</title>
</head>
<body>
    <header>
        <h1>ここはヘッダーです</h1>
    </header>

    <main>
        @yield('content')
    </main>

    <footer>
        <p>ここはフッターです</p>
    </footer>
</body>
</html>

ここで使っている @yield('content') は、「ここに各ページごとの中身を差し込んでね」という意味です。

4. ページごとにレイアウトを使う方法

4. ページごとにレイアウトを使う方法
4. ページごとにレイアウトを使う方法

例えば resources/views/home.blade.php というページを作る場合、次のように書きます。


@extends('layouts.app')

@section('content')
    <h2>ホームページの内容</h2>
    <p>ここにホームページの説明を書きます。</p>
@endsection

@extends('layouts.app') で先ほど作ったレイアウトを読み込み、 @section('content') の中身がレイアウトの @yield('content') に差し込まれます。

5. レイアウト共通化のメリット

5. レイアウト共通化のメリット
5. レイアウト共通化のメリット

レイアウトを共通化すると、ヘッダーやフッターを1か所で管理できるので、変更があってもすぐに全ページに反映されます。

また、ページごとのコードがスッキリして見やすくなり、作業効率がアップします。

6. ポイント整理

6. ポイント整理
6. ポイント整理

Laravelでレイアウトを共通化する基本はとてもシンプルです。resources/views/layouts に共通の枠となるレイアウトファイルを用意して、レイアウト側に @yield で「差し込み場所」を作り、各ページ側で @extends@section を使って中身を入れます。

初心者は「毎回書くヘッダーやフッターはレイアウトへ、ページごとに変わる本文だけを各ページへ」と覚えると迷いにくいです。これだけでHTMLの重複が減り、修正も一か所で済むようになります。

たとえば、次のようにページ側に本文だけを書けば、レイアウトの @yield('content') に自動で合体します。


@extends('layouts.app')

@section('content')
    <h2>はじめてのページ</h2>
    <p>本文だけを書けば、ヘッダーとフッターは自動で付きます。</p>
@endsection

この仕組みを使うと、ページ数が増えても構造が崩れにくく、Laravelのビュー管理がぐっと楽になります。まずは1つだけページを作って、差し込みが動く流れを体感してみてくださいね。

まとめ

まとめ
まとめ

Laravelでレイアウトを共通化する考え方の振り返り

ここまで、Laravelでレイアウトを共通化する方法について、layoutsディレクトリの役割やBladeテンプレートの基本構文を中心に学んできました。LaravelでWebアプリケーションを開発していくと、ページ数が増えるにつれて、ヘッダーやフッター、ナビゲーションメニューなどの共通部分を何度も書く必要が出てきます。このような状態が続くと、コードの修正漏れや管理の手間が増え、保守性が下がってしまいます。

そこで役立つのが、LaravelのBladeテンプレート機能を活用したレイアウトの共通化です。layoutsディレクトリに共通レイアウト用のファイルを用意し、各ページからそれを読み込むことで、Webサイト全体の構造を一元管理できるようになります。これにより、デザインや構成を変更したい場合でも、レイアウトファイルを修正するだけで全ページに反映できるため、作業効率が大幅に向上します。

Bladeテンプレートの基本構文の重要性

レイアウト共通化の中心となるのが、@extends@yield@section といったBlade独自のディレクティブです。@yield はレイアウト側で「差し込み口」を定義し、@section は各ページ側でその中身を指定します。この仕組みを理解することで、Laravelのビュー構成が一気に分かりやすくなります。

初心者のうちは、HTMLとBladeの書き方が混ざって戸惑うこともありますが、役割を意識すると理解しやすくなります。レイアウトファイルはページ全体の枠組みを担当し、個別ページは内容だけを書く、という考え方を身につけることが大切です。

実務を意識したレイアウト共通化のサンプル

ここで、実際のWebサイト制作をイメージした、少し実務寄りのレイアウト例を見てみましょう。ナビゲーションメニューを含んだレイアウトのサンプルです。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>共通レイアウト</title>
</head>
<body>
    <header>
        <nav>
            <ul>
                <li>ホーム</li>
                <li>サービス</li>
                <li>お問い合わせ</li>
            </ul>
        </nav>
    </header>

    <main>
        @yield('content')
    </main>

    <footer>
        <p>© サンプルサイト</p>
    </footer>
</body>
</html>

このようなレイアウトを用意しておけば、ページごとにナビゲーションやフッターを書く必要がなくなり、コンテンツ部分の作成に集中できます。Laravelでの開発に慣れてくると、このレイアウト共通化は欠かせないテクニックになるでしょう。

先生と生徒の振り返り会話

生徒

「レイアウトを共通化すると、ページを増やしても管理が楽になる理由がよく分かりました。」

先生

「その通りです。Laravelでは、最初にレイアウトをしっかり作っておくことで、後の作業がとてもスムーズになります。」

生徒

「@yieldと@sectionの関係も、差し込み口と中身だと考えると理解しやすいですね。」

先生

「良い視点ですね。その考え方が身につけば、Bladeテンプレート全体が読みやすくなります。」

生徒

「これからは、ページを作る前にレイアウト設計を意識してみます。」

先生

「ぜひ実践してみてください。LaravelでのWeb開発が、もっと楽しく、効率的になりますよ。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド