本文へ移動
Laravel Tips

ビュー

画面の見た目を書いたファイル「ビュー」の作り方と返し方を説明します。データの渡し方・全部のビューへの共有・ビューコンポーザー・キャッシュによる高速化まで引けます。

ビューは、画面の見た目(HTML)を書いたファイルです。ルートやコントローラーの中に、HTML の文字を全部書くのは大変です。そこで HTML を別のファイルに分けて置きます。お店でいえば、接客の係(コントローラー)とは別に、お店の看板やメニューを作る係がいるようなものです。

ビューは、アプリの処理と、見た目を分けるためのもので、resources/views フォルダに置きます。Laravel では、ふつう、Blade(Laravel のテンプレートの書き方)で書きます。簡単なビューは、次のようになります。

blade
<!-- resources/views/greeting.blade.php に置いたビュー -->

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

このビューは resources/views/greeting.blade.php にあるので、どこからでも呼べる view ヘルパー関数で返せます。

php
Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});

補足

Blade の書き方は、Blade テンプレートで説明しています。

React・Svelte・Vue でビューを書く#

画面を、Blade ではなく、React・Svelte・Vue(どれも JavaScript で画面を作る道具)で書く人も増えています。Inertia というライブラリ(便利な部品のまとまり)を使うと、こうした画面を Laravel とかんたんにつなげられます。SPA(ページを切り替えずに動かすアプリ)を作るときのような、面倒な手間はかかりません。

React・Svelte・Vue のスターターキットは、Inertia を使った新しいアプリの、よい出発点になります。

ビューを作って表示する#

ビューは、resources/views フォルダに、拡張子(ファイル名の最後の部分)が .blade.php のファイルを置いて作ります。make:view という Artisan コマンド(php artisan で動かす Laravel のコマンド)でも作れます。

bash
php artisan make:view greeting

.blade.php という拡張子は、そのファイルが Blade のテンプレートだと、Laravel に伝えます。Blade のテンプレートには、HTML のほかに、Blade のディレクティブ(@ で始まる命令)を書けます。値を出す、「もし〜なら」を書く、データを順に処理する、といったことが簡単にできます。

ビューを作ったら、ルートやコントローラーから、view ヘルパー関数で返します。

php
Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});

View ファサード(クラス名と :: で呼べる窓口)でも、ビューを返せます。

php
use Illuminate\Support\Facades\View;

return View::make('greeting', ['name' => 'James']);

view の1つ目の引数は、resources/views フォルダの中の、ビューのファイルの名前です。2つ目の引数は、ビューで使えるようにするデータの配列です。この例では name の変数を渡していて、ビューの中で、Blade の書き方で表示しています。

フォルダの中のビュー#

ビューは、resources/views の中のフォルダにも置けます。フォルダの中のビューは、ドット(.)でつないだ名前で呼びます。たとえば、resources/views/admin/profile.blade.php にあるビューは、次のように返します。

php
return view('admin.profile', $data);

注意

ビューを置くフォルダの名前に、. を使ってはいけません。

最初に見つかったビューを使う#

View ファサードの first メソッドは、渡したビューの配列のうち、最初に存在するものを使います。アプリやパッケージで、ビューを入れかえ(上書き)できるようにしたいときに便利です。

php
use Illuminate\Support\Facades\View;

return View::first(['custom.admin', 'admin'], $data);

ビューがあるか調べる#

ビューがあるか調べるときも、View ファサードを使います。exists は、そのビューがあれば true を返します。

php
use Illuminate\Support\Facades\View;

if (View::exists('admin.profile')) {
    // ...
}

ビューにデータを渡す#

これまでの例のように、データの配列を渡すと、ビューの中で使えます。

php
return view('greetings', ['name' => 'Victoria']);

この形で渡すときは、キーと値の組の配列にします。渡したあと、ビューの中では、キーの名前で、値を使えます。たとえば、<?php echo $name; ?> と書けば、表示できます(Blade なら {{ $name }} です)。

配列をまるごと渡す代わりに、with メソッドで、1つずつデータを足せます。with は、ビューのオブジェクトを返すので、続けてメソッドをつなげられます。

php
return view('greeting')
    ->with('name', 'Victoria')
    ->with('occupation', 'Astronaut');

すべてのビューにデータを共有する#

アプリが表示するすべてのビューに、同じデータを渡したいことがあります。View ファサードの share メソッドを使います。ふつうは、サービスプロバイダ(アプリの起動のときに、道具箱へ道具を登録する場所)の boot メソッドの中で呼びます。App\Providers\AppServiceProvider に書いても、そのための専用のサービスプロバイダを作ってもかまいません。

php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        // ...
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        View::share('key', 'value');
    }
}

ビューコンポーザー#

ビューコンポーザーは、ビューが表示されるときに呼ばれる、コールバック(呼ばれたときに動く関数)か、クラスのメソッドです。ビューが表示されるたびに決まったデータを渡したいなら、その処理をビューコンポーザーの1か所にまとめられます。同じビューを複数のルートやコントローラーから返していて、いつも同じデータが要るときに、とくに役立ちます。

ふつう、ビューコンポーザーは、アプリのサービスプロバイダの1つに登録します。この例では、App\Providers\AppServiceProvider に書くことにします。

ビューコンポーザーは、View ファサードの composer メソッドで登録します。Laravel には、クラスで書くビューコンポーザーを置く、決まったフォルダはありません。好きなように整理できます。たとえば、app/View/Composers フォルダを作って、アプリのビューコンポーザーを入れられます。

php
<?php

namespace App\Providers;

use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        // ...
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        // クラスで書くコンポーザーを使う
        Facades\View::composer('profile', ProfileComposer::class);

        // クロージャで書くコンポーザーを使う
        Facades\View::composer('welcome', function (View $view) {
            // ...
        });

        Facades\View::composer('dashboard', function (View $view) {
            // ...
        });
    }
}

登録したので、profile のビューが表示されるたびに、App\View\Composers\ProfileComposer クラスの compose メソッドが動きます。コンポーザーのクラスの例です。

php
<?php

namespace App\View\Composers;

use App\Repositories\UserRepository;
use Illuminate\View\View;

class ProfileComposer
{
    /**
     * Create a new profile composer.
     */
    public function __construct(
        protected UserRepository $users,
    ) {}

    /**
     * Bind data to the view.
     */
    public function compose(View $view): void
    {
        $view->with('count', $this->users->count());
    }
}

ビューコンポーザーは、すべてサービスコンテナ(クラスを作って渡してくれる道具箱)から作られます。そのため、必要な部品は、コンストラクタ(クラスを作るときに動く部分)に型を書けば、受け取れます。

コンポーザーを複数のビューに付ける#

composer の1つ目の引数に、ビューの配列を渡すと、複数のビューに、1つのコンポーザーを付けられます。

php
use App\Views\Composers\MultiComposer;
use Illuminate\Support\Facades\View;

View::composer(
    ['profile', 'dashboard'],
    MultiComposer::class
);

composer は、* をワイルドカード(何にでも当たる印)として使えます。すべてのビューにコンポーザーを付けられます。

php
use Illuminate\Support\Facades;
use Illuminate\View\View;

Facades\View::composer('*', function (View $view) {
    // ...
});

ビュークリエイター#

ビューの「クリエイター」は、ビューコンポーザーによく似ています。ちがいは、ビューが表示される直前まで待たず、ビューが作られた直後に、すぐ動くところです。登録には、creator メソッドを使います。

php
use App\View\Creators\ProfileCreator;
use Illuminate\Support\Facades\View;

View::creator('profile', ProfileCreator::class);
メソッド 説明
View::share すべてのビューへ、同じデータを渡す
View::composer ビューを表示するときに動く処理を登録する
View::creator ビューを作った直後に動く処理を登録する
View::first 配列のうち、最初に存在するビューを作る
View::exists ビューがあるか調べる
View::make ビューを作る

ビューを速くする#

Blade のビューは、ふつう、必要になったときにコンパイル(実行しやすい形への変換)されます。ビューを表示するリクエストが来ると、Laravel は、コンパイル済みのものがあるかを調べます。あれば、元のビューが、そのあとに変更されたかを調べます。コンパイル済みのものがないか、元のビューが変更されていれば、コンパイルし直します。

リクエストの途中でコンパイルすると、わずかに速さが落ちることがあります。そこで、アプリで使うすべてのビューを、前もってコンパイルしておく、view:cache という Artisan コマンドがあります。速くしたいときは、公開(デプロイ)の手順の一部として、このコマンドを動かすとよいでしょう。

bash
php artisan view:cache

ビューのキャッシュ(作った結果を取っておいたもの)は、view:clear コマンドで消せます。

bash
php artisan view:clear
コマンド 説明
make:view ビューのファイルを作る
view:cache すべてのビューを、前もってコンパイルする
view:clear コンパイルしたビューのキャッシュを消す

関連するページ#

公式ドキュメント(英語)

2026年10月5日時点の内容をもとに、日本語でまとめています。

ページの一覧