W

Laravelのキャッシュクリア完全ガイド|config・route・viewの違いと使い分け

#Laravel #キャッシュ #artisan #トラブルシューティング

コードを直したのに反映されない。設定を変えたのに変わらない。Laravel でこうしたことが起きたとき、犯人はキャッシュであることがよくあります。

ところが調べてみると config:clearcache:clearview:clearoptimize:clear …と似たコマンドがたくさん出てきて、どれを使えばいいのか分かりません。この記事では、それぞれが何を消すのかを整理します。

迷ったときの答え

先に結論です。自分のパソコンで開発中に「何かおかしい」と思ったら、これ1つで構いません。

php artisan optimize:clear

Laravel の主要なキャッシュをまとめて消せます。まずはこれを覚えて、余裕ができたら以下の使い分けを読んでください。

⚠️ ただし本番環境では安易に使わないでください。 このコマンドは設定やルートのキャッシュだけでなく、アプリが保存しているキャッシュデータ(Cache::put() で入れた値など)も消します。本番で実行すると、キャッシュに頼っている処理が一時的に重くなったり、構成によっては他の動作に影響したりします。本番での扱いは後述します。

そもそもキャッシュとは

キャッシュとは、一度計算した結果を保存しておいて、次から使い回す仕組みです。毎回同じ計算をするより速くなります。

料理でいえば「作り置き」に近いものです。速くて便利ですが、材料(元のファイル)を変えても、作り置きは古いままです。これがキャッシュで混乱が起きる理由です。

Laravel には用途の違うキャッシュが何種類もあります。だからコマンドも複数あるわけです。

キャッシュの種類とコマンド一覧

消すものコマンド何のキャッシュか
設定php artisan config:clear.envconfig/ を1つにまとめたもの
ルートphp artisan route:clearroutes/ に書いた URL の定義
ビューphp artisan view:clearBlade を PHP に変換した結果
イベントphp artisan event:clearイベントとリスナーの対応表
アプリのデータphp artisan cache:clear自分でコードから保存したデータ
上記すべてphp artisan optimize:clearまとめて全部

以下、それぞれを見ていきます。

1. config:clear — 設定のキャッシュ

.env を書き換えたのに反映されないときは、これです。

php artisan config:clear

Laravel は php artisan config:cache を実行すると、.envconfig/ の中身を1つのファイルにまとめます。そのあとは .env ファイルが読み込まれなくなるため、.env を編集しても反映されません。

このとき、コードの中で env('APP_NAME') のように書いていた箇所は値を取得できなくなります。config/ の外では env() を使わず、config('app.name') の形で書くのが安全です。

この症状については、config:cache 後に .env が反映されないときの対処法 で詳しく解説しています。

2. route:clear — ルートのキャッシュ

routes/web.php に URL を追加したのに 404 になるときは、これです。

php artisan route:clear

route:cache を実行すると、URL の定義がキャッシュされます。その状態で新しいルートを追加しても、キャッシュが古いままなので「そんな URL は無い」= 404 になります。

いま登録されているルートを確認したいときは、次のコマンドが便利です。

php artisan route:list

3. view:clear — ビュー(Blade)のキャッシュ

Blade ファイルを編集したのに画面が変わらないときは、これです。

php artisan view:clear

Blade(.blade.php)は、そのままでは実行できないため、Laravel が裏で普通の PHP ファイルに変換して保存しています。この変換結果がビューのキャッシュです。

なお通常、Blade は元ファイルの更新を検知して自動で作り直されるので、開発中にこれで困ることは多くありません。それでも表示が変わらないときに使います。

4. cache:clear — アプリケーションキャッシュ

自分でコードから保存したデータを消すのがこれです。

php artisan cache:clear

たとえばコードの中で Cache::put('key', $value) のように保存したデータが対象です。

注意1: 名前が「cache」なので「これで全部消える」と思いがちですが、設定やルートのキャッシュは消えません。ここが一番の勘違いポイントです。

注意2: セッション(ログイン状態など)が消えるかどうかは、.envSESSION_DRIVER の設定によります。databasefile を使っている一般的な構成では、cache:clear の対象外なのでログイン状態は保たれます。逆に SESSION_DRIVER=cache にしている場合は、このコマンドで全ユーザーがログアウトします

5. optimize:clear — まとめて全部

すべてをまとめて消します。

php artisan optimize:clear

実行すると、次のように何を消したかが表示されます。

 INFO  Clearing cached bootstrap files.

 config .......................................... DONE
 cache ........................................... DONE
 compiled ........................................ DONE
 events .......................................... DONE
 routes .......................................... DONE
 views ........................................... DONE

configcachecompiledeventsroutesviews が一度に消えているのが分かります。原因が特定できないとき、開発環境ではこれを使うのが手早い方法です。

ここで 2番目の cache に注目してください。これは前項の「アプリのデータ」、つまり Cache::put() で保存した値そのものです。optimize:clear は設定やルートだけでなく、この保存データも一緒に消します。開発中は問題になりませんが、本番では意味が変わってきます。

なお、これで消えるのは Laravel が管理しているキャッシュだけです。ブラウザ側のキャッシュや、ビルドした CSS / JavaScript のファイルは対象外です。

逆に「キャッシュを作る」コマンド

キャッシュは本番環境ではあった方がよいものです。読み込みが速くなるからです。作るときは次のコマンドを使います。

php artisan optimize

実行するとこう表示されます。

 INFO  Caching framework bootstrap, configuration, and metadata.

 config .......................................... DONE
 events .......................................... DONE
 routes .......................................... DONE
 views ........................................... DONE

個別に作りたい場合は config:cacheroute:cacheview:cache を使います。

開発と本番での使い分け

ここが実務でとても大事なところです。

開発中(自分のパソコン)

キャッシュは作らないのが基本です。作ってしまうと、コードや設定を直すたびに反映されず、混乱のもとになります。

もし過去に config:cache などを実行してしまっているなら、消しておきましょう。

php artisan optimize:clear

本番環境(公開サーバー)

キャッシュを作るのが基本です。表示が速くなります。

新しいコードを反映したら、キャッシュを作り直します。デプロイ(公開サーバーへ設置すること)の手順には、次を入れておきます。

php artisan optimize

optimize は既存のキャッシュを上書きして作り直すので、これだけで設定・ルート・ビューは新しい内容に更新されます。

optimize:clear を先に実行する必要は、通常ありません。 前述のとおり optimize:clear はアプリが保存しているキャッシュデータまで消してしまうため、本番で毎回実行すると、キャッシュを前提にした処理が一時的に重くなることがあります。

もし本番で「設定だけ確実に作り直したい」という場合は、対象を絞って実行します。

php artisan config:cache   # 設定だけ作り直す
php artisan route:cache    # ルートだけ作り直す

まとめると: 本番は optimize を基本にする。optimize:clear は「何が原因か分からず、影響を理解したうえで全部消したい」ときだけに留める。

それでも直らないときは

キャッシュを消しても症状が変わらない場合、原因は別にあります。次を確認してください。

  • ブラウザのキャッシュ: ブラウザ自身が古い CSS や画像を覚えていることがあります。スーパーリロード(macOS は Cmd + Shift + R、Windows は Ctrl + Shift + R)を試します。
  • Composer のオートロード: クラスを新規作成したのに「見つからない」と言われる場合は、composer dump-autoload を実行します。
  • サーバーの再起動: php artisan serve を使っているなら、いったん止めて起動し直します。

まとめ

  • 開発中に迷ったら php artisan optimize:clear。Laravel の主要なキャッシュがまとめて消える。
  • .env が反映されない → config:clear
  • 追加した URL が 404 → route:clear
  • Blade の変更が反映されない → view:clear
  • cache:clearアプリが保存したデータだけ。設定やルートは消えない。
  • optimize:clear はアプリの保存データも消す。本番で安易に使わない。
  • 開発中はキャッシュを作らない。本番では optimize で作り直す

本番公開時の設定については、カリキュラムの 本番公開の準備(環境変数・最適化) で解説しています。