PHPのキャッシュクリアの方法について

採用はこちら

目次

PHPのキャッシュクリアとは

PHPのキャッシュクリアとは、PHPやWebアプリケーションが一時的に保存しているデータを削除し、最新の内容を反映させる作業のことです。

PHPファイルを修正したのに反映されない、Laravelの設定変更が効かない、WordPressの表示が古いままになる、といった場合は、どこかにキャッシュが残っている可能性があります。

ただし、一口に「PHPのキャッシュ」といっても、実際にはいくつかの種類があります。

PHPのキャッシュには複数の種類がある

PHP関連でよく問題になるキャッシュには、主に次のようなものがあります。

キャッシュの種類内容よくある症状
OPcachePHPコードのコンパイル結果を保存するキャッシュPHPファイルを修正しても反映されない
フレームワークキャッシュLaravelやSymfonyなどの設定・ルート・ビューなどのキャッシュ.env やルーティング変更が反映されない
ComposerキャッシュComposerがパッケージ取得時に使うキャッシュライブラリの更新や取得で不具合が出る
APCuPHPアプリケーション内で使うメモリキャッシュアプリ側の一時データが古いままになる
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などをキャッシュストアとして使っている場合、このコマンドがそれらのキャッシュ削除に関係することがあります。

ただし、共有キャッシュ環境では、他のアプリケーションに影響する可能性があるため注意が必要です。

設定キャッシュをクリアする

.envconfigの変更が反映されない場合は、設定キャッシュを削除します。

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系では、optimizeoptimize: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最適化など
AutoptimizeCSS/JS/HTML最適化

管理画面に「キャッシュを削除」「Purge Cache」「Clear Cache」などのボタンがある場合は、それを実行します。

サーバー側キャッシュも確認する

レンタルサーバーやVPSでは、サーバー側で独自のキャッシュ機能が有効になっていることがあります。

管理画面に次のような項目がある場合は確認しましょう。

表示名の例内容
サーバーキャッシュサーバー側のページキャッシュ
高速化設定キャッシュや圧縮の設定
PHP高速化OPcacheなどが関係する場合がある
LiteSpeed CacheLiteSpeedサーバー側のキャッシュ
コンテンツキャッシュ静的ファイルやページのキャッシュ

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で表示が古い場合は、次の順番で確認すると切り分けやすいです。

順番確認するキャッシュ
1WordPressキャッシュプラグイン
2サーバー側キャッシュ
3CDNキャッシュ
4ブラウザキャッシュ
5OPcache

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 FLUSHALLRedis内の全データを削除する
redis-cli FLUSHDB選択中DBの全データを削除する
php artisan cache:clearキャッシュストアの内容を削除する
php artisan optimize:clearLaravelの複数キャッシュを削除する
Memcached再起動Memcached内のデータが消える可能性がある
CDNのPurge EverythingCDN全体のキャッシュを削除する

特に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のキャッシュクリアの方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次