詳解!KUSANAGIキャッシュ講座

詳解!KUSANAGIキャッシュ講座

KUSANAGIマイスターのSimmonです。
この記事ではKUSANAGIの最大の特徴であるキャッシュ機能(bcacheとfcache)について解説しています。
丁寧に作ったのでこの記事をブックマークして、キャッシュの導入や設定でつまづいた時に読み返してみてください。

bcacheとは

bcacheとは、block cacheの略で動作はWordPress内のKUSANAGIプラグインが行っています。
仕組みとしては、WordPressのページキャッシュプラグイン(WP Super CacheやWP Super Cache等)と似ています。

キャッシュ有効時、まずアクセスがあると、そのページのHTML(キャッシュデータ)がデータベースに保存されます。
(キャッシュデータはwp_site_cacheというテーブルに入っています。)

そして次回以降は、テーマファイルが読み込まれる前にデータベースから取得したキャッシュデータを表示してプログラムを終了しています。
キャッシュが効いていると、テーマファイルが読み込まれないため高速化できるというわけです。

fcacheとは

fcacheとは、FastCGI Cacheの略で動作はサーバー(Nginx)が行っています。
仕組みとしてはbcacheと似ているのですが、大きな違いはキャッシュデータをサーバーに保存している点です。

まず初回アクセス時に、そのページのHTML(キャッシュデータ)がサーバーに保存されます。
(キャッシュデータは/var/cache/nginx/wordpressディレクトリにmd5でハッシュ化されたファイル名で保存されています)

そして次回以降は、アクセスがあるとサーバーに保存されたキャッシュが返されます。
この場合、WordPressにすらアクセスしないためbcacheより高速にページが表示されます。

bcacheの使い方

bcacheを有効にする

デフォルトではbcacheはOFFになっています。

bcache OFF時のメッセージ

管理画面の「KUSANAGI」→「ページキャッシュ」の画面に行くと
「ページキャッシュは有効になっていません。有効にするには、仮想サーバのコンソール上で、 kusanagi bcache on と入力してください。」
とメッセージが表示されていますので、コマンドからbcacheを有効化しましょう。

  1. まずSSHでログインします。

  2. SSHログイン後の画面
  3. sudo su -コマンドでrootユーザーに昇格します。

  4. rootユーザーに昇格

    パスワードを求められたら入力してください。

  5. kusanagi targetで現在のプロファイルを確認

  6. 現在のプロファイルを確認

    bcacheを有効化したいプロファイルになっていない場合は、
    kusanagi target [profile name]でプロファイルを変更しましょう。

    プロファイルを変更
  7. 設定を確認

  8. bcacheを有効化する前に現在のKUSANAGIの設定を確認してみましょう。
    kusanagi statusと入力すると現在の設定を確認できます。

    KUSANAGIの設定確認

    現在、有効になっている項目が赤文字で表示されます。
    キャッシュの設定は一番下に表示されます。

    kusanagi bcacheでbcacheの設定だけ確認することもできます。

    bcacheの設定確認
  9. bcacheの有効化

  10. kusanagi bcache onでbcacheを有効化しましょう。
    「onにします。完了しました。」
    と表示されれば完了です。

    bcacheの有効化

念の為、KUSANAGIの設定画面も見てみます。
有効化する前に出ていた「ページキャッシュは有効になっていません。有効に…」というメッセージが消えていれば問題ありません。

KUSANAGIページキャッシュ設定画面

もし、このメッセージがまだ消えていない場合は、手動で有効化する必要がありますのでwp-confg.phpを開いて79行目当りにある#define('WP_CACHE', true);の先頭の#を削除して保存してください。
これで先程のメッセージは消えるはずです。

bcacheの設定

有効化できたら次はbcacheの設定を行いましょう。
設定は全て管理画面から行います。

キャッシュの有効時間

まず管理画面の「KUSANAGI」→「ページキャッシュ」の画面を開いてください。
上から「トップページ」「アーカイブ」「記事詳細」と数字を入力するフォームが3つあります。

bcacheの有効期限設定

これはキャッシュの有効期間を何分にするかの設定です。
デフォルトでは60分、60分、360分になっています。
デフォルトのままでも良いですし、サイトの構成によってはもう少し長めに取っても良いでしょう。

キャッシュ除外URL

bcache除外URL

ここにはキャッシュさせたくないページのURLパターンを入力します。
例えばhttps://example.com/test1/というページを除外したい場合は/test1/、カテゴリーページを全てキャッシュさせたくない場合は/category/.+のように入力すれば良いです。

パターンには正規表現が使え、複数指定する場合は1行ずつ改行して入力してください。
頻繁に更新されるページやPHPでアクセス毎にランダムに出力内容を変えているページ等を指定すると良さそうです。

キャッシュするクエリ文字列

bcacheするクエリ文字列

独自のクエリ付きのページもキャッシュさせたい場合は、このフォームにクエリのキーを入力します。
WordPressのデフォルトクエリは設定されていますので不要です。

例えば、https://example.com/?custom_test=1というページをキャッシュさせたい場合、custom_testと入力すれば良いです。
複数指定する場合は1行ずつ改行して入力してください。

記事公開時に削除するキャッシュの範囲

bcache記事公開時にキャッシュ削除する範囲

新しい記事を公開してもキャッシュが残っていればトップページへ反映されません。
そこでこの設定が役に立ちます。
記事公開時にキャッシュを削除したいページを選びましょう。
デフォルトでは「削除しない」になっています。

ちなみにこの設定は予約投稿した記事が公開された際にも実行されます。

advanced-cache.phpの再生成

advanced-cache.phpの再生成

上記の設定をしたあとは必ず「advanced-cache.phpを生成する」ボタンを押してadvanced-cache.phpを再生成してください。
この作業を行わないと設定が反映されないことがあります。

bcacheの効果確認

bcacheの設定が終わったら、次は実際にページがキャッシュされるか確認してみましょう。
まず、管理画面にログインしていない状態でトップページにアクセスしてください。
これでキャッシュファイルが生成されるはずです。

どのページがキャッシュされているのかはコマンドで確認することができます。
bcacheを有効化するときと同じ手順でSSHでログインし、rootユーザーになってください。
そして次のコマンドを実行します。

kusanagi bcache clear '\|/$' --dryrun

bcache削除予定ページの確認

INFO: |https|blog.simmon.design|/ cache will be deleted
と表示されているのでトップページがキャッシュされていることがわかります。
先程のコマンドが何をしているのかは次項の「bcacheを削除する」で詳しく説明します。

また、キャッシュファイルはデータベースを見ても確認することができます。
データベースにアクセスしてwp_site_cacheというテーブルを開いてください。

wp_site_cacheテーブルの確認

typeカラムにfront、device_urlカラムにトップページのurlが入っているので、トップページのキャッシュファイルが作成されていることが確認できます。

該当ページがキャッシュから返されているかはHTTP レスポンスヘッダで確認することも可能です。

bcache無効時
x-b-cache: BYPASS

bcache生成時
x-b-cache: create

bcacheヒット時
x-b-cache: cache

bcacheを削除する

最後にbcacheを削除する方法を解説していきます。
bcacheを削除する方法は2つ。
コマンドから行う方法とWordPressの管理画面から行う方法があります。

まずは、コマンドから行う方法について説明します。
SSHでログインし、rootユーザーになってください。
そして、次のコマンドを実行するとトップページのbcacheが削除されます。
kusanagi bcache clear '\|/$'

bcache削除コマンド

ここでbcacheの削除コマンドの解説したいと思います。
まずkusnagi bcache clearは全てのbcacheを削除するコマンドになります。
複数サイトがあれば全てのサイトの全てのbcacheを削除します。

そしてkusnagi bcache clear '\|/$'はトップページのみ削除するコマンドになります。
シングルクォーテーションで囲った部分にはパスを指定します。
パスを指定することで削除対象を細かく絞ることができます。(パスには正規表現が使えます)

最後に前項で実行したkusnagi bcache clear '\|/$' --dryrunですが、
これは削除対象URL(この場合はトップページ)を確認するコマンドになります。
最後に--dryrunをつけると削除対象URLの事前確認が行えます。
ですので慣れないうちは、--dryrunオプションを付けて事前確認を行った後に削除する、という流れで行うと良いと思います。

余談ですが、dryrunは予行演習、空運転、リハーサルというような意味を持ちます。

次は、管理画面から削除する方法について説明します。
まず管理画面にログインし、「KUSANAGI」→「ページキャッシュ」の画面にいきます。
ページ下部に「キャッシュのクリア」という項目がありますので、すぐ下にある「すべて」をクリックしてみましょう。

bcacheすべてのキャッシュを削除

これでbcacheが全て削除されます。

ページごとにキャッシュを削除したい場合は、管理画面にログインした状態でキャッシュを削除したいページを開いてください。
管理バー(ツールバー)の右側に「cache clear」という項目がありますので、それをクリックすると表示中のページのbcache(fcacheも)が削除されます。

bcache管理画面からページごとに削除

bcacheの使い方については以上になります。

fcacheの使い方

fcacheを有効にする

デフォルトではfcacheはOFFになっています。
ONにするにはコマンドから行いますので、SSHでログインし、rootユーザーになってください。
そしてkusanagi targetで現在のプロファイルを確認し、問題がなければkusanagi fcacheでfcacheの設定も確認します。

ここまではbcacheの設定手順とほぼ同じです。

そして、kusanagi fcache onでfcacheを有効化します。

fcache有効化コマンド

念の為、fcacheがきちんと有効化されているかconfファイルを見て確認してみましょう。
まず、cd /etc/nginx/conf.dで各プロファイルのconfファイルがあるディレクトリに移動します。
そしてllコマンドでディレクトリの中身を確認します。

confファイルの確認

[profile_name]_http.conf、[profile_name]_ssl.confというファイルがあるかと思いますので、viコマンドでファイルの中身を見てみましょう。

まずはvi profile_name_http.confでprofile_name_http.confの中身を見てみます。

[profile_name]_http.confの中身確認

91行目辺りにdo_not_cacheという変数がセットされていますが値が0になっていればfcacheが有効化されていますので、ZZでファイルを閉じましょう。
もし、値が1だった場合はfcacheはOFFのままですので、iでインサートモードにし、 do_not_cacheの値を0から1に書き換えます。
そしてescでインサートモードを終了し、:wqコマンドで上書き保存してください。

先程と同様の手順で[profile_name]_ssl.confファイルの中身も見てみます。

[profile_name]_ssl.confファイルの中身確認

109行目辺りにあるdo_not_cacheが0であればfcacheは有効化されているのでそのままファイルを閉じます。
1だった場合は0に書き換え後、上書き保存してください。

ファイルを編集したら設定を反映させるためにkusanagi restartでNginxを再起動しましょう。
これでfcacheの有効化は完了です。

fcacheの設定

fcacheの設定は特に変更せずとも利用できますが、この項目では需要がありそうなキャッシュの有効時間の設定のみ解説します。

まず、vi /etc/nginx/nginx.confでnginx.confファイルを開いてください。

fcacheの有効時間設定

56行目のfastcgi_cache_pathから始まる行でキャッシュファイルの保存場所やキャッシュの有効時間などを決めています。
この行の一番右側にinactiveというキーがありますのでその値を変更するとキャッシュの有効時間が変わります。
dはdayの略になりますのでこの画像では30日に設定しています。
指定方法ですが、10分なら10m、2時間なら2h、2日なら2dというように指定します。

設定を変更したらkusanagi restartを忘れずに行いましょう。

fcacheの効果確認

bcacheと同様にfcacheの有効化、設定が終わったら、次は実際にページがキャッシュされるか確認してみましょう。
まず、管理画面にログインしていない状態でトップページにアクセスしてください。
(可能であればスマホ、タブレットからもアクセスしましょう。ブラウザのデベロッパーツールでUAを変えてアクセスしてもいいです。)
これでキャッシュファイルが生成されるはずです。

どのページがキャッシュされているのかはコマンドで確認することができます。
手順はbcacheの時とほぼ同じです。

まずでSSHでログインし、rootユーザーになってください。
そして次のコマンドを実行します。

kusanagi fcache clear '/$' --dryrun

fcache 削除予定URLの確認

fcacheのキャッシュファイルはユーザーエージェント(UA)ごとに作られるので、pc、tablet、smartと3つキャッシュファイルが生成されていることが確認できました。

bcacheと同様にHTTP レスポンスヘッダで確認することも可能です。
(bcacheの場合と値が少し異なるので注意が必要です)

fcache無効時
x-b-cache: BYPASS

fcache生成時
x-f-cache: MISS

fcacheヒット時
x-f-cache: HIT

fcacheを削除する

最後にfcacheを削除する方法を解説します。
手順はbcacheの時とほぼ同じです。

まずSSHでログインし、rootユーザーに昇格します。
そして次のコマンドを実行するとトップページのキャッシュが削除されます。

kusanagi fcache clear '/$'

fcacheをコマンドで削除する

bcacheの時と同様に、管理画面にログインした状態で削除したいページを表示、管理バー(ツールバー)右側の「cache clear」を押すことでも削除できます。

※ちなみに、管理画面にログイン中はbcache、fcache共に効かないようになっています。

以上で、詳解!KUSANAGIキャッシュ講座は終了です。

この記事ついてわからないことがあればコメント欄までお願いいたします。
また、KUSANAGIの導入・設定等のご相談も承っておりますので、ご興味がある方はお問い合わせまたはSimmon@Twitterまでご連絡ください。