「WordPressは重い」とよく言われるが,それはチューニングしていないだけのことが多い.VPSでサーバー側の高速化を施せば,WordPressは驚くほど速くなる.
鍵は3層のキャッシュだ──OPcache(PHPコードのキャッシュ)・Redis(DBクエリ結果のキャッシュ)・FastCGIキャッシュ(生成HTMLのキャッシュ).これらを効かせれば,毎回PHPとDBを動かす無駄が消える.
この記事は,VPSでWordPressを運用する個人開発者・サイト運営者に向けている.重さの原因から,OPcache・Redis・FastCGIキャッシュの設定,画像とDBの最適化までを実践的に解説する.
読み終えたとき,あなたのWordPressはプラグインに頼らずサーバー側で爆速になり,アクセス集中にも耐えるようになっている.
なぜWordPressは重くなるのか
WordPressは1ページの表示ごとに,PHPを実行しDBに何度も問い合わせる.プラグインが増えるほどこの処理は重くなる.何もしなければ,毎リクエストでこの重い処理が走る.
高速化の本質は,「同じ処理を毎回やらない」ことだ.PHPコードのコンパイル結果,DBクエリの結果,生成されたHTML── これらをキャッシュして再利用すれば,重い処理を飛ばせる.
多くの人はキャッシュプラグインに頼るが,サーバー側(OPcache・Redis・Nginx)で効かせる方が根本的で強力だ.プラグインの不安定さやオーバーヘッドも避けられる.
VPSなら,これらサーバー側のチューニングを自由に施せる(共有サーバーでは制限が多い).これがVPSでWordPressを運用する大きな利点だ.
高速化の全体像 ― 3層のキャッシュ
WordPress高速化は,3つの層でキャッシュすることで体系的に効く.それぞれ「何をキャッシュするか」が違う.
| 層 | 何をキャッシュ | 効果 |
|---|---|---|
| OPcache | PHPのコンパイル結果 | PHP実行を高速化 |
| Redisオブジェクトキャッシュ | DBクエリの結果 | DB問い合わせを削減 |
| FastCGIページキャッシュ | 生成されたHTML | PHP/DBを完全にスキップ |
最も効くのはFastCGIページキャッシュだ──キャッシュが効けばPHPもDBも一切動かず,Nginxが保存済みHTMLを返すだけになる.OPcacheとRedisは,キャッシュが効かない(ログインユーザー・キャッシュ生成時)場合の処理を速くする.3層を組み合わせるのが最強だ.
OPcache ― PHPコードのコンパイル結果をキャッシュ
PHPは実行のたびにコードをコンパイルする.OPcacheはそのコンパイル結果をメモリにキャッシュし,毎回のコンパイルを省く.WordPressのような大量のPHPファイルがあるアプリで絶大な効果がある.
OPcacheの設定(php.ini)
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
# 設定後 PHP-FPM を再起動
# sudo systemctl restart php8.2-fpmopcache.memory_consumptionでキャッシュ用メモリを確保する(WordPressなら256MB程度).max_accelerated_filesはキャッシュできるファイル数で,プラグインが多いWordPressでは多め(20000)に.これだけでPHP実行が大きく速くなる.OPcacheは最も手軽で効果的な第一歩だ.
Redisオブジェクトキャッシュ ― DB問い合わせを減らす
WordPressは1ページ生成で大量のDBクエリを発行する.Redisオブジェクトキャッシュを使えば,クエリ結果をRedisにキャッシュし,同じ問い合わせのDBアクセスを省ける(Redis記事参照).
Redisオブジェクトキャッシュの導入
# Redisを導入(bind 127.0.0.1 で外部非公開,Redis記事参照)
sudo apt install -y redis-server php-redis
# WordPress側: Redis Object Cache等のプラグインを有効化
# wp-config.php に接続情報
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);Redisオブジェクトキャッシュは,DBの負荷を大きく下げる.特にプラグインが多くクエリが多いサイトで効果的だ.Redisは必ず127.0.0.1にバインドし外部公開しない(Redis記事のセキュリティ参照).プラグインで有効化し,ヒット率を確認しながら運用する.
FastCGIページキャッシュ ― 最強の一手
最も効果が大きいのがNginxのFastCGIページキャッシュだ.生成されたHTMLをNginxがキャッシュし,次回からはPHPもDBも一切動かさずに保存済みHTMLを返す(Nginxチューニング記事参照).
FastCGIキャッシュの骨子
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WP:100m inactive=60m;
location ~ .php$ {
set $skip 0;
if ($http_cookie ~* "wordpress_logged_in") { set $skip 1; } # ログイン時は除外
if ($request_method = POST) { set $skip 1; }
fastcgi_cache WP;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip;
fastcgi_no_cache $skip;
# ... fastcgi_pass 等 ...
}ログイン中・POST・カート等は必ずキャッシュから除外する($skip).これを誤ると,他人のログイン状態が表示される重大事故になる(Nginxチューニング記事参照).匿名訪問者には爆速のキャッシュHTML,ログインユーザーには通常処理── という使い分けで,アクセス集中にも耐える.記事更新時にキャッシュをクリアする仕組み(プラグイン連携)も併せる.
画像最適化 ― 最大の転送量を削る
ページの重さの大半は画像であることが多い.画像の最適化は,キャッシュと並んで体感速度に直結する.
- WebP/AVIF変換:JPEG/PNGより大幅に軽い次世代フォーマットに変換する(プラグインやサーバー側で).
- 適切なサイズ配信:表示サイズに合った画像を配信し,巨大画像をそのまま出さない.
- 遅延読み込み:画面外の画像を後から読む(WordPressは標準対応).
- 長期キャッシュ:画像はNginxで長期キャッシュ配信する(Nginxチューニング記事参照).
画像はサイト全体の転送量の大半を占めることが多い.WebP化と適切なサイズ配信だけで,ページ表示が劇的に軽くなることも珍しくない.サーバー側の画像最適化(EWWW等)とNginxの長期キャッシュを組み合わせると効果的だ.
DBの整理 ― 肥大化を抑える
WordPressのDBは,リビジョン・自動下書き・期限切れトランジェント・スパムコメントなどで肥大化する.これがクエリを遅くする.定期的な整理が効く.
リビジョン数の制限(wp-config.phpのWP_POST_REVISIONS)や,不要データの定期削除で,DBを軽く保てる.加えてMySQL/MariaDB側のチューニング(InnoDBバッファプール等)も効く(MySQL記事参照).DBが軽ければ,キャッシュが効かない処理も速くなる.「キャッシュで隠す」だけでなく「元を軽くする」ことも大切だ.
補論:WordPressの高速化は「自由に設定できるVPS」でこそ完結する
OPcache・Redis・FastCGIキャッシュといったサーバー側の高速化は,root権限で自由に設定できる環境が前提だ.共有レンタルサーバーではこれらを細かく制御できないことが多い.VPSだからこそ,3層のキャッシュをフルに効かせられる.
高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はNVMe SSDでDBアクセスやキャッシュI/Oが高速で,root権限でPHP-FPM・Redis・Nginxを自由にチューニングできる.メモリもスケールアップで増やせるため,OPcacheやRedisに十分なメモリを割ける.スナップショットで設定変更も安全に試せ,WordPress高速化の理想的な基盤だ.
高速化したWordPressを独自ドメイン+HTTPSで公開しよう.取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ でドメインを取得し,example.com/blog/のようにサブディレクトリ運用すればSEOの力も一本化できる.
よくある質問(FAQ)
Q1.まず何から高速化すべき?
効果と手軽さで(1)OPcache (2)FastCGIページキャッシュ (3)画像最適化 (4)Redisオブジェクトキャッシュの順がおすすめだ.OPcacheは設定だけ,FastCGIキャッシュは匿名訪問者に絶大な効果がある.
Q2.キャッシュプラグインで十分では?
プラグインも有効だが,OPcacheやFastCGIキャッシュはサーバー側で効かせる方が根本的で強力だ.プラグインのオーバーヘッドや不安定さも避けられる.VPSならサーバー側チューニングが自由にできる.
Q3.FastCGIキャッシュで注意すべきことは?
ログイン中・POST・カート等を必ずキャッシュから除外すること.これを誤ると他人のログイン状態が表示される重大事故になる.記事更新時のキャッシュクリアも併せて設定する.
Q4.Redisは必須?
必須ではないが,プラグインが多くDBクエリが多いサイトでは効果大だ.DB負荷を下げられる.導入時は必ず127.0.0.1にバインドし外部公開しないこと(Redis記事参照).
Q5.それでも遅い場合は?
画像最適化とDB整理を見直す.画像が重い・DBが肥大化していることが多い.加えてMySQLのバッファプール調整(MySQL記事),不要プラグインの削減も効く.計測してボトルネックを特定する.
Q6.共有サーバーとの違いは?
共有サーバーはOPcacheやNginxキャッシュを細かく制御できないことが多い.VPSならroot権限で3層のキャッシュをフルに設定でき,メモリも自由に割ける.本気の高速化はVPSの土俵だ.
まとめ ― 3層のキャッシュでWordPressは爆速になる
WordPress高速化の核心は,OPcache・Redis・FastCGIキャッシュの3層と,画像最適化・DB整理だ.これらをサーバー側で効かせれば,プラグインに頼らずWordPressは爆速になり,アクセス集中にも耐える.
今日やるべきことは,OPcacheを有効化し,FastCGIページキャッシュを設定すること(ログイン時の除外を忘れずに).この2つだけで体感が大きく変わる.
「WordPressは重い」は誤解だ.自由に設定できるVPSの上で,3層のキャッシュを効かせれば,速くて安定したサイトになる.