WP Popular Postsのキャッシュとサンプル率に「?」の初心者必見!意味を知って最適設定しよう




こんにちは! ワードプレスで人生初のブログ運営中、「しぜんfan」のPollyです。

「初心者必見!」と言いつつ、私自身が、ブログ開設から4ヶ月目にしてようやく日平均PVが20を越えたかな…? というくらいの初心者&極小サイト運営者です。

まずは「めざせ100記事!」で、題材、タイトル付け、構成、言葉の選び方など、尽きぬ悩みと日々格闘しながらなんとか続けているところ。

そんな中、ブログの内容以外にも気になり始めているのが、プラグインの設定の見直し。意味がよく分からないまま、なんとなく設定していたりしませんか?(私はそんなんばっかです…)

そこで今回、個人的に最近一番モヤモヤしていた「WordPress Popular Posts」の、特にデータキャッシュ」と「サンプル率」の設定について、みっちり自習してみました!

(自習方法は、開発者さんによる英語の説明ページの解読です。)

そしてその結果、全然自分のサイトに合わない設定になっていた項目を発見し、自習大成功

そこで、せっかくなので当記事では、その自習内容をまとめて共有してみたいと思います。

もしも私と同じように「実はよく分かってないかも…」という方がいらっしゃれば、お読みいただくと何か新発見があるかも!



WordPress Popular Posts設定の謎

このプラグインは超有名らしく、設定について説明した記事がネット上にたくさんありますよね。私も、その中のいくつかを参考にさせていただいて導入したクチです。

この記事を覗いて下さっているみなさんも、WordPress Popular Posts(WPP)がどんなプラグインかは既にご存じかと思いますので、概要説明は省略させていただきます。

私がWPPを導入したのは、アクセス数が今よりもさらに少なかった1ヶ月ほど前でした。訪問してくれる人にサイトカラーも伝わりやすいし、トップページもそれっぽくなるし、「なかなかいいな~♪」と気に入って使用していたのですが、一点だけ腑に落ちないことが。

なんか、計測がおかしくない? アナリティクスと比べて、データが全然違うんだけど…

分からないなりに何度か設定を変更してみたり、ウィジェットを入れ直したりしてはみたものの、WPPに表示される順位や計測数にはずっと違和感を持ったままでした。

原因解明に乗り出そう!

そこで昨日(2019年11月15日)、先輩ブロガーたちの解説記事も参考にしながら、あらためて設定を一つずつ見直してみることにしました。

※バージョンは、現時点で最新版の5.0.1です

「アイキャッチ画像」セクション

まずは冒頭部、「アイキャッチ画像」の項目。


ここで注意すべきは、黄色で囲った「Lazy load」の項目だと思われます。これを「はい」にしておくとサムネイルを読み込まなくなるかもしれないとかで、私は「No」にしているのですが、それで特に問題ないようなので、そのまま次の項目へ。

「データ」セクション

どうやらこの「データ」の項目が肝(きも)のようなんですよね。


まず、黄色で囲んだ「閲覧を記録する対象者」が「訪問者のみ」になっていることを確認。

次の「ログ上限」の「データ保存期間」については、中・大規模サイトの場合は短めにしておいたほうがいいのかもしれませんが、私のような極小規模の場合はお好みでいいんだと思います。

問題は、次の「データキャッシュ」「データサンプリング」の設定です。上の画像で赤いアンダーラインを引いた箇所ですね。

私はこれまで、いくつかのサイト記事を参考に、「キャッシュする」「キャッシュ更新間隔:1時間」「データサンプリング:有効」「サンプル率:100」としていました。先人たちの知恵の丸呑みです。

でもこれって、私のような極小規模サイトの場合でも “最適な設定” なんでしょうか?

それを知るには、まずは自分の頭でそれぞれを理解してみねば…。ということで、面倒くさい気持ちを抑えて「」をクリック。


すると、以下のような英語の説明ページに飛びました。

https://github.com/cabrerahector/wordpress-popular-posts/wiki/7.-Performance#caching

ディヴェロッパーであるHéctor Cabreraさんがインストラクションをまとめてくれているようです。幸い私は英語がわりと得意ですので、これを機に日本語に翻訳してみることに。

開発者による説明ページの日本語訳

※以降の英訳は、TOEIC875点・英検準一級の英語圏在住経験者による個人的な翻訳です。かなり意訳もしていますし、原文の言わんとすることから若干ずれている可能性もあること、あらかじめご了承ください。

それではまずはデータキャッシュの説明から読んでみたいと思います。

Caching―データキャッシュについて

Caching pageviews―PVのキャッシュについて

あなたのウェブページにアクセスがあったとき、WPPは毎回それをデータベースに記録します。

これは、アクセスが少ない小規模サイトには何の問題も起こさないでしょう。しかし、中・大規模サイトの場合は頻繁にデータベースへの書き込みが行われることになり、パフォーマンスの低下に繋がりかねません。

バージョン4.2.0以降のWPPでは、RedisやMemcached といったインメモリデータストアを利用することで頻繁なデータベースへの書き込みを回避し、一定間隔を設定した “まとめ記録” をすることが可能です。この一定間隔の長さは、最低120秒です。

この機能を使用するには、RedisやMemcachedにアクセスし、関連するプラグインをインストールし、セットアップしてください。

この説明項目は、知っておくと役には立ちそうですが、WPP自体の設定について知りたい私(たち)には今のところは関係ないようです。次、行ってみましょう。

Caching DB queries results―人気リストのキャッシュについて

WPPには、WordPress’ Transientsを使った独自のキャッシュメカニズムがあります。

WPPで人気リストを表示する場合、アクセスがある毎にリストを更新するのではなく、任意の期間毎に人気リストを取得&キャッシュ(一時保存)することができます。そうしてリスト作成に関するデータベースでの作業量を減らすことで、あなたのサイトのパフォーマンスを守ることができます。

さらに、もしあなたのサーバーがRedisやMemcachedと互換性があるならば、それらのキャッシュプラグインを導入するとさらに効果的でしょう。

Redis や Memcached のプラグインのことは置いておいて、この説明はまさに「データキャッシュする/しない」をプルダウンで選ぶところの核心部分ですね。キャッシュすると、データベースへの負担を減らすことができるということのようです。

さらに説明文は続きます。

Q. もし「キャッシュする」にしたら、何か不利益になることはありますか?

A. ひとつだけあります。それは、誰かがあなたのサイトにアクセスしても、そのアクセスは即座には人気リストに反映されないことです。

「キャッシュする」にした場合、WPPは、人気リストを作成するために一時保存されたデータ(キャッシュ済データ)を使用します。その一時保存期間が切れたら、WPPは再度データベースに問合せ、新たに人気リストを再作成します。

これはいわゆる “交換条件” のようなものです。リアルタイムでの人気リスト作成を諦める代わりに、労力を節約することができるのです。

なるほど!

ということは、中・大規模サイトほど「キャッシュする」にして、「キャッシュの更新間隔」も長めにしたほうがデータベースへの負担が減るというわけですね。

でも、あまり長くても順位の正確さが薄れてしまうので、1日以内にはしておいたほうがいいのではないでしょうか。

サイトが極小規模の場合はというと、このキャッシュ機能は使っても使わなくてもパフォーマンスに大差はないということなんでしょう。

私はとりあえず「キャッシュする」「1時間」のままにしておこうと思います(極小サイトですけど…笑)。

続いて、キャッシュの章の最後ブロックを訳しましょう。

Q. 「キャッシュする/しない」の設定の違いは「統計情報ダッシュボード」に影響しますか?

A. しません。統計情報のダッシュボードは、常にリアルタイムの統計を表示します。「キャッシュする/しない」は、ウィジェット内の情報のみに影響します。

統計ダッシュボードとは、このページのことですね ↓

例えば「1時間おきにキャッシュする」という設定にしても、その設定が反映されるのはウィジェットのほうだけで、こちらの統計情報ページに挙がってくる情報は常にリアルタイム、ということのようです。



Data Sampling―データサンプリングについて

次は、この記事のタイトルにもなっています「サンプリング」についての説明をみてみましょう。

バージョン3.2.0以降のWPPはデータサンプリング機能を備えています。この機能を有効にすると、サイトへのトラフィックのうちの「サブセット(一部分)」のみを抽出し、そのサンプルセットから得られた傾向を元にした統計をとることができるようになります。

ちょっとピンときませんが、どうやら、サイト訪問者の全トラフィック(訪問ページ)を一つ一つマメに計測するのではなく、例えば10回に1度だけ調べて、その「1」を「10」ってことにしちゃえ、というようなことのようです。

ずいぶんざっくりですね。

ここまででは理解がまだおぼつかないので、さらに読み進めてみましょう。

Q. 全てのトラフィックの代わりにサブセットだけを取り込むメリットは?

A. 既にご存じの方もいらっしゃると思いますが、WPPは全てのPVデータをデータベースに記録します。これは、小・中規模のサイトには特に問題ないことかもしれませんが、アクセス数の多いサイトには、WPPがひっきりなしにデータベースに働きかけることでパフォーマンスの低下やデータベースのロックダウンを引き起こしてしまう要因となってしまうのです。

なんだか尻切れトンボですので私が勝手に付け足すと、「故に、サブセット方式にすることで、データへの負担が軽減されるというわけです。」、という感じでしょうか。

私の頭ではちょっと冒頭の「PVのキャッシュ」との違いがよく掴み切れないのですが、とにかく、大規模サイトはデータサンプリング機能を使ったほうがいいよ、ということですよね。

さらに次は何て書いてあるでしょう。

Q. データサンプリングはどんな仕組みなの?

A. WPPは、誰かがあなたのページを訪れる度に「1」から「N」までの数の中からランダムに一つの数をピックアップします(「N」はサンプル率として設定した数値)。ランダムにピックアップされた数が「1」だったとき、そのページのPV数は「N」として計上されます。

理論上は、「1」に当たるには「N回」の “くじ引き” が必要なはずです(確率を言うならば「N分の1」)。この方法により、結果的にはデータベースを煩わせる回数を「N回」から「1回」に減らすことができます。

分かったような分からないような…。頭を振り絞って、「N」が「5」だった場合で考えてみると、こんなようなことだと思います。

5人がそれぞれ「すし」「ラーメン」「焼肉」「おでん」「ハンバーガー」を食べました。

その後、5人に「1」「2」「3」「4」「5」の数字の書かれたカードを一枚ずつ引いてもらいます。

すると、「おでん」の人が「1」を引きました。

→ 統計データ上は “5人ともがおでんを食べた” ということになる。

な、なんて乱暴な!

私のような極小サイトにはけっこうな大問題ですね、これは。

ということは、サイトが極小のうちはデータサンプリングは無効にしておいてもいいということではないでしょうか。逆に、大規模サイトであればデータサンプリングを有効にしないと大変なことになりそうですね。

ここからは説明文の最後まで一気に訳しましょう。

Q. でも、そのやり方だと正確な統計がとれないんじゃない?

A. そうですね、サイトへの訪問者が少ないうちは正確性は低いでしょう。しかし、訪問数が増えてくれば、全体としての正確性は高くなります。

Q. 「サンプル率」について教えて!

A. デフォルトのサンプル率は「100」です。これは、1日に125,000~250,000の訪問があるサイトへの推奨値です。訪問数が少ないサイトでは、サンプル率をもっと下げることをおすすめします。サンプル率が低いほうが統計の正確性は上がりますが、同時にデータベースへの書き込み頻度は上がることになります。

データサンプリングについての説明は以上でした。

最後にまた重要情報が出ましたね。私はサンプル率を「100」にしていたわけですが、これは明らかな間違いだったことが分かりました

だって、一日のPVが1万とか2万とかのサイト用の数値だったんですもん!

そりゃあ、アナリティクスとデータが合わないわけですよ。速攻で「5」に変えました(笑)むしろ無効にすることすら検討中です。

キャッシュ、データサンプリングについてのまとめ

今回、WordPress Popular Posts の公式説明ページを読んでみて、いかに自分がこのプラグインの設定を理解しないまま使っていたかがよ~く分かりました(笑)

特に「データサンプリング」「サンプル率」の意味が分かったことは、自分の中ではけっこう嬉しい進歩です。

お読みいただいている方にも、WWPの設定方法にあたって、少しは疑問が晴れたりしたでしょうか。(だと嬉しいです!)

重要事項を今一度、ここに書き出してみましょう。

「キャッシュする/しない」について
  • 人気リストをリアルタイム表示にするには「キャッシュしない」にする必要がある
  • しかし、アクセスの多い中・大規模サイトはデータベースへの負担を減らすために「キャッシュする」にしたほうがいい
  • 極小サイトはどちらでも大差ない

「キャッシュの更新間隔」について
  • 更新間隔は長いほうがデータベースへの負担は減らせる
  • しかし、長すぎてもせっかくの人気リスト表示が活きないので、できれば1日より短い間隔にするといいのでは(個人的意見)


「データサンプリング有効/無効」について
  • データサンプリング機能は、サイトへのPVを一つ一つカウントせずにざっくり “サブセット計測” をして、データベースへの負担を抑える機能のこと
  • 中・大規模サイトは「有効」にすべき
  • 極小サイトはどちらでも大差ない

「サンプル率」について
  • サンプル率「100」は、1日に125,000~250,000の訪問があるサイトへの推奨値
  • 極小サイトはサンプル率を100よりだいぶ下げるべき
  • サンプル率は低いほうが統計の正確性は上がるが、データベースへの書き込み頻度は上がることになるため、自分のサイトの規模によって数値をどうするか要検討

こうしてまとめてみると、上の「キャッシュ関連の設定」は人気記事リスト表示に、下の「サンプリング関連の設定」はページごとのPV計測にそれぞれ関わっているということが分かりました。

今回の学習結果を踏まえて、一日20~30PVの私のサイトの設定は、とりあえず以下のようにすることにしました。


キャッシュする」「キャッシュ更新間隔:1時間」「データサンプリング:有効」「サンプル率:5です! のちに、データサンプリング「無効」にしました。(2019.12.15追記)

そして念のため、ウィジェットを入れ直してみました。いくつかのサイトで、ウィジェットを入れ直すか更新しなければ設定の変更が反映されないと聞いたので、念のため…。

これで、アナリティクスとそこまで大きくズレはしないはずです!

おわりに

ノリに乗って翻訳なども始めてしまったため、予想外に長い記事となってしまいました。最後までお付き合いいただいた方、どうもおつかれさまでした!

いつかサンプル率を「100」にできるサイトになりたいなぁ…と未来に思いを馳せつつ、当記事を締めくくらせていただきます。

どうもありがとうございました!

Polly