Laravel『Cache Store Not Configured』の原因と対処法
- 作成日 2026.01.08
- その他
Laravelの「Cache Store Not Configured」は、指定したキャッシュストア(例:redis / memcached / database / file / array など)がアプリ側で定義されていない、または環境変数・設定キャッシュの不整合で「存在しないストア名」を参照しているときに発生する。たとえば Cache::store(‘redis’)->… の ‘redis’ が config/cache.php に無い、CACHE_DRIVER が古い名称のまま、config:cache のせいで .env 変更が反映されていない、ストアの前提パッケージ(phpredis/ext-memcached)が無い、などが典型。最初に「どのストア名を要求しているか」「config/cache.php でそのストアが定義されているか」「設定キャッシュが古くないか」を確認する。
- 1. エラーの出方と発生条件(典型例)
- 2. まず確認:どのストア名が要求されているか(default or store指定)
- 3. 原因1:CACHE_DRIVER(default)が未定義ストア名になっている
- 4. 原因2:Cache::store(‘xxx’) の xxx が config/cache.php に存在しない
- 5. 原因3:設定キャッシュ(config:cache)が古く、.env変更が反映されていない
- 6. 原因4:Redis/Memcachedなど外部ストアの前提が不足(接続設定・拡張・サービス未起動)
- 7. 原因5:タグ付きキャッシュ(Cache::tags)を file など非対応ドライバで使っている
- 8. サンプル:file/redis を切り替え可能なキャッシュ設定(config/cache.php)
- 9. サンプル:特定ストアを明示して使う(存在確認の意識づけ)
- 10. チェックリスト(上から順に確認する)
エラーの出方と発生条件(典型例)
典型メッセージ例。
InvalidArgumentException
Cache store [redis] is not defined.
Cache store [memcached] is not configured.発生条件の典型:
・CACHE_DRIVER(または cache.default)が存在しないストア名になっている
・Cache::store(‘xxx’) で xxx を指定したが config/cache.php に stores.xxx が無い
・config:cache 済みで .env を変えても反映されず、存在しないストアを参照し続ける
・環境ごとに config/cache.php が異なり、片方だけストア定義が欠けている
・Redis/Memcached用のPHP拡張や接続設定が足りず、結果的に別設定に切り替わってズレる
まず確認:どのストア名が要求されているか(default or store指定)
2パターンに分かれる。
1) デフォルトストア(Cache::get 等)
2) 明示ストア(Cache::store(‘redis’) 等)
アプリ内で store() を使っている場合は、例外メッセージの [xxx] がそのまま原因のストア名。
デフォルトの場合は、cache.default(通常は .env の CACHE_DRIVER 由来)を確認する。
原因1:CACHE_DRIVER(default)が未定義ストア名になっている
.env の設定ミスが定番。
# .env(例:typoや存在しない値)
CACHE_DRIVER=rediss対処:実在するドライバ名に直す(file/redis/database/array など)。
# .env(例)
CACHE_DRIVER=file本番でRedisを使うなら。
CACHE_DRIVER=redisLaravelのバージョン差で env 名が CACHE_DRIVER ではなく CACHE_STORE / CACHE_DRIVER など揺れるケースがあるため、config/cache.php の default が参照している env 名に合わせる。
原因2:Cache::store(‘xxx’) の xxx が config/cache.php に存在しない
明示指定している箇所がある場合、その名前が config/cache.php の stores に定義されていないと落ちる。
// 例:アプリ側で明示ストアを使っている
Cache::store('redis')->put('k', 'v', 60);config/cache.php に stores.redis が無い(または名前が違う)と発生。
対処:stores に同名定義を用意する、もしくはアプリ側の store 名を合わせる。
原因3:設定キャッシュ(config:cache)が古く、.env変更が反映されていない
デプロイ後に .env を直しても、設定キャッシュが残っていると古い default/store を参照し続ける。
発生条件:
・本番で php artisan config:cache 済み
・.env の CACHE_DRIVER を変えたが、configキャッシュ更新していない
対処:デプロイ手順で再生成する。
php artisan config:clear
php artisan cache:clear
php artisan config:cacheルートキャッシュやイベントキャッシュも使っているなら、同様に更新対象になる。
原因4:Redis/Memcachedなど外部ストアの前提が不足(接続設定・拡張・サービス未起動)
「Store Not Configured」は“定義が無い”が主因だが、周辺設定が壊れて「想定していないストア名に切り替わる」「チームが途中で設定を変更してstores定義が欠けた」などの事故が起きやすい。
チェックポイント:
・Redisを使うなら config/database.php の redis 設定と .env(REDIS_HOST 等)
・Memcachedを使うなら ext-memcached が入っているか
・Docker/本番で redis コンテナ/サービスが起動しているか
最終的には “stores に定義がある” ことが必須なので、環境差分で config/cache.php がズレていないかを確認する。
原因5:タグ付きキャッシュ(Cache::tags)を file など非対応ドライバで使っている
タグ機能はドライバによって非対応がある。これ自体は別の例外になりやすいが、チームが「tags前提でredisのはずがfileになっていた」などのときに、設定の見直しが必要になる。
発生条件:
・ローカルはredis、ステージングはfile、のような環境差
対処:
・tagsを使う環境はredis/memcachedなど対応ストアに統一
・もしくは tags を使わない設計に変更する
サンプル:file/redis を切り替え可能なキャッシュ設定(config/cache.php)
ストア名を明確に揃える例。
// config/cache.php(抜粋イメージ)
return [
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
],
'array' => [
'driver' => 'array',
'serialize' => false,
],
],
'prefix' => env('CACHE_PREFIX', 'laravel_cache'),
];この形にしておくと、.env の CACHE_DRIVER に file/redis/database/array のいずれを入れても「storeが無い」状態になりにくい。
サンプル:特定ストアを明示して使う(存在確認の意識づけ)
// 明示ストア(stores に定義があることが前提)
Cache::store('redis')->put('user:1', ['id' => 1], now()->addMinutes(10));
// デフォルトストア
Cache::put('user:1', ['id' => 1], now()->addMinutes(10))明示ストアを多用するプロジェクトは、stores の名称を固定(redis/file など)して、命名の揺れを無くすと事故が減る。
チェックリスト(上から順に確認する)
1) 例外メッセージの store 名(例:[redis])を特定したか
2) config/cache.php の stores に同名の定義が存在するか
3) デフォルト利用なら cache.default(.env の CACHE_DRIVER)が実在ストア名になっているか(typo含む)
4) 本番で config:cache を使っているなら、config:clear→config:cache を更新したか
5) 環境差で config/cache.php がズレていないか(ステージングだけ欠けていないか)
6) Redis/Memcachedを使うなら、接続設定・拡張・サービス起動が揃っているか(設定変更でストア名が変わっていないか)
-
前の記事
Laravel『Undefined Offset』の原因と対処法 2026.01.07
-
次の記事
Laravel『View [name] Not Found』の原因と対処法 2026.01.09
コメントを書く