Laravel『View [name] Not Found』の原因と対処法
- 作成日 2026.01.09
- その他
Laravelの「View [name] not found.」は、view() で指定したビュー名に対応するBlade(またはPHP)テンプレートが、Laravelが参照するビュー検索パス内に見つからないときに発生する。原因は「ファイル名/階層の指定ミス」「拡張子やディレクトリの勘違い」「views配下に置いていない」「名前空間付きビュー(vendor/モジュール)の設定不足」「キャッシュやデプロイの反映漏れ」などが多い。まずは“指定した view 名が、実際のファイルパスに正しく変換されているか”を機械的に突き合わせると早い。
- 1. エラーの出方と発生条件(典型例)
- 2. まず確認:view名→ファイルパスの対応を突き合わせる
- 3. 原因1:単純な指定ミス(階層・ドット区切り・ファイル名)
- 4. 原因2:拡張子や “views” を含めて指定している
- 5. 原因3:ファイル名の大文字小文字問題(本番だけ落ちる)
- 6. 原因4:ビューの配置場所が違う(resources/views以外に置いている)
- 7. 原因5:名前空間付きビュー(vendor/パッケージ/モジュール)の設定不足
- 8. 原因6:ビューキャッシュ/デプロイ反映漏れ(作ったのに見つからない)
- 9. サンプル:よくある構成と正しい呼び出し
- 10. チェックリスト(上から順に確認する)
エラーの出方と発生条件(典型例)
典型メッセージ。
InvalidArgumentException
View [users.profile] not found.
View [admin.dashboard] not found.発生条件の典型:
・return view(‘users.profile’) と書いたが resources/views/users/profile.blade.php が存在しない
・return view(‘users/profile’) のようにスラッシュ混在で意図と違う参照になっている
・大文字小文字が違う(本番Linuxでのみ再現しやすい)
・view(‘name’) の name に拡張子(.blade.php)を含めてしまっている
・パッケージ/モジュールのビューを参照しているが loadViewsFrom 等の設定が無い
・デプロイでビューが配置されていない、または view:cache が古い
まず確認:view名→ファイルパスの対応を突き合わせる
基本ルール:
・view(‘a.b.c’) → resources/views/a/b/c.blade.php を探す
・拡張子は指定しない(.blade.php を書かない)
例。
// OK
return view('users.profile');
// resources/views/users/profile.blade.phpファイルが本当に存在するか、デプロイ先のサーバでも確認する(ローカルだけ存在するケースがある)。
原因1:単純な指定ミス(階層・ドット区切り・ファイル名)
よくあるミス:
・users.profile のつもりが user.profile になっている
・views直下ではなく、別ディレクトリに置いている
・admin/dashboard.blade.php を作ったが view(‘admin.dashboard’) ではなく view(‘admin/dashboard’) を混在させている
対処:Laravel流の「ドット区切り」に統一すると事故が減る。
return view('admin.dashboard'); // resources/views/admin/dashboard.blade.php
スラッシュでも動く場合があるが、プロジェクト内で表記が揺れるとミスが増える。
原因2:拡張子や “views” を含めて指定している
以下は失敗しやすい。
// NG例(拡張子を含める)
return view('users.profile.blade.php');
// NG例(viewsを含める)
return view('views.users.profile');対処:view() には「拡張子なし・views配下基準の名前」だけを書く。
return view('users.profile');原因3:ファイル名の大文字小文字問題(本番だけ落ちる)
macOS/Windowsは大文字小文字を区別しない設定が多いが、本番Linuxは区別することが多い。
発生条件:
・resources/views/Admin/Dashboard.blade.php なのに view(‘admin.dashboard’) と書いている
・Profile.blade.php と profile.blade.php が不一致
対処:
・ディレクトリ/ファイル名をすべて小文字スネーク/ケバブ等に統一
・参照名も同じ規則に合わせる
例:
resources/views/admin/dashboard.blade.php
view(‘admin.dashboard’)
原因4:ビューの配置場所が違う(resources/views以外に置いている)
Bladeは基本 resources/views 配下が対象。
発生条件:
・テンプレートを public/ や storage/ に置いている
・別パスから読みたいが設定していない
対処:
・resources/views 配下に置く
・どうしても別ディレクトリを使うなら、View::addLocation などで追加する(一般的には推奨されにくい)
use Illuminate\Support\Facades\View;
View::addLocation(resource_path('custom_views'));
return view('foo.bar');原因5:名前空間付きビュー(vendor/パッケージ/モジュール)の設定不足
view(‘package::screen’) のような参照は、サービスプロバイダ等で loadViewsFrom が必要。
発生条件:
・vendor公開前提のビューを参照している
・自作モジュールで namespace を切ったが登録していない
対処:サービスプロバイダで定義する。
public function boot()
{
$this->loadViewsFrom(__DIR__.'/../resources/views', 'my-package');
}参照側。
return view('my-package::dashboard');「::」を使っているのに設定が無い場合は、このパターンが濃厚。
原因6:ビューキャッシュ/デプロイ反映漏れ(作ったのに見つからない)
view:cache を使っている環境で、デプロイ後にキャッシュが古いままだと参照のズレが残ることがある。
対処:必要に応じてクリア/再生成する。
php artisan view:clear
php artisan cache:clear
php artisan config:clear本番で最適化をしているなら、デプロイ手順に view:cache を組み込む。
php artisan view:cacheまた、単純に「デプロイ対象に resources/views が含まれていない」「ビルド工程で除外された」などもあるので、サーバ上にファイルが存在するかを確認する。
サンプル:よくある構成と正しい呼び出し
想定するファイル配置。
・resources/views/layouts/app.blade.php
・resources/views/users/index.blade.php
・resources/views/users/show.blade.php
呼び出し例。
// Controller
public function index()
{
return view('users.index');
}
public function show(User $user)
{
return view('users.show', compact('user'));
}Blade側での extends / include も同様に「ドット区切り」。
{{-- users/index.blade.php --}}
@extends('layouts.app')
{{-- users/show.blade.php --}}
@include('users.partials.card')チェックリスト(上から順に確認する)
1) エラーメッセージの view 名(例:users.profile)を確認したか
2) resources/views/users/profile.blade.php が “デプロイ先” に実在するか
3) view名のドット区切りが階層と一致しているか(a.b → a/b)
4) 拡張子(.blade.php)や views を指定に含めていないか
5) 大文字小文字が一致しているか(本番Linuxでのみ落ちていないか)
6) package:: 参照なら loadViewsFrom 等で名前空間登録があるか
7) view:cache を使う環境なら view:clear(必要なら view:cache)を実施したか
-
前の記事
Laravel『Cache Store Not Configured』の原因と対処法 2026.01.08
-
次の記事
記事がありません
コメントを書く