ホーム>Laravel>Laravelのキャッシュクリアのコマンド一覧(cache:clear・config:clear・optimize:clearで何が消えるか)
Laravel

Laravelのキャッシュクリアのコマンド一覧(cache:clear・config:clear・optimize:clearで何が消えるか)

いつもご利用ありがとうございます。
この記事にはアフィリエイト広告を含む広告が掲載されており、その広告費によって運営しています。
Amazonのアソシエイトとして、ララテックは適格販売により収入を得ています。

Laravelのキャッシュクリアのコマンド(cache:clear・config:clear・route:clear・view:clear・event:clear・clear-compiled・optimize:clear)を、Laravel 13で実行して、それぞれ何が消えるのかをファイルとテーブルで確かめました。.envの変更やルートの追加が反映されないときの原因も載せています。

Laravel で「.env を書き換えたのに反映されない」「ルートを足したのに 404 になる」というとき、まず試すのがキャッシュクリアのコマンドです。

ただ、cache:clear を打っても直らないことがあります。

それは、Laravel のキャッシュが何種類もあり、コマンドごとに消すものが違うからです。

この記事では、各コマンドを実際に実行して、どのファイルやテーブルが消えるのかを確かめました!

確かめた環境は、Docker の php:8.4-cli(PHP 8.4.27)・Composer 2.11.2・Laravel 13.42.0 です(2026年11月12日)。

composer create-project laravel/laravel で作ったままのプロジェクトで、.env は DB_CONNECTION=sqlite・CACHE_STORE=database になっていました。

まとめて消すなら optimize:clear

先に結論です。

どのキャッシュが原因か分からないときは、optimize:clear で全部消せます。

php artisan optimize:clear

Laravel 13.42.0 では、6種類を順に消していました。

   INFO  Clearing cached bootstrap files.

  config ......................................................... 1.00ms DONE
  cache ......................................................... 19.81ms DONE
  compiled ....................................................... 0.82ms DONE
  events ......................................................... 0.43ms DONE
  routes ......................................................... 0.53ms DONE
  views ......................................................... 12.49ms DONE

1行ずつ、下の個別のコマンドに対応しています。

optimize:clear の行個別のコマンド消えるもの(Laravel 13 で確かめた場所)
configphp artisan config:clearbootstrap/cache/config.php
cachephp artisan cache:clearアプリのキャッシュ(既定では cache テーブル)
compiledphp artisan clear-compiledbootstrap/cache/services.php・packages.php
eventsphp artisan event:clearbootstrap/cache/events.php
routesphp artisan route:clearbootstrap/cache/routes-v7.php
viewsphp artisan view:clearstorage/framework/views の中身

cache:clear が消すのは、この表の「cache」の1行だけです。

設定やルートのキャッシュは、cache:clear では消えません。

今キャッシュされているものを見る

どれがキャッシュされているかは、about コマンドで見られます。

php artisan about --only=cache

php artisan optimize で全部キャッシュした直後は、すべて CACHED でした。

  Cache ......................................................................
  Config .............................................................. CACHED
  Events .............................................................. CACHED
  Routes .............................................................. CACHED
  Views ............................................................... CACHED

このあと cache:clear を実行しても、表示は CACHED のまま変わりませんでした。

下の個別のコマンドで config・routes・views・events を消し、最後に clear-compiled を実行したあとは、すべて NOT CACHED になりました。

  Cache ......................................................................
  Config .......................................................... NOT CACHED
  Events .......................................................... NOT CACHED
  Routes .......................................................... NOT CACHED
  Views ........................................................... NOT CACHED

「直らないな?」と思ったら、まずこれを見ると、どのキャッシュが残っているか分かります。

cache:clear(アプリのキャッシュ)

cache:clear は、コードの中で Cache::put() や Cache::remember() で保存した値を消すコマンドです。

Laravel 13 の新規プロジェクトは CACHE_STORE=database なので、保存先はデータベースの cache テーブルでした。

tinker で値を1つ入れてから、消してみます。

php artisan tinker --execute="Cache::put('greeting', 'hello', 600); echo Cache::get('greeting'), PHP_EOL; echo DB::table('cache')->count(), PHP_EOL;"
hello
1
php artisan cache:clear
   INFO  Application cache cleared successfully.
php artisan tinker --execute="var_dump(Cache::get('greeting')); echo DB::table('cache')->count(), PHP_EOL;"
NULL
0

cache テーブルの行が 0 になり、値も null になりました。

保存先が file の場合は、storage/framework/cache/data の中のファイルが消えます(下で確かめています)。

保存先を指定して消す

保存先(ストア)の名前を付けると、そのストアだけを消せます。

file ストアと既定の database ストアに1つずつ入れて、file だけを消してみました。

php artisan tinker --execute="Cache::store('file')->put('k', 'v', 600); Cache::put('k2', 'v2', 600);"
php artisan cache:clear file
php artisan tinker --execute="var_dump(Cache::get('k2'));"
string(2) "v2"

storage/framework/cache/data の中は .gitignore だけになり、database 側の k2 は残っていました。

config:clear(.env の変更が反映されないとき)

.env を書き換えたのに反映されないときは、設定のキャッシュが残っていることが多いです。

php artisan config:cache を実行すると、bootstrap/cache/config.php ができます。

php artisan config:cache
ls bootstrap/cache
config.php
packages.php
services.php

この状態で、.env の APP_NAME=Laravel を APP_NAME=ChangedName に書き換えて、値を見てみました。

php artisan tinker --execute="echo config('app.name'), PHP_EOL; var_dump(env('APP_NAME'));"
Laravel
NULL

config('app.name') は古い値のままです。

さらに、env('APP_NAME') は書き換えた値どころか NULL になりました。

設定がキャッシュされていると、.env そのものが読み込まれないからです。

config:clear で消すと、新しい値が出ました。

php artisan config:clear
php artisan tinker --execute="echo config('app.name'), PHP_EOL; var_dump(env('APP_NAME'));"
   INFO  Configuration cache cleared successfully.

ChangedName
string(11) "ChangedName"

コントローラーなどで env() を直接呼んでいると、本番で config:cache した途端に、.env にだけ書いた値が null になるということです。

config と env の関係は「【初心者向け】Laravelのconfigとenvの関係について分かりやすく説明します」で説明しています。

参考:公式ドキュメントの説明

公式ドキュメントによると、設定をキャッシュすると .env はリクエストでも Artisan コマンドでも読み込まれなくなり、env 関数は外部のシステムの環境変数しか返さなくなるとのことです。

そのため、env は config フォルダの設定ファイルの中だけで呼ぶようにと書かれています。

また、config:cache は本番のデプロイの中で実行するもので、開発中に実行するものではないとされています。

出典: Configuration - Laravel 13.x

route:clear(ルートを足したのに 404 になるとき)

php artisan route:cache を実行すると、bootstrap/cache/routes-v7.php ができます。

packages.php
routes-v7.php
services.php

この状態で routes/web.php に /hello のルートを足しました。

Route::get('/hello', function () {
    return 'hello';
});

route:list で探しても、足したルートが出てきません。

php artisan route:list --path=hello
   ERROR  Your application doesn't have any routes matching the given criteria.

route:clear で消すと、出てきました。

php artisan route:clear
php artisan route:list --path=hello
   INFO  Route cache cleared successfully.

  GET|HEAD       hello ...................................... routes/web.php:9

                                                            Showing [1] routes

ルートを足したのに 404 になるときは、route:list に出てくるかどうかで、キャッシュのせいかを見分けられます。

ルートの書き方は「Laravelのルーティングの書き方(web.php・パラメータ・route関数・グループ)」にまとめています。

view:clear(Blade の変更が反映されないとき)

Blade のテンプレートは、PHP に変換されたものが storage/framework/views に保存されます。

view:cache で全部を変換すると、新規プロジェクトでも 62 個のファイルができました。

php artisan view:cache
ls storage/framework/views | wc -l
   INFO  Blade templates cached successfully.

62

view:clear で 0 になりました。

php artisan view:clear
ls storage/framework/views | wc -l
   INFO  Compiled views cleared successfully.

0

event:clear と clear-compiled

event:cache は bootstrap/cache/events.php を作り、event:clear で消えました。

   INFO  Events cached successfully.

events.php
packages.php
services.php

   INFO  Cached events cleared successfully.

packages.php
services.php

clear-compiled は、残っていた packages.php と services.php を消しました。

   INFO  Compiled services and packages files removed successfully.

この2つは、次に php artisan を実行したときに自動で作り直されていました。

php artisan --version
ls bootstrap/cache
Laravel Framework 13.42.0
packages.php
services.php

消しても、次のコマンドの実行で元どおりになるということです。

キャッシュを作り直す optimize

optimize:clear の逆で、optimize を実行すると、まとめてキャッシュを作ります。

php artisan optimize
   INFO  Caching framework bootstrap, configuration, and metadata.

  config ......................................................... 9.08ms DONE
  events ......................................................... 1.70ms DONE
  routes ......................................................... 9.58ms DONE
  views ......................................................... 67.30ms DONE

bootstrap/cache には config.php・events.php・routes-v7.php が増えました。

開発中にこれを実行すると、.env やルートの変更が反映されない状態になるので、ローカルでは optimize:clear だけを使うのが無難です(^^)

どれを実行すればいいか

確かめた結果を、症状ごとにまとめます。

症状実行するコマンド
.env や config の変更が反映されない、env() が nullphp artisan config:clear
ルートを足したのに 404、route:list に出てこないphp artisan route:clear
Blade を直したのに画面が変わらないphp artisan view:clear
Cache::remember の古い値が返ってくるphp artisan cache:clear
どれか分からないphp artisan optimize:clear

JavaScript や CSS は Vite でビルドするもので、ここで紹介したコマンドの対象には入っていません。

Laravel のバージョンごとの違いは「Laravelの最新バージョンはいくつ?サポート期限(EOL)と、composerで実際に入る版」、Artisan コマンドを自作したい場合は「Laravelのコマンドに引数・オプションを使う方法」も参考にしてみてください!

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。