「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つの層でキャッシュすることで体系的に効く.それぞれ「何をキャッシュするか」が違う.

何をキャッシュ効果
OPcachePHPのコンパイル結果PHP実行を高速化
RedisオブジェクトキャッシュDBクエリの結果DB問い合わせを削減
FastCGIページキャッシュ生成されたHTMLPHP/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-fpm

opcache.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,ログインユーザーには通常処理── という使い分けで,アクセス集中にも耐える.記事更新時にキャッシュをクリアする仕組み(プラグイン連携)も併せる.

画像最適化 ― 最大の転送量を削る

ページの重さの大半は画像であることが多い.画像の最適化は,キャッシュと並んで体感速度に直結する.

  1. WebP/AVIF変換:JPEG/PNGより大幅に軽い次世代フォーマットに変換する(プラグインやサーバー側で).
  2. 適切なサイズ配信:表示サイズに合った画像を配信し,巨大画像をそのまま出さない.
  3. 遅延読み込み:画面外の画像を後から読む(WordPressは標準対応).
  4. 長期キャッシュ:画像はNginxで長期キャッシュ配信する(Nginxチューニング記事参照).

画像はサイト全体の転送量の大半を占めることが多い.WebP化と適切なサイズ配信だけで,ページ表示が劇的に軽くなることも珍しくない.サーバー側の画像最適化(EWWW等)とNginxの長期キャッシュを組み合わせると効果的だ.

DBの整理 ― 肥大化を抑える

WordPressのDBは,リビジョン・自動下書き・期限切れトランジェント・スパムコメントなどで肥大化する.これがクエリを遅くする.定期的な整理が効く.

リビジョン数の制限(wp-config.phpWP_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層のキャッシュを効かせれば,速くて安定したサイトになる.