PHPのキャッシュクリアとは
PHPのキャッシュクリアとは、PHPやWebアプリケーションが一時的に保存しているデータを削除し、最新の内容を反映させる作業のことです。
PHPファイルを修正したのに反映されない、Laravelの設定変更が効かない、WordPressの表示が古いままになる、といった場合は、どこかにキャッシュが残っている可能性があります。
ただし、一口に「PHPのキャッシュ」といっても、実際にはいくつかの種類があります。
PHPのキャッシュには複数の種類がある
PHP関連でよく問題になるキャッシュには、主に次のようなものがあります。
| キャッシュの種類 | 内容 | よくある症状 |
|---|---|---|
| OPcache | PHPコードのコンパイル結果を保存するキャッシュ | PHPファイルを修正しても反映されない |
| フレームワークキャッシュ | LaravelやSymfonyなどの設定・ルート・ビューなどのキャッシュ | .env やルーティング変更が反映されない |
| Composerキャッシュ | Composerがパッケージ取得時に使うキャッシュ | ライブラリの更新や取得で不具合が出る |
| APCu | PHPアプリケーション内で使うメモリキャッシュ | アプリ側の一時データが古いままになる |
| Redis / Memcached | 外部キャッシュサーバー | セッション、キャッシュ、キューなどが関係する |
| ブラウザキャッシュ | CSS、JavaScript、画像などのキャッシュ | デザイン変更が反映されない |
| CDNキャッシュ | CloudflareやCloudFrontなどの配信キャッシュ | サーバーを更新しても古いページが表示される |
| WordPressキャッシュ | キャッシュプラグインやサーバー側キャッシュ | 投稿やデザイン変更が反映されない |
このように、PHPのキャッシュクリアでは「どのキャッシュを削除するべきか」を切り分けることが重要です。
PHP本体のキャッシュはOPcacheが重要
PHP本体で特に重要なのが、OPcacheです。
OPcacheは、PHPファイルを毎回読み込んで解析する代わりに、コンパイル済みのバイトコードをメモリに保存する仕組みです。
これにより、PHPの処理速度を向上させることができます。
OPcacheとは
PHPは通常、リクエストを受けるたびにPHPファイルを読み込み、構文を解析して実行します。
しかし、毎回同じPHPファイルを解析していると処理に時間がかかります。
そこでOPcacheは、一度コンパイルしたPHPコードをメモリ上に保存し、次回以降はそのキャッシュを利用します。
そのため、OPcacheが有効な環境では、PHPファイルを変更しても古いキャッシュが使われ、すぐに変更が反映されないことがあります。
OPcacheが原因で起こりやすい症状
OPcacheが原因の場合、次のような症状が起こります。
| 症状 | 考えられる原因 |
|---|---|
| PHPファイルを修正したのに表示が変わらない | OPcacheに古いPHPコードが残っている |
| 本番環境だけ変更が反映されない | 本番環境でOPcacheの更新確認が無効になっている |
| デプロイ後も古い処理が動く | OPcacheのリセットが行われていない |
| ローカルでは直るのにサーバーでは直らない | サーバー側のOPcache設定が影響している |
特に本番環境では、パフォーマンスを重視してOPcacheの更新確認を無効にしている場合があります。
その場合、PHPファイルをアップロードしただけでは変更が反映されず、OPcacheのクリアが必要になります。
OPcacheをクリアする方法
OPcacheをクリアする方法はいくつかあります。
サーバーの構成によって適切な方法が異なるため、環境に合わせて選ぶ必要があります。
PHP-FPMを再起動する
Nginx + PHP-FPM、またはApache + PHP-FPMの環境では、PHP-FPMを再起動することでOPcacheがクリアされることが多いです。
sudo systemctl restart php-fpm
PHPのバージョン名がサービス名に含まれている場合は、次のようになります。
sudo systemctl restart php8.2-fpm
sudo systemctl restart php8.3-fpm
sudo systemctl restart php8.4-fpm
サービス名が分からない場合は、次のコマンドで確認できます。
systemctl list-units --type=service | grep php
PHP-FPMを再起動すると、PHP-FPMのプロセスが再起動されます。
その結果、通常はメモリ上に保存されていたOPcacheも破棄されます。
ただし、サーバー構成によってサービス名は異なるため、利用している環境に合わせて確認してください。
Apacheを再起動する
Apacheのmod_phpでPHPを動かしている場合は、Apacheを再起動することでOPcacheがクリアされることがあります。
UbuntuやDebian系では次のコマンドを使います。
sudo systemctl restart apache2
CentOS、AlmaLinux、Rocky Linuxなどでは、サービス名がhttpdの場合があります。
sudo systemctl restart httpd
ただし、Apacheを使っていても、PHPの実行がPHP-FPM経由になっている場合があります。
その場合は、ApacheではなくPHP-FPMを再起動する必要があります。
Nginxを再起動してもOPcacheは消えないことが多い
NginxはPHPを直接実行しません。
多くの場合、PHPの処理はPHP-FPMが担当しています。
そのため、Nginxを再起動してもPHP-FPM側のOPcacheは残る可能性があります。
sudo systemctl restart nginx
このコマンドでNginx自体は再起動できますが、PHPコードのOPcacheをクリアしたい場合は、基本的にPHP-FPMを再起動します。
sudo systemctl restart php8.3-fpm
ただし、NginxでFastCGIキャッシュを使っている場合は、Nginx側にもページキャッシュが存在します。
これはPHPのOPcacheとは別物です。
opcache_reset()を使ってクリアする方法
PHPには、OPcacheをリセットするためのopcache_reset()という関数があります。
Web経由でopcache_reset()を実行する
一時的に次のようなPHPファイルを作成します。
<?php
opcache_reset();
echo 'OPcache cleared';
例えば、clear-opcache.phpという名前でサーバーに設置し、ブラウザからアクセスします。
https://example.com/clear-opcache.php
アクセス後に「OPcache cleared」と表示されれば、OPcacheのリセット処理が実行されています。
ただし、このファイルは実行後に必ず削除してください。
rm clear-opcache.php
クリア用ファイルの置きっぱなしは危険
opcache_reset()を実行できるファイルを誰でもアクセスできる場所に置いたままにするのは危険です。
第三者がアクセスすると、任意のタイミングでOPcacheをリセットされてしまう可能性があります。
これはパフォーマンス低下や予期しない挙動につながるおそれがあります。
本番環境で使う場合は、次のような対策が必要です。
| 対策 | 内容 |
|---|---|
| 実行後すぐ削除する | 最も簡単で重要な対策 |
| Basic認証をかける | 管理者だけがアクセスできるようにする |
| IP制限をかける | 特定のIPアドレスからのみ実行できるようにする |
| 管理画面内の機能にする | 権限管理された環境から実行する |
基本的には、一時的に設置して実行後すぐ削除するのが安全です。
CLIからopcache_reset()を実行する場合の注意点
SSHでサーバーに入れる場合、CLIから次のように実行できます。
php -r 'opcache_reset();'
ただし、この方法には注意が必要です。
CLI版PHPと、Webサーバー側で動いているPHP-FPMやApacheのPHPでは、OPcacheの領域が別になっていることがあります。
その場合、CLIでopcache_reset()を実行しても、Webサイト側のOPcacheはクリアされません。
確実にWeb側のOPcacheをクリアしたい場合は、PHP-FPMの再起動や、認証をかけたWeb経由のopcache_reset()実行を検討します。
特定のPHPファイルだけOPcacheから削除する方法
OPcache全体ではなく、特定のPHPファイルだけキャッシュを無効化したい場合は、opcache_invalidate()を使います。
<?php
opcache_invalidate('/path/to/target.php', true);
第1引数には対象ファイルのパスを指定します。第2引数にtrueを指定すると、強制的に無効化できます。
ただし、通常のWebサイト運用では、特定ファイルだけを個別に削除するよりも、デプロイ時にPHP-FPMを再起動する、またはOPcache全体をリセットする方が管理しやすいです。
OPcacheの設定を確認する方法
OPcacheが有効になっているかどうかは、phpinfo()やコマンドラインで確認できます。
phpinfo()で確認する
一時的に次のPHPファイルを作成します。
<?php
phpinfo();
ブラウザでアクセスし、OPcacheの項目を確認します。
確認後は、必ずファイルを削除してください。
rm phpinfo.php
phpinfo()にはPHPの設定情報が多く表示されます。
公開したままにするとセキュリティ上のリスクがあるため、確認後はすぐ削除しましょう。
コマンドラインで確認する
SSHでサーバーに入れる場合は、次のコマンドでも確認できます。
php -i | grep opcache
ただし、CLI版PHPとWebサーバー側のPHPでは設定が異なる場合があります。
Webで動いているPHP-FPMの設定を確認したい場合は、phpinfo()で確認する方が確実なケースもあります。
確認したいOPcache設定
特に確認したい設定は、次の3つです。
opcache.enable=1
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.enableはOPcacheを有効にする設定です。
opcache.validate_timestampsは、PHPファイルの更新日時を確認するかどうかを決める設定です。
opcache.revalidate_freqは、何秒ごとにファイルの更新確認を行うかを決める設定です。
開発環境と本番環境のOPcache設定
OPcacheの設定は、開発環境と本番環境で考え方が異なります。
開発環境でおすすめの設定
開発環境では、PHPファイルを変更したらすぐに反映された方が便利です。
そのため、次のような設定が向いています。
opcache.enable=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_freq=0にすると、リクエストごとにPHPファイルの更新確認が行われます。
開発中は便利ですが、本番環境ではパフォーマンスに影響する可能性があります。
本番環境で使われる設定
本番環境では、パフォーマンスを優先して次のような設定にすることがあります。
opcache.enable=1
opcache.validate_timestamps=0
この設定では、PHPファイルの更新日時を自動確認しません。
そのため、PHPファイルを更新しても、OPcacheをリセットしない限り古いコードが実行される可能性があります。
この設定を使う場合は、デプロイ時に必ず次のような処理を組み込む必要があります。
sudo systemctl restart php8.3-fpm
または、保護された方法でopcache_reset()を実行します。
Laravelのキャッシュクリア方法
Laravelでは、PHP本体のOPcacheとは別に、フレームワーク側のキャッシュがあります。
Laravelで変更が反映されない場合は、OPcacheだけでなく、Laravelのキャッシュも確認しましょう。
Laravelのキャッシュの種類
Laravelには、主に次のようなキャッシュがあります。
| 種類 | 内容 | クリアコマンド |
|---|---|---|
| アプリケーションキャッシュ | Cacheファサードなどで保存したキャッシュ | php artisan cache:clear |
| 設定キャッシュ | configや.envに関係するキャッシュ | php artisan config:clear |
| ルートキャッシュ | ルーティング情報のキャッシュ | php artisan route:clear |
| ビューキャッシュ | Bladeテンプレートのコンパイルキャッシュ | php artisan view:clear |
| イベントキャッシュ | イベント・リスナー情報のキャッシュ | php artisan event:clear |
| 最適化キャッシュ | 複数の最適化キャッシュ | php artisan optimize:clear |
Laravelのキャッシュをまとめてクリアする
Laravelでキャッシュをまとめてクリアしたい場合は、次のコマンドを使います。
php artisan optimize:clear
optimize:clearは、Laravelの最適化キャッシュをまとめて削除する便利なコマンドです。
ただし、Laravelのバージョンによっては、設定・ルート・ビューなどのキャッシュだけでなく、デフォルトキャッシュドライバ内のキャッシュキーも削除対象になる場合があります。
本番環境や共有キャッシュを使っている環境では、影響範囲を理解したうえで実行しましょう。
アプリケーションキャッシュをクリアする
Laravelのアプリケーションキャッシュを削除するには、次のコマンドを使います。
php artisan cache:clear
これは、LaravelのCache機能で保存されたキャッシュを削除するコマンドです。
RedisやMemcachedなどをキャッシュストアとして使っている場合、このコマンドがそれらのキャッシュ削除に関係することがあります。
ただし、共有キャッシュ環境では、他のアプリケーションに影響する可能性があるため注意が必要です。
設定キャッシュをクリアする
.envやconfigの変更が反映されない場合は、設定キャッシュを削除します。
php artisan config:clear
本番環境で設定キャッシュを再作成する場合は、次のコマンドを使います。
php artisan config:cache
Laravelでは、設定がキャッシュされていると.envファイルが通常のリクエストで読み込まれなくなります。
そのため、.envを変更したのに反映されない場合は、まずconfig:clearを確認しましょう。
ルートキャッシュをクリアする
ルーティングを変更したのに反映されない場合は、ルートキャッシュを削除します。
php artisan route:clear
本番環境でルートキャッシュを再作成する場合は、次のコマンドを使います。
php artisan route:cache
ルートを追加・変更したのに404になる場合は、ルートキャッシュが原因になっていることがあります。
ビューキャッシュをクリアする
Bladeテンプレートの変更が反映されない場合は、ビューキャッシュを削除します。
php artisan view:clear
本番環境でビューキャッシュを再作成する場合は、次のコマンドを使います。
php artisan view:cache
Bladeファイルを修正したのに画面が変わらない場合は、ビューキャッシュを確認しましょう。
イベントキャッシュをクリアする
イベントやリスナーを変更した場合は、イベントキャッシュを削除します。
php artisan event:clear
本番環境でイベントキャッシュを作成する場合は、次のようにします。
php artisan event:cache
Laravelでよく使うキャッシュクリアコマンド
Laravelでよく使うキャッシュクリアコマンドをまとめると、次の通りです。
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan event:clear
php artisan optimize:clear
変更が反映されないときは、まずoptimize:clearを試すと分かりやすいです。
ただし、本番環境では影響範囲を確認したうえで実行しましょう。
Laravelの本番デプロイ時のキャッシュ処理
Laravelの本番環境では、キャッシュをクリアするだけでなく、必要に応じて再生成することも重要です。
本番環境での基本的な流れ
Laravelの本番デプロイでは、次のような流れが使われることがあります。
cd /var/www/example.com
composer install --no-dev --optimize-autoloader
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo systemctl restart php8.3-fpm
この流れでは、まず古いLaravelキャッシュを削除し、その後、本番向けに設定・ルート・ビューのキャッシュを作成しています。
最後にPHP-FPMを再起動することで、OPcacheの影響も取り除きやすくなります。
メンテナンスモードを使う場合
デプロイ中のアクセスを一時的に止めたい場合は、メンテナンスモードを使うことがあります。
php artisan down
デプロイ作業後に解除します。
php artisan up
ただし、メンテナンスモード中はユーザーがサイトを利用できなくなります。
アクセスの多いサイトでは、無停止デプロイの仕組みを使う方が望ましいです。
Laravelのバージョン差に注意する
Laravelのキャッシュ関連コマンドは、バージョンによって挙動や推奨手順が変わる場合があります。
Laravel 10、11、12、13系では、optimizeやoptimize:clearが使われることがあります。
一方、古いLaravelではコマンドの扱いが異なる場合があります。
そのため、実際に運用する場合は、利用中のLaravelバージョンに合わせて公式ドキュメントやプロジェクトの運用ルールを確認しましょう。
Symfonyのキャッシュクリア方法
Symfonyを使っている場合は、Symfony独自のキャッシュを削除する必要があります。
Symfonyの基本的なキャッシュクリア
Symfonyのキャッシュをクリアするには、次のコマンドを使います。
php bin/console cache:clear
本番環境では、環境を明示して実行することが多いです。
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
Symfonyのキャッシュは、PHPのOPcacheとは別物です。
Symfonyのキャッシュを削除してもOPcacheが残っている場合、PHPコードの変更が反映されない可能性があります。
Symfonyのキャッシュプールを削除する
Symfonyでは、特定のキャッシュプールを削除することもできます。
まず、キャッシュプールの一覧を確認します。
php bin/console cache:pool:list
特定のキャッシュプールを削除する場合は、次のようにします。
php bin/console cache:pool:clear cache.app
アプリケーションの構成によってキャッシュプール名は異なるため、実行前に対象を確認しましょう。
Composerのキャッシュクリア方法
Composerにもキャッシュがあります。
Composerのキャッシュは、PHPの実行キャッシュではなく、パッケージをダウンロードするときに使われるキャッシュです。
Composerのキャッシュを削除する
Composerのキャッシュを削除するには、次のコマンドを使います。
composer clear-cache
短縮形も使えます。
composer clearcache
composer cc
キャッシュ全体を削除するのではなく、ガベージコレクションのみ実行したい場合は、次のようにします。
composer clear-cache --gc
composer dump-autoloadはキャッシュ削除ではない
Composer関連でよく使われるコマンドに、dump-autoloadがあります。
composer dump-autoload
本番環境では、最適化オプションを付けることもあります。
composer dump-autoload -o
ただし、composer dump-autoloadはComposerのキャッシュを削除するコマンドではありません。
これはautoloadファイルを再生成するコマンドです。
クラスを追加したのに読み込まれない場合や、composer.jsonのautoload設定を変更した場合に使います。
APCuのキャッシュクリア方法
APCuを使っている場合は、APCuのキャッシュも確認する必要があります。
apcu_clear_cache()を使う
APCuのキャッシュを削除するには、apcu_clear_cache()を使います。
<?php
apcu_clear_cache();
echo 'APCu cache cleared';
このコードを実行すると、APCuに保存されているキャッシュが削除されます。
CLI実行時の注意点
CLIから次のように実行することもできます。
php -r 'apcu_clear_cache();'
ただし、OPcacheと同じように、CLI版PHPとWebアプリケーション側のPHPではキャッシュ領域が異なる場合があります。
その場合、CLIからapcu_clear_cache()を実行しても、Web側のAPCuキャッシュは削除されません。
Web側で使われているAPCuを確実に削除したい場合は、アプリケーション経由で安全に実行するか、PHP-FPMの再起動を検討します。
RedisやMemcachedのキャッシュクリア方法
PHPアプリケーションでは、RedisやMemcachedをキャッシュ保存先として使うことがあります。
Laravel、Symfony、独自PHPアプリケーションなどでRedisやMemcachedを使っている場合、これらのキャッシュが原因で古いデータが表示されることがあります。
Redisのキャッシュを削除する
Redisに接続するには、次のコマンドを使います。
redis-cli
現在選択されているDBのデータを削除する場合は、次のコマンドです。
FLUSHDB
Redis全体のデータを削除する場合は、次のコマンドです。
FLUSHALL
ただし、FLUSHALLは非常に危険です。
Redis内の全データを削除するため、キャッシュだけでなく、セッション、キュー、ロック、他アプリケーションのデータまで削除される可能性があります。
通常は、いきなりFLUSHALLを実行するのではなく、アプリケーション側のキャッシュクリアコマンドを優先しましょう。
Laravelであれば、まず次のコマンドを使います。
php artisan cache:clear
Memcachedのキャッシュを削除する
Memcachedを使っている場合、サービスを再起動するとキャッシュが削除されることがあります。
sudo systemctl restart memcached
ただし、Memcachedを複数のアプリケーションで共有している場合、他のアプリケーションにも影響する可能性があります。
本番環境では、対象のアプリケーションだけに影響する方法でキャッシュを削除できるか確認しましょう。
WordPressのキャッシュクリア方法
WordPressでは、PHPのOPcacheだけでなく、キャッシュプラグイン、サーバー側キャッシュ、CDNキャッシュなどが関係します。
そのため、WordPressで変更が反映されない場合は、複数のキャッシュを順番に確認する必要があります。
キャッシュプラグインを削除する
WordPressでよく使われるキャッシュプラグインには、次のようなものがあります。
| プラグイン | 主なキャッシュ |
|---|---|
| WP Rocket | ページキャッシュ、CSS/JS最適化など |
| W3 Total Cache | ページキャッシュ、オブジェクトキャッシュなど |
| WP Super Cache | ページキャッシュ |
| LiteSpeed Cache | ページキャッシュ、画像最適化、CSS/JS最適化など |
| Autoptimize | CSS/JS/HTML最適化 |
管理画面に「キャッシュを削除」「Purge Cache」「Clear Cache」などのボタンがある場合は、それを実行します。
サーバー側キャッシュも確認する
レンタルサーバーやVPSでは、サーバー側で独自のキャッシュ機能が有効になっていることがあります。
管理画面に次のような項目がある場合は確認しましょう。
| 表示名の例 | 内容 |
|---|---|
| サーバーキャッシュ | サーバー側のページキャッシュ |
| 高速化設定 | キャッシュや圧縮の設定 |
| PHP高速化 | OPcacheなどが関係する場合がある |
| LiteSpeed Cache | LiteSpeedサーバー側のキャッシュ |
| コンテンツキャッシュ | 静的ファイルやページのキャッシュ |
WordPress管理画面でキャッシュを消しても反映されない場合、サーバー側キャッシュが残っている可能性があります。
WordPressでは複数のキャッシュが重なりやすい
WordPressでは、次のように複数のキャッシュが重なっていることがあります。
WordPressキャッシュプラグイン
サーバー側キャッシュ
OPcache
CDNキャッシュ
ブラウザキャッシュ
そのため、1つのキャッシュを削除しても反映されない場合があります。
変更が反映されないときは、どの層のキャッシュが残っているのかを順番に切り分けることが重要です。
ブラウザキャッシュのクリア方法
PHPやWordPressのキャッシュを削除しても、ブラウザ側に古いCSS、JavaScript、画像が残っている場合があります。
強制リロードする
ブラウザキャッシュを無視して再読み込みするには、強制リロードを使います。
Windowsの場合は、次のキーを押します。
Ctrl + F5
Macの場合は、次のキーを押します。
Command + Shift + R
CSSやJavaScriptの変更が反映されない場合は、まず強制リロードを試しましょう。
CSSやJavaScriptにバージョンを付ける
ブラウザキャッシュ対策として、CSSやJavaScriptのURLにバージョンを付ける方法があります。
<link rel="stylesheet" href="/css/style.css?v=20260708">
<script src="/js/main.js?v=20260708"></script>
ブラウザはURLが変わると別ファイルとして認識するため、新しいファイルを読み込みやすくなります。
WordPress、Laravel Mix、Viteなどを使っている場合は、ビルド時にハッシュ付きファイル名を生成する方法もあります。
app.8f3a1c.js
style.9b2d4e.css
この方法は、ブラウザキャッシュ対策として非常に有効です。
CDNキャッシュのクリア方法
Cloudflare、AWS CloudFront、FastlyなどのCDNを使っている場合、サーバー側を更新してもCDNに古いデータが残っていることがあります。
CDNのキャッシュ削除を行う
CDNの管理画面では、次のような名称でキャッシュ削除機能が用意されていることがあります。
| 表示名 | 内容 |
|---|---|
| Purge Cache | キャッシュ削除 |
| Purge Everything | 全キャッシュ削除 |
| Invalidation | キャッシュ無効化 |
| Cache Clear | キャッシュクリア |
Cloudflareでは「Purge Cache」、CloudFrontでは「Invalidation」という表現がよく使われます。
全キャッシュ削除は慎重に行う
CDNの全キャッシュを削除すると、一時的にオリジンサーバーへのアクセスが増える可能性があります。
アクセス数の多いサイトでは、全体削除ではなく、対象URLだけを削除する方が安全です。
例えば、特定ページだけ変更した場合は、そのページのURLだけを削除対象にします。
PHPキャッシュとページキャッシュの違い
PHPのキャッシュクリアを理解するうえで大切なのが、PHPキャッシュとページキャッシュの違いです。
PHPキャッシュはPHPコードのためのキャッシュ
OPcacheは、PHPコードのコンパイル結果を保存するキャッシュです。
つまり、PHPファイルそのものの実行を高速化するための仕組みです。
PHPファイルを修正したのに反映されない場合は、OPcacheが原因になっていることがあります。
ページキャッシュは生成済みHTMLのキャッシュ
一方、ページキャッシュは、PHPが生成したHTMLを保存するキャッシュです。
WordPressのキャッシュプラグイン、Nginx FastCGIキャッシュ、CDNキャッシュなどがこれに該当します。
ページキャッシュが残っていると、PHPコード自体は更新されていても、ユーザーには古いHTMLが表示されることがあります。
両方のキャッシュを分けて考える
PHPファイルを変更した場合は、OPcacheを確認します。
ページの表示内容が古い場合は、ページキャッシュやCDNキャッシュを確認します。
CSSやJavaScriptが古い場合は、ブラウザキャッシュを確認します。
このように、どのキャッシュが原因なのかを分けて考えることが大切です。
症状別のキャッシュクリア方法
ここでは、よくある症状ごとに確認すべきキャッシュを整理します。
PHPファイルを修正したのに反映されない
PHPファイルを修正したのに反映されない場合は、まずOPcacheを疑います。
PHP-FPM環境であれば、次のコマンドを実行します。
sudo systemctl restart php8.3-fpm
または、保護された方法でopcache_reset()を実行します。
<?php
opcache_reset();
本番環境でopcache.validate_timestamps=0になっている場合、ファイルを更新しただけでは反映されない可能性があります。
Laravelの.env変更が反映されない
Laravelで.envを変更したのに反映されない場合は、設定キャッシュを確認します。
php artisan config:clear
必要に応じて、アプリケーションキャッシュも削除します。
php artisan cache:clear
本番環境で設定キャッシュを再作成する場合は、次のコマンドを使います。
php artisan config:cache
Laravelのルート変更が反映されない
Laravelでルートを追加・変更したのに404になる場合は、ルートキャッシュが原因の可能性があります。
php artisan route:clear
本番環境で再度ルートキャッシュを作成する場合は、次のようにします。
php artisan route:cache
LaravelのBlade変更が反映されない
Bladeテンプレートを変更したのに表示が変わらない場合は、ビューキャッシュを削除します。
php artisan view:clear
本番環境でビューキャッシュを再作成する場合は、次のコマンドを使います。
php artisan view:cache
CSSやJavaScriptが反映されない
CSSやJavaScriptが変わらない場合は、PHPではなくブラウザキャッシュやCDNキャッシュが原因の可能性があります。
まず、ブラウザで強制リロードします。
Ctrl + F5
Command + Shift + R
それでも反映されない場合は、CDNキャッシュやビルドファイルの更新を確認します。
WordPressの表示が古い
WordPressで表示が古い場合は、次の順番で確認すると切り分けやすいです。
| 順番 | 確認するキャッシュ |
|---|---|
| 1 | WordPressキャッシュプラグイン |
| 2 | サーバー側キャッシュ |
| 3 | CDNキャッシュ |
| 4 | ブラウザキャッシュ |
| 5 | OPcache |
WordPressでは複数のキャッシュが重なっていることが多いため、1つずつ確認することが重要です。
レンタルサーバーでキャッシュクリアする方法
レンタルサーバーでは、SSHが使えないこともあります。
その場合は、管理画面や一時PHPファイルを使ってキャッシュクリアを行います。
管理画面からPHP設定を確認する
レンタルサーバーの管理画面に、次のような項目がある場合があります。
| 項目名の例 | 内容 |
|---|---|
| PHP設定 | PHPバージョンやphp.ini設定 |
| PHP高速化 | OPcacheなどの設定 |
| PHP-FPM再起動 | PHPプロセスの再起動 |
| サーバーキャッシュ削除 | サーバー側キャッシュの削除 |
| 高速化設定 | キャッシュや圧縮の設定 |
サーバーによっては、PHPバージョンの切り替えやPHP設定の保存によってPHPプロセスが再起動され、結果的にOPcacheがクリアされる場合があります。
ただし、仕様はサーバー会社によって異なるため、管理画面のマニュアルを確認しましょう。
SSHが使えない場合のopcache_reset()
SSHが使えない場合は、一時的にPHPファイルを設置してopcache_reset()を実行する方法があります。
<?php
opcache_reset();
echo 'OPcache cleared';
ただし、この方法は実行後すぐにファイルを削除することが前提です。
誰でもアクセスできる場所に置きっぱなしにしないようにしましょう。
キャッシュクリア時の注意点
キャッシュクリアは便利ですが、実行するコマンドによっては影響範囲が大きくなります。
特に本番環境では、慎重に行う必要があります。
全キャッシュ削除は慎重に行う
次のような操作は、影響範囲が大きい可能性があります。
| 操作 | 注意点 |
|---|---|
redis-cli FLUSHALL | Redis内の全データを削除する |
redis-cli FLUSHDB | 選択中DBの全データを削除する |
php artisan cache:clear | キャッシュストアの内容を削除する |
php artisan optimize:clear | Laravelの複数キャッシュを削除する |
| Memcached再起動 | Memcached内のデータが消える可能性がある |
| CDNのPurge Everything | CDN全体のキャッシュを削除する |
特にRedisやMemcachedを複数アプリケーションで共有している場合は、他のシステムに影響する可能性があります。
実行前に、対象のキャッシュが本当に削除してよいものか確認しましょう。
キャッシュクリア後は一時的に負荷が上がることがある
キャッシュを削除すると、次回アクセス時にキャッシュが再生成されます。
アクセス数の多いサイトでは、キャッシュ削除直後にサーバー負荷が上がることがあります。
そのため、本番環境ではアクセスの少ない時間帯に実行する、対象URLだけ削除する、キャッシュを事前にウォームアップするなどの対策が有効です。
開発環境と本番環境で考え方を分ける
開発環境では、変更がすぐに反映されることが重要です。
一方、本番環境では、パフォーマンスと安定性が重要です。
開発環境では次のような設定が向いています。
opcache.validate_timestamps=1
opcache.revalidate_freq=0
本番環境では、パフォーマンスを重視して次のような設定にすることがあります。
opcache.validate_timestamps=0
ただし、この場合はデプロイ時にOPcacheクリアを必ず行う必要があります。
PHPのキャッシュクリアで確認する順番
PHPやWebサイトの変更が反映されない場合は、次の順番で確認すると分かりやすいです。
PHPコードを変更した場合
PHPファイルを変更した場合は、まずOPcacheを確認します。
sudo systemctl restart php8.3-fpm
LaravelやSymfonyを使っている場合は、フレームワーク側のキャッシュも確認します。
php artisan optimize:clear
または、
php bin/console cache:clear
設定やルーティングを変更した場合
Laravelで.envやルートを変更した場合は、次のコマンドを確認します。
php artisan config:clear
php artisan route:clear
本番環境では、必要に応じて再キャッシュします。
php artisan config:cache
php artisan route:cache
画面表示やデザインが変わらない場合
画面表示やデザインが変わらない場合は、PHP以外のキャッシュも疑います。
ブラウザキャッシュ
WordPressキャッシュプラグイン
サーバー側キャッシュ
CDNキャッシュ
Nginx FastCGIキャッシュ
PHPコードではなく、生成済みHTMLやCSS、JavaScriptが古いまま配信されている可能性があります。
まとめ
PHPのキャッシュクリアでは、まず「どのキャッシュを消すべきか」を判断することが大切です。
PHP本体のキャッシュで特に重要なのは、OPcacheです。
PHPファイルを修正したのに反映されない場合は、PHP-FPMの再起動やopcache_reset()を検討します。
Laravelを使っている場合は、次のコマンドがよく使われます。
php artisan optimize:clear
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Symfonyでは、次のコマンドを使います。
php bin/console cache:clear
Composerのキャッシュを削除したい場合は、次のコマンドです。
composer clear-cache
ただし、実際のWebサイトではPHPのOPcacheだけでなく、ブラウザキャッシュ、CDNキャッシュ、WordPressプラグイン、Redis、Memcached、Nginx FastCGIキャッシュなどが関係することがあります。
また、RedisのFLUSHALLやCDNの全キャッシュ削除などは影響範囲が大きいため、本番環境では慎重に実行する必要があります。
PHPのキャッシュクリアは、やみくもに全削除するのではなく、症状に合わせて原因となるキャッシュを切り分けながら行うことが重要です。
以上、PHPのキャッシュクリアの方法についてでした。
最後までお読みいただき、ありがとうございました。










