Vite manifest not found エラーの解決方法
Laravel 9+ と Vite を使用したプロジェクトで「Vite manifest not found」エラーが発生する場合の解決方法を解説します。このエラーは開発環境では問題なく動作するものの、本番環境(特に cPanel サーバー)で頻繁に発生します。
問題の概要
以下のエラーメッセージが表示される場合:
Vite manifest not found at: /home/???????/cart_shop/public/build/manifest.json
Missing Vite Manifest File
Did you forget to run `npm install && npm run dev`?これは Vite がビルドプロセスで生成する manifest.json ファイルが正しい場所に見つからないことを示しています。
主な原因と解決策
1. 基本的なビルドプロセスの実行
最も基本的な解決方法は、Vite のビルドプロセスを正しく実行することです。
# 依存パッケージのインストール
npm install
# プロダクションビルドの実行
npm run buildTIP
開発環境では npm run dev を使用しますが、本番環境では npm run build を実行して静的アセットを生成する必要があります。
2. Node.js のバージョン確認
Vite は特定の Node.js バージョンを要求します。古いバージョンでは問題が発生することがあります。
# 推奨バージョンのインストール(例:Node.js 20)
nvm install 20
nvm use 20WARNING
cPanel などの共有ホスティング環境では、デフォルトの Node.js バージョンが古い場合があります。必要に応じてバージョンマネージャーを使用してください。
3. ファイルパーミッションの確認
manifest.json ファイルが存在するのにエラーが発生する場合は、パーミッション問題の可能性があります。
# パーミッションの変更(Apache を使用している場合)
sudo chown www-data:www-data -R public/build/
sudo chmod g+w -R public/build/4. cPanel 環境での特別な設定
cPanel 環境では、ファイル構造が標準の Laravel 構造と異なることが多いです。
標準的な Laravel 構造:
- home
- public_html
- cart_shop
- app
- bootstrap
- public
- resources
- etccPanel での一般的な構造:
- home
- public_html (公開ディレクトリ)
- 公開ファイルとフォルダ
- cart_shop (アプリケーションルート)
- app
- bootstrap
- resources
- etcこの場合、以下のいずれかの方法で対応します。
方法 A: ビルドフォルダの複製
- ローカルで
npm run buildを実行 - 生成された
buildフォルダをアプリケーションルートのpublic/buildに配置 - 同じ
buildフォルダをpublic_html/buildにも複製
方法 B: パブリックパスの設定変更
AppServiceProvider.php でビルドディレクトリを変更:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Vite;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Vite::useBuildDirectory('.'); // カレントディレクトリをビルドディレクトリに
}
}方法 C: パブリックパスの明示的設定
public/index.php でパブリックパスを設定:
<?php
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
// メンテナンスモードの確認...
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
// Composer オートローダーの読み込み...
require __DIR__.'/../vendor/autoload.php';
// Laravel の起動とリクエスト処理...
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->usePublicPath(__DIR__); // パブリックパスを明示的に設定
$app->handleRequest(Request::capture());5. Vite 設定ファイルの調整
vite.config.js でカスタムパスを設定する場合:
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [
laravel({
input: 'resources/js/app.js',
// 必要に応じて公開ディレクトリを設定
// publicDirectory: 'public_html'
}),
vue({
template: {
transformAssetUrls: {
base: null,
includeAbsolute: false,
},
},
}),
],
// ビルド出力先のカスタマイズ
build: {
outDir: 'public_html/build',
manifest: true,
},
});トラブルシューティングのチェックリスト
- ビルドの実行:
npm run buildが成功しているか確認 - Node.js バージョン: サポートされているバージョンを使用(Node.js 16+ 推奨)
- ファイルの存在確認:
manifest.jsonが正しい場所に生成されているか確認 - パーミッション: ウェブサーバーがビルドファイルにアクセスできるか確認
- gitignore 設定:
public/buildが.gitignoreに含まれていないか確認 - キャッシュクリア: 変更後は設定キャッシュをクリアbash
php artisan config:clear php artisan cache:clear
まとめ
「Vite manifest not found」エラーは、主に以下の原因で発生します:
- ビルドプロセスの未実行または失敗
- Node.js のバージョン不一致
- ファイルパス設定の不備(特に cPanel 環境)
- パーミッション問題
環境に応じて適切な解決方法を選択し、本番環境デプロイ前に必ずテストを行うことをお勧めします。
INFO
本番環境でのデプロイ時は、必ず npm run build を実行してプロダクション用のアセットを生成してください。開発用の npm run dev コマンドはホットリロード機能付きの開発サーバーを起動します。