Laravelのキャッシュクリアのコマンド一覧(cache:clear・config:clear・optimize:clearで何が消えるか)
目次
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:clearLaravel 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 DONE1行ずつ、下の個別のコマンドに対応しています。
| optimize:clear の行 | 個別のコマンド | 消えるもの(Laravel 13 で確かめた場所) |
|---|---|---|
| config | php artisan config:clear | bootstrap/cache/config.php |
| cache | php artisan cache:clear | アプリのキャッシュ(既定では cache テーブル) |
| compiled | php artisan clear-compiled | bootstrap/cache/services.php・packages.php |
| events | php artisan event:clear | bootstrap/cache/events.php |
| routes | php artisan route:clear | bootstrap/cache/routes-v7.php |
| views | php artisan view:clear | storage/framework/views の中身 |
cache:clear が消すのは、この表の「cache」の1行だけです。
設定やルートのキャッシュは、cache:clear では消えません。
今キャッシュされているものを見る
どれがキャッシュされているかは、about コマンドで見られます。
php artisan about --only=cachephp 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
1php 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
0cache テーブルの行が 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/cacheconfig.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
NULLconfig('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.
62view:clear で 0 になりました。
php artisan view:clear
ls storage/framework/views | wc -l INFO Compiled views cleared successfully.
0event: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.phpclear-compiled は、残っていた packages.php と services.php を消しました。
INFO Compiled services and packages files removed successfully.この2つは、次に php artisan を実行したときに自動で作り直されていました。
php artisan --version
ls bootstrap/cacheLaravel 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 DONEbootstrap/cache には config.php・events.php・routes-v7.php が増えました。
開発中にこれを実行すると、.env やルートの変更が反映されない状態になるので、ローカルでは optimize:clear だけを使うのが無難です(^^)
どれを実行すればいいか
確かめた結果を、症状ごとにまとめます。
| 症状 | 実行するコマンド |
|---|---|
| .env や config の変更が反映されない、env() が null | php 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のコマンドに引数・オプションを使う方法」も参考にしてみてください!




