32.

Laravel キャッシュクリア完全ガイド(cache:clear / config:clear /

編集
この記事の要点
  • Laravel のキャッシュは アプリケーション・設定・ルート・ビュー・イベントの 5 種類があり、それぞれ別コマンド
  • 迷ったらまず php artisan optimize:clear で全部消える(5 種一括)
  • 本番デプロイ後に動作がおかしい時は 設定キャッシュを疑う → php artisan config:clear
  • PHP 自体の OPcache は Artisan では消えない → opcache_reset() または php-fpm 再起動
  • 本番では「クリア」ではなく config:cache / route:cache / view:cache事前生成するのが正解

Laravel のキャッシュは 5 種類ある

「キャッシュをクリア」と一口に言っても、Laravel には用途別に複数のキャッシュがあります。まず全体像を押さえましょう:

種類保存場所クリア本番生成
アプリケーションキャッシュ
(Cache::put 等)
storage/framework/cache/ または Redis/DBcache:clear
設定キャッシュbootstrap/cache/config.phpconfig:clearconfig:cache
ルートキャッシュbootstrap/cache/routes-v7.phproute:clearroute:cache
ビューキャッシュ(Blade コンパイル)storage/framework/views/view:clearview:cache
イベントキャッシュbootstrap/cache/events.phpevent:clearevent:cache

個別コマンドの使い分け

# 1) アプリケーションキャッシュ (Cache::put / Cache::remember)
php artisan cache:clear

# 2) 設定キャッシュ (.env / config/ の値)
php artisan config:clear

# 3) ルートキャッシュ
php artisan route:clear

# 4) ビューキャッシュ (Blade コンパイル済)
php artisan view:clear

# 5) イベントキャッシュ
php artisan event:clear

# 全部一括(5 種を順番に実行)
php artisan optimize:clear

状況別: どれをクリアすればよいか

症状原因の可能性実行コマンド
.env を変えたのに反映されないconfig キャッシュが古いphp artisan config:clear
新しいルートが 404route キャッシュが古いphp artisan route:clear
Blade を直したのに反映されないview キャッシュ / OPcachephp artisan view:clear + OPcache リセット
サービスプロバイダ追加が無視されるconfig / package discoveryphp artisan config:clear + php artisan package:discover
イベントリスナーが動かないevent キャッシュphp artisan event:clear
Cache::get の値が古いアプリキャッシュphp artisan cache:clear
PHP コードを直したのに反映されないOPcachephp-fpm 再起動 or opcache_reset()

OPcache のクリア(Artisan では消えない)

Laravel と別レイヤーの PHP 本体の OPcache は、Artisan コマンドでは消えません。本番で PHP ファイルを差し替えても古いコードが動き続ける場合、OPcache が原因です:

# 方法 A: php-fpm 再起動(最も確実)
sudo systemctl restart php8.2-fpm

# 方法 B: CLI から opcache_reset()
php -r "opcache_reset();"
# ↑ ただし CLI と FPM は別 OPcache のため通常は効かない

# 方法 C: HTTP 経由で opcache_reset() を実行
# public/opcache-reset.php (※IP 制限必須)

Composer autoload のキャッシュ

新しいクラス(Eloquent モデル、Service クラス等)を追加したのに「Class not found」になる場合、Composer のオートロードキャッシュが古いです:

# クラスマップ再生成(一番よく使う)
composer dump-autoload

# 本番向け最適化(PSR-4 を直接 classmap 化)
composer dump-autoload --optimize --no-dev

# Authoritative classmap(クラスマップに無いクラスはロードしない=高速)
composer dump-autoload --classmap-authoritative

本番デプロイ時のキャッシュ生成(重要)

本番では「クリア」ではなく 事前に config / route / view を 1 ファイルにキャッシュ生成することでパフォーマンスを最大化します:

# 本番デプロイ手順の例
cd /var/www/myapp
git pull origin main
composer install --no-dev --optimize-autoloader

# 既存キャッシュを一度クリア(重要:古い設定が残ると事故る)
php artisan optimize:clear

# 設定値を 1 ファイルに事前生成
php artisan config:cache    # → bootstrap/cache/config.php を生成
php artisan route:cache     # → bootstrap/cache/routes-v7.php を生成
php artisan view:cache      # → storage/framework/views/ に全 Blade をコンパイル
php artisan event:cache     # (Laravel 8+)

# まとめて
php artisan optimize

# DB マイグレーション
php artisan migrate --force

# OPcache をリセット
sudo systemctl reload php8.2-fpm

# キューワーカ再起動
php artisan queue:restart

注意: config:cache 実行後はコード中の env() が null を返します。必ず config() ヘルパー経由で設定値を取得してください。

「クリア」と「キャッシュ生成」の対応表

用途開発時(消す)本番(生成)
設定config:clearconfig:cache
ルートroute:clearroute:cache
ビューview:clearview:cache
イベントevent:clearevent:cache
全部optimize:clearoptimize

storage 配下を手動削除する方法

Artisan が動かない(例: 設定エラーで boot できない)緊急時は、キャッシュファイルを直接削除します:

# Laravel ルートディレクトリで実行
rm -f bootstrap/cache/config.php
rm -f bootstrap/cache/routes-v7.php
rm -f bootstrap/cache/services.php
rm -f bootstrap/cache/packages.php
rm -rf storage/framework/views/*
rm -rf storage/framework/cache/data/*

# パーミッション再設定
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

FAQ

Q: cache:clear で .env の変更が反映されない
A: cache:clear はアプリケーションキャッシュ専用。.env は config:clear(または config:cache を再実行)が必要です。

Q: 本番で php artisan を実行できる権限がない
A: storage/bootstrap/cache/ 配下のファイルを SSH で rm すれば同等の効果。ただし権限は www-data に戻すこと。

Q: route:cache がエラーで失敗する
A: ルート定義にクロージャが含まれていると route:cache は失敗します。Route::get('/', function(){...}) をコントローラーに移してください。

Q: Redis を使っているが cache:clear は効く?
A: 効きます。config/cache.php の driver が redis でも、php artisan cache:clear で Redis 上のキーが消えます。

関連コマンド

  • php artisan optimize — config + route + view を一括キャッシュ生成
  • php artisan optimize:clear — 全種類キャッシュを一括クリア
  • php artisan queue:restart — キューワーカに再起動シグナル
  • php artisan schedule:clear-cache — スケジューラの mutex キャッシュをクリア
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストールと設定
  2. クイックスタート & チュートリアル(初心者向け)
  3. クイックスタート & チュートリアル(中級者向け)
  4. ルーティング
  5. Bladeテンプレート(ビュー/レイアウト)
  6. コントローラー
  7. マイグレーションとテーブル定義
  8. データベースの設定
  9. Eloquentモデル (ORM)
  10. SQLとクエリビルダー
  11. バリデーション
  12. .envファイルの設定値へのアクセス
  13. 動作環境による分岐処理
  14. configフォルダ配下の設定値へのアクセス
  15. assetヘルパーを利用したpublicフォルダへのアクセス
  16. storageフォルダへのアクセス
  17. アプリケーション名の変更
  18. メンテナンス
  19. ログイン画面(認証システム)の作成
  20. ログインの必須化
  21. ログインユーザー情報の取得
  22. ルートの認証化
  23. 本番サーバーへのデプロイ方法
  24. 多言語化
  25. csrf_field
  26. ファイルのダウンロード
  27. CSVのアップロードおよび読み込み(maatwebsite/excel)
  28. ページタイトルの設定
  29. コマンド一覧
  30. エラー一覧
  31. SQLの実行ログ出力方法
  32. キャッシュのクリア
  33. Selectの結果の最初もしくは最後に任意の値を追加する方法
  34. ajaxでPOST通信する際の注意点
  35. ソーシャルログインの実装
  36. セッション情報の確認
  37. ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
  38. redirectやreturn viewにメッセージを付与する方法
  39. クッキー(cookie)の設定と取得
  40. クラスの再読み込み
  41. csrfの有効時間を変更する方法
  42. ViewComposerを用いてviewに共通の値を付与する方法
  43. View::shareを用いて共通の値を各ビューに渡す方法
  44. ミドルウェアを用いた処理の共通化
  45. Middleware内でAuth::check()などを使用する方法
  46. Controller以外でリダイレクトする方法
  47. セッションの値の取得/保存/更新/削除
  48. $requestの値を変更する方法
  49. 常時SSL化
  50. ページング(ページネーション)をする方法
  51. vue.jsとの連携
  52. Vue.jsと連携するSPA実行環境構築
  53. .envの値をvue.jsで参照する方法
  54. vue.jsを本番環境にリリースする方法
  55. could not find driver(Windows, MySQL編)