ウェブパフォーマンスを考慮すれば、WordPressサイトのキャッシュは、遅かれ早かれ扱うことになります。WordPressは優れたCMSですが、特に質の高い静的サイトと比較すれば、最速のプラットフォームとは言えません。というのも、WordPressはPHPで構築されており、高速処理が行えないためです。PHP 8.0とPHP 8.1では、大幅な改善が行われていますが、適切にキャッシュを処理しなければ、サイトが超低速になってしまう可能性があります。

キャッシュプラグインなしで、適切にキャッシュ管理を行う方法があるのをご存知ですか?Kinstaでは、お客様に事業に専念していただけるよう、キャッシュ機能を実装しています

WordPressのキャッシュとは

キャッシュは、あるリクエストからリソースを保存し、その後のリクエストにそのリソースを再利用する仕組みです。これによって、ページビューの生成に必要になる作業量を抑えることができます。

キャッシュの重要性はシンプルで、WordPressサイトを高速化し、ウェブサーバーの負荷を軽減できる点にあります。いかなるサイトであっても、できる限りキャッシュを活用するのがベストプラクティス。さらに、CDNキャッシュなら、WordPressホスティングとは別に静的リソースを保存できるため、ページビューの生成に必要なサーバーの帯域幅を削減することも可能です。

KinstaならWordPressキャッシュプラグインは不要

Kinstaのホスティングプランには、さまざまなキャッシュ機能が付帯されており、複雑で使いにくい キャッシュプラグインに手を出す必要がなくなります。「2024年のおすすめキャッシングプラグイン」を調査する時間を削減し、重要な業務により多くの時間を費やすことができます。

Kinstaには以下4種類のキャッシュがあり、すべてソフトウェアまたはサーバーレベルで自動処理されます。

Kinstaに移行した多くのウェブサイトで、移行後すぐに大幅な読み込み時間の短縮が見られています。以下は、パフォーマンスが212.5%もアップしたサイト例です(キャッシュプラグイン未使用)。

KinstaでのWordPressサイトの読み込み時間
KinstaでのWordPressサイトの読み込み時間

読み込み時間の短縮には、他の要素も関係していますが、その大部分を占めているのがキャッシュ。キャッシュプラグインを適切に設定していないことが原因で、速度が低下しているWordPressサイトは数多く存在しています。W3 Total CacheをWordPressサイトで設定する方法はこちらでご紹介していますが、その手順は分かりにくく非常に複雑です。

Kinstaのお客様の声

Kinstaのパフォーマンスに関して、お客様から以下のようなご感想もいただいています。もちろん、どのサイトにもキャッシュプラグインはインストールされていません。

Kinstaに移行後、読み込み時間が一瞬で37%短縮された(しかもキャッシュプラグインなし)!🚀🚀🚀(和訳)

Google CloudとKinstaを組み合わせたWordPressホスティングに感動!(和訳)

WordPressキャッシュの種類

ここからは、WordPressのキャッシュの種類をそれぞれ掘り下げていきます。キャッシュの各レイヤーの役割を理解することで、キャッシュ関連のエラーのトラブルシューティングを行いやすくなり、サイト運営の効率化につながります。

バイトコードキャッシュ

バイトコードキャッシュは、コンパイルされたPHPコードを保存し、次回のアクセス時にコンパイルを省略できるようにするもの。Kinstaでは、PHP 7.3および7.4でOPcacheを有効にしています(今後、サポートする最新のPHPバージョンでも有効化していく予定です)。

最新情報PHP 8.1(正式リリース)は現在、すべてのお客様にご利用いただけます。なお、PHP 7.4のサポートは終了しています。現在ご利用可能なPHPのバージョンは、8.0, 8.1, 8.2 , 8.3です。

PHPファイルやスクリプトが処理する際、機械がその内容を認識できるよう、オペコードにコンパイルしなければなりません。OPcacheは、変換されたオペコードを保存し、次回以降にその特定のファイルやスクリプトが必要になった際、PHPがこのコンパイルの処理をスキップできるようにしてくれます。OPcacheを使用すると、PHPのパフォーマンスが劇的に向上されますが、同時にPHPファイルの変更がすぐに反映されないというデメリットも。これを考慮し、Kinstaのステージング環境ではOPcacheが無効になっています。

OPcacheでPHPアプリが高速化される仕組みはこちらをご覧ください。

オブジェクトキャッシュ

オブジェクトキャッシュは、データベースクエリの結果を保存し、次回のアクセス時にその特定のデータが必要になった際、データベースに問い合わせることなく配信できるようにするものです。これによって、PHPの実行時間が短縮され、WordPressのデータベースへの負荷が軽減されます。

WordPressには、オブジェクトキャッシュ(WP_Object_Cache)が組み込まれていますが、1回分の読み込み用のオブジェクトしか保存されません。キャッシュの目的は、ページ読み込みの間に、同じ目的で何度もデータベースが照会されないようにすること。しかし、WordPressでキャッシュされたオブジェクトは、1回読み込まれると、使用されなくなります。WordPressのオブジェクトキャッシュは便利な機能ですが、複数回使用できないのが難点です。

WordPress組み込みのオブジェクトキャッシュを外部ソリューションに切り替えれば、/wp-content/ディレクトリにキャッシュスクリプトをドロップすることで、複数のページ読み込みでキャッシュを再利用することができます。例えば、W3 Total Cache のようなプラグインベースのオブジェクトキャッシュ機能を使用できます。

Kinstaをご利用の場合は、Redisアドオンを使用すると、PHP 8 .0または8.1と併せてインストール可能です。Redisはオープンソースのインメモリデータ構造ストアで、データベース、キャッシュ、メッセージブローカーとして機能します。Redisを永続オブジェクトキャッシュとして使用する方法はこちらをご覧ください。

ページキャッシュ

ページキャッシュは、ページのHTML全体を保存し、WordPressがページを生成しなくても次回以降のページビューを生成できるようにするもの。

WordPressサイトを読み込むと、WordPressは大量のPHPファイルを処理し、データベースに何度も問い合わせなければなりません。特にほとんど更新されないページでは、これは余計な処理。各ページを一度だけ生成して保存し、キャッシュから配信する方がはるかに効率的です。これが、ページキャッシングの目的です。

ページキャッシングには、以下のメリットがあります。

  • 表示速度が大幅に向上される
  • サーバーの負荷が劇的に軽減され、大量のトラフィック処理が行えるようになる

Kinstaでは、ページキャッシュにnginx fastcgi cache moduleを採用しており、デフォルトで1時間ごとに失効するように設定されています。この有効期限は、必要に応じて、MyKinstaからいつでも変更可能です。サイトの「ツール」画面に移動し、「サイトキャッシュ」の「変更」をクリックして、「キャッシュの有効期限を変更する」を変更します。

ページキャッシュの有効期限を変更
ページキャッシュの有効期限を変更

表示される「キャッシュの有効期限を変更する」ウィンドウで、お好きな期限を選択して、「有効期限を変更する」をクリックして保存してください。選択肢は、1時間から7日までご用意しています。サイトに頻繁に変更を加えない場合は、パフォーマンスを考慮し、有効期限を長めに設定することをおすすめします。

ページキャッシュ有効期限の選択肢
ページキャッシュ有効期限の選択肢

ページキャッシュは、標準的なWordPress、BuddyPress、WooCommerce、およびEasy Digital Downloadサイトですぐに動作するように設定されています。これは、WordPressの管理画面、WooCommerceのショッピングカート、BuddyPressフォーラム(要ログイン)などのページが、自動的にページキャッシュからバイパスされることを意味します。高度にカスタマイズされたWordPressサイトの場合は、追加で細かな設定が必要になることがあります。

ページキャッシュは、Kinstaのステージング環境ではデフォルトで無効になっていますが、テストの目的によっては、ページキャッシュの有効化が役に立つ場合も。ステージングサイトのページキャッシュはMyKinstaで有効にすることができます。

CDNキャッシュ

CDN(コンテンツデリバリネットワーク)キャッシュは、ホスティングサーバーの場所から地理的に離れているユーザーにより高速にコンテンツを配信できるよう、サイトのファイル(JavaScript、CSS、メディアファイルなど)を保存します。誰かがサイトにアクセスすると、サーバーからではなくCDNから保存されたファイルが配信されます。CDNを使用するメリットはこちらをご覧ください。

CDNには、主に以下2つのメリットがあります。

  • サイトの読み込みに必要になるサーバーリソースを削減できる。CDNが処理を行うため、ウェブサーバーでの処理が不要に。
  • 世界中の拠点からリソースを配信することで、地理的に離れているユーザーに対してもパフォーマンスを向上させることができる。

CDNには、標準的なCDNとセキュリティ機能を搭載したCDNの2種類があります。それぞれの代表例は以下の通り。

  • 標準的なCDN:Stackpath、CloudFront
  • セキュリティ機能搭載のCDN:Kinsta CDN(Cloudflare)、Sucuri、Akamai(必要に応じて)

前者は、サイトのリソースにアクセスするために使用されるCDNのURLを作成して設定します。この手順はCDNサービスによって異なりますが、基本的には、静的リソースのURLがCDNのURLに変更され、リソースがCDNから取得されるという仕組みです。通常、JS、CSS、メディアファイルなどの静的ファイルのみをキャッシュします。

2つ目のタイプは、プロキシサーバーとして機能します。つまり、すべてのリクエストがCDNサービスのサーバーを介してホスティングサーバーに到達することになります。これには、CDNサービスのネームサーバーが使用され、サイトのDNSを完全管理できるようになります。これによって、悪質なIPからのトラフィックを検出したり、DDoS対策を講じたり、CDNにすべてのページキャッシュを保存したりなど、標準的なCDNでは実現できないことが可能になります。Kinsta CDNは、プロキシのパフォーマンス/セキュリティサービスのCloudflareによって提供されています。

高度なCDNキャッシュ

CloudflareSucuriのようなプロキシサーバーCDNを使用すると、CDN上に完全なページキャッシュを生成することができます。すべてのページのHTMLをキャッシュすることで、サーバーでの処理が不要になるため、大量のトラフィックを抱えるサイトには画期的なソリューションに。

  • Sucuri:キャッシュレベルが「Enabled」に設定すると、フルページキャッシュが有効化される。
  • Cloudflare:フルページキャッシュを有効にするにはページルールの設定が必要。その際、キャッシュレベルは「Cache Everything」に。

Kinstaのキャッシュレスポンスヘッダー

HTTPレスポンスヘッダーを確認することで、ページがKinstaのキャッシュから配信されているかどうかを確かめることができます。Kinstaでは、X-Kinsta-Cacheヘッダーが追加されます。キャッシュされていないページに初めてアクセスすると、以下のようにMISSが表示されます。

X-Kinsta-Cache「MISS」
X-Kinsta-Cache「MISS」

同じページへの2回目のリクエストでは、X-Kinsta-Cacheヘッダーの値はHITに変わり、ページがキャッシュから配信されていることがわかります。

X-Kinsta-Cache「HIT」
X-Kinsta-Cache「HIT」

関連して、Google PageSpeed Insightsで100点満点のスコアを獲得する方法もぜひご覧ください。Kinstaでは、さらにサーバーレベルで最適化をおこなっているため、以下の警告が自動的に修正されます。

  • 圧縮の有効化:すべてのサーバーであらかじめGZIP圧縮を有効化
  • サーバー応答時間の短縮:すでに超高速化されており、最適化が不要
  • Expiresヘッダー:サーバーレベルでキャッシュヘッダーが設定されており、有効化は不要

例えば、Kinstaのテストサイトでは、キャッシュプラグインなしでPageSpeed Insightsで100点満点を獲得しています。WordPressのキャッシュは、すべてサーバーレベルで処理されています。

PageSpeed Insights
PageSpeed Insights

Kinstaのキャッシュ設定

続いて、Kinstaでのキャッシュ管理方法についてご紹介します。例えば、特にトラブルシューティングを行う際には、キャッシュのクリアが必要になることも。キャッシュのクリアは、MyKinsta、またはKinsta MUプラグインで実行できます。

WordPressのキャッシュをクリアする

フルページキャッシュを手動でクリアするには、MyKinstaにログインしてください。サイトの「ツール」画面に移動し、「サイトキャッシュ」の「キャッシュをクリアする」ボタンをクリックするだけ。

MyKinstaでWordPressのキャッシュをクリア
MyKinstaでWordPressのキャッシュをクリア

WordPressのステージング環境では、デフォルトでキャッシュが無効になっています。ステージングサイトでページキャッシュ機能をテストするには、同様に「サイトキャッシュ」セクションでキャッシュを有効化することができます。キャッシュを有効にすると、ステージング環境でも本番環境と同様に「キャッシュをクリア」をクリックして、キャッシュをクリアすることができます。

Kinsta MUプラグイン

また、Kinsta MUプラグインを使用する方法も。厳密にはキャッシュプラグインですが、サーバーレベルで動作するため、一般的なプラグインとは異なります。

KinstaMUプラグインは、Kinstaをご利用のお客様のすべてのサイトにデフォルトでインストールされており、WordPress管理画面の左メニューから操作可能です。サイトの適切なページでキャッシュをクリアするために使用されており、Kinstaのプラットフォームでサイトがスムーズに動作するために不可欠になります。また、ページキャッシュの有効期限はデフォルトで1時間に設定されています。

Kinsta MUプラグイン
Kinsta MUプラグイン

このプラグインで、WordPressの管理画面からキャッシュをパージすることも可能です。MyKinstaを開く必要がないのが、このプラグインのメリット。サイトの管理画面から直接実行することができます。

WordPress管理画面でキャッシュをクリア
WordPress管理画面でキャッシュをクリア

さらに、カスタムキャッシュルールを設定することも。サイトの構成によっては、キャッシュルールの追加が必要になります。カスタムパスを追加して、サイトが更新されるたびにパージすることができます。

なお、特定のページやURLをキャッシュから除外するには、Kinstaのカスタマーサポートまでご連絡ください。

ステージング環境

Kinstaのステージング環境では、ページキャッシュがデフォルトで無効になっているのはご存知の通り。これによって、編集するたびに手動でキャッシュをクリアする必要がなくなり、WordPressサイトを簡単に開発、デバッグすることができます。また、例えばステージング環境でキャッシュされたページの正確な速度テストを実行したい場合には、ページキャッシュを有効化することも可能です。

これを行うには、MyKinstaにログイン後、「サイト」>(ステージングサイト名)>「ツール」に移動し、「サイトキャッシュ」の「キャッシュを有効にする」をクリックしてください。ステージング環境でキャッシュを有効にすると、「キャッシュをクリア」ボタンでキャッシュをパージすることも可能になります。

ステージングサイトのページキャッシングを有効化
ステージングサイトのページキャッシングを有効化

キャッシュの分析

MyKinstaの分析画面で、WordPressサイトが適切にキャッシュされているかどうかを確認することができます。「キャッシュ推移」では、各リクエストのステータス(HIT、BYPASS、MISS、EXPIRED)が表示されます。また、過去24時間、7日間、30日間でデータをフィルタリングすることができます。

キャッシュ推移
キャッシュ推移

「キャッシュ比率」チャートは、キャッシュの比率を一目で見ることができます。キャッシュから配信するリクエストが多ければ良いというわけではありません。

キャッシュ比率チャート
キャッシュ比率チャート

「リクエスト数上位のキャッシュバイパス一覧」セクションでは、どのリクエストがキャッシュから配信されていないかを確認することができます。cronジョブ、admin-ajaxリクエスト、ECサイト決済ページ、クエリ文字列、UTMパラメータなどを含むのが一般的です。

リクエスト数上位のキャッシュバイパス"
リクエスト数上位のキャッシュバイパス

404エラーページのキャッシュ

WordPressサイト、特に大規模な会員制サイトでは、想像を超える404エラーが発生しているため、404エラーページで大量のリソースが消費される可能性があります。これは、移動したページのリダイレクト設定を忘れているか、SNSで共有した投稿に誤ったリンクが含まれているなどが原因になっています。訪問者が404エラーページにアクセスしてしまう要因はさまざま。また、404エラーページには、代替の検索結果を引き出すクエリが含まれていることが多く、それがデータベースにヒットすることもあります。

WordPressサイトのパフォーマンスを向上させるため、Kinstaでは404エラーページを15分間キャッシュするように設定しています。X-Kinsta-Cacheの値は、キャッシュから配信されていることを意味するHITを示し、404エラーが発生したページを作成すれば、キャッシュはすぐにパージされます。

MyKinstaの分析画面で、404エラーの発生状況も確認することができます。

404エラーの内訳
404エラーの内訳

なお、404エラーページは、すべてキャッシュされるわけではありません。404エラーには、PHPページからのリクエストで404エラーページに到達した場合、存在しないファイルや画像が移動された場合の2種類あります。Kinstaでは、前者のみをキャッシュし、後者は別の方法で処理されます。

「リクエスト数上位の404エラー一覧」で、エラーの発生場所とその原因を確認することができます。

キャッシュされている404エラーページ
キャッシュされている404エラーページ

また、Google Search Consoleで404エラーを確認したり、404エラーのログを記録するRedirectionなどのサードパーティプラグインを使用したりすることも可能です。ただし、この手のプラグインはパフォーマンスに影響を与えるため、サーバーレベルのツールを利用する方が賢明です。

可能であれば、データベースへの必要以上の問い合わせを回避する簡単な404テンプレートを作成することをおすすめします。

POSTリクエストはキャッシュをバイパス

解析とキャッシュの統計は、できるだけ正確であってほしいもの。というのも、パフォーマンスの問題をトラブルシューティングする際は、キャッシュのHIT率を確認するのが一般的なためです。Kinstaでは、POSTリクエストもレポートで確認することができます。

POSTリクエストは、高度なセットアップを除き、キャッシュすることができません。したがって、X-Kinsta-Cacheのヘッダー値は、BYPASSになります。このリクエストは、ブログ記事やキャッシュ可能な投稿と混同しないようにご注意ください。POSTリクエストは、サーバーにデータを送信するために使用されます。例えば、フォーム送信時のデータは、HTTPリクエストボディに格納されます。

まとめ

今回は、WordPressのキャッシュ、Kinstaで利用可能な4種類のキャッシュ(バイトコードキャッシュ、オブジェクトキャッシュ、ページキャッシュ、CDNキャッシュ)について詳しくご説明しました。

WordPressキャッシュプラグインの面倒な操作なしで、今すぐサイトを高速化させるなら、Kinstaのホスティングサービスをお試しください。Kinstaが5年連続でReviewSignalのトップ・ティアWordPressホスティングパフォーマンス賞を受賞している理由は、高度に調整されたGoogle Cloud Platformのみを採用し、超高速な読み込み時間を実現していることにあります。パフォーマンス最適化は、私たちにお任せください。

Brian Jackson

Brianの最大の情熱の一つは10年以上使用してきたWordPressです。複数のプレミアムプラグインさえ開発しています。Brianの趣味はブログや映画やハイキングなどです。TwitterでBrianとつながりましょう。