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になっています。

管理画面の「KUSANAGI」→「ページキャッシュ」の画面に行くと
「ページキャッシュは有効になっていません。有効にするには、仮想サーバのコンソール上で、 kusanagi bcache on と入力してください。」
とメッセージが表示されていますので、コマンドからbcacheを有効化しましょう。
まずSSHでログインします。
sudo su -
コマンドでrootユーザーに昇格します。kusanagi target
で現在のプロファイルを確認設定を確認
bcacheの有効化


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

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

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

現在、有効になっている項目が赤文字で表示されます。
キャッシュの設定は一番下に表示されます。
kusanagi bcache
でbcacheの設定だけ確認することもできます。

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

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

もし、このメッセージがまだ消えていない場合は、手動で有効化する必要がありますのでwp-confg.phpを開いて79行目当りにある#define('WP_CACHE', true);
の先頭の#
を削除して保存してください。
これで先程のメッセージは消えるはずです。
bcacheの設定
有効化できたら次はbcacheの設定を行いましょう。
設定は全て管理画面から行います。
キャッシュの有効時間
まず管理画面の「KUSANAGI」→「ページキャッシュ」の画面を開いてください。
上から「トップページ」「アーカイブ」「記事詳細」と数字を入力するフォームが3つあります。

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

ここにはキャッシュさせたくないページのURLパターンを入力します。
例えばhttps://example.com/test1/というページを除外したい場合は/test1/
、カテゴリーページを全てキャッシュさせたくない場合は/category/.+
のように入力すれば良いです。
パターンには正規表現が使え、複数指定する場合は1行ずつ改行して入力してください。
頻繁に更新されるページやPHPでアクセス毎にランダムに出力内容を変えているページ等を指定すると良さそうです。
キャッシュするクエリ文字列

独自のクエリ付きのページもキャッシュさせたい場合は、このフォームにクエリのキーを入力します。
WordPressのデフォルトクエリは設定されていますので不要です。
例えば、https://example.com/?custom_test=1というページをキャッシュさせたい場合、custom_test
と入力すれば良いです。
複数指定する場合は1行ずつ改行して入力してください。
記事公開時に削除するキャッシュの範囲

新しい記事を公開してもキャッシュが残っていればトップページへ反映されません。
そこでこの設定が役に立ちます。
記事公開時にキャッシュを削除したいページを選びましょう。
デフォルトでは「削除しない」になっています。
ちなみにこの設定は予約投稿した記事が公開された際にも実行されます。
advanced-cache.phpの再生成

上記の設定をしたあとは必ず「advanced-cache.phpを生成する」ボタンを押してadvanced-cache.phpを再生成してください。
この作業を行わないと設定が反映されないことがあります。
bcacheの効果確認
bcacheの設定が終わったら、次は実際にページがキャッシュされるか確認してみましょう。
まず、管理画面にログインしていない状態でトップページにアクセスしてください。
これでキャッシュファイルが生成されるはずです。
どのページがキャッシュされているのかはコマンドで確認することができます。
bcacheを有効化するときと同じ手順でSSHでログインし、rootユーザーになってください。
そして次のコマンドを実行します。
kusanagi bcache clear '\|/$' --dryrun

INFO: |https|blog.simmon.design|/ cache will be deleted
と表示されているのでトップページがキャッシュされていることがわかります。
先程のコマンドが何をしているのかは次項の「bcacheを削除する」で詳しく説明します。
また、キャッシュファイルはデータベースを見ても確認することができます。
データベースにアクセスして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の削除コマンドの解説したいと思います。
まずkusnagi bcache clear
は全てのbcacheを削除するコマンドになります。
複数サイトがあれば全てのサイトの全てのbcacheを削除します。
そしてkusnagi bcache clear '\|/$'
はトップページのみ削除するコマンドになります。
シングルクォーテーションで囲った部分にはパスを指定します。
パスを指定することで削除対象を細かく絞ることができます。(パスには正規表現が使えます)
最後に前項で実行したkusnagi bcache clear '\|/$' --dryrun
ですが、
これは削除対象URL(この場合はトップページ)を確認するコマンドになります。
最後に--dryrun
をつけると削除対象URLの事前確認が行えます。
ですので慣れないうちは、--dryrun
オプションを付けて事前確認を行った後に削除する、という流れで行うと良いと思います。
余談ですが、dryrunは予行演習、空運転、リハーサルというような意味を持ちます。
次は、管理画面から削除する方法について説明します。
まず管理画面にログインし、「KUSANAGI」→「ページキャッシュ」の画面にいきます。
ページ下部に「キャッシュのクリア」という項目がありますので、すぐ下にある「すべて」をクリックしてみましょう。

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

bcacheの使い方については以上になります。
fcacheの使い方
fcacheを有効にする
デフォルトではfcacheはOFFになっています。
ONにするにはコマンドから行いますので、SSHでログインし、rootユーザーになってください。
そしてkusanagi target
で現在のプロファイルを確認し、問題がなければkusanagi fcache
でfcacheの設定も確認します。
ここまではbcacheの設定手順とほぼ同じです。
そして、kusanagi fcache on
でfcacheを有効化します。

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

[profile_name]_http.conf、[profile_name]_ssl.confというファイルがあるかと思いますので、viコマンドでファイルの中身を見てみましょう。
まずはvi profile_name_http.conf
でprofile_name_http.confの中身を見てみます。
![[profile_name]_http.confの中身確認](https://blog.simmon.design/wp-content/uploads/2018/06/kcc-21.png)
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ファイルの中身確認](https://blog.simmon.design/wp-content/uploads/2018/06/kcc-22.png)
109行目辺りにあるdo_not_cacheが0であればfcacheは有効化されているのでそのままファイルを閉じます。
1だった場合は0に書き換え後、上書き保存してください。
ファイルを編集したら設定を反映させるためにkusanagi restart
でNginxを再起動しましょう。
これでfcacheの有効化は完了です。
fcacheの設定
fcacheの設定は特に変更せずとも利用できますが、この項目では需要がありそうなキャッシュの有効時間の設定のみ解説します。
まず、vi /etc/nginx/nginx.conf
でnginx.confファイルを開いてください。

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のキャッシュファイルはユーザーエージェント(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 '/$'

bcacheの時と同様に、管理画面にログインした状態で削除したいページを表示、管理バー(ツールバー)右側の「cache clear」を押すことでも削除できます。
※ちなみに、管理画面にログイン中はbcache、fcache共に効かないようになっています。
以上で、詳解!KUSANAGIキャッシュ講座は終了です。
この記事ついてわからないことがあればコメント欄までお願いいたします。
また、KUSANAGIの導入・設定等のご相談も承っておりますので、ご興味がある方はお問い合わせまたはSimmon@Twitterまでご連絡ください。