LINKこの記事は会員専用コンテンツを含んでいます。メディアサイトを運営する企業にとって、WordPressは第一の選択肢として上がってくるCMSである。国内外を問わず、WordPressは沢山のメディアによって利用されており、数千万から数億の月間PV数を誇るサイトも珍しくない。マスを相手にした広告モデルのメディアビジネスは変化を求められており、有料課金メディアへの移行を模索するケースも少なくない。Timesや、国内であれば紙の雑誌を休刊して会員制Webメディアへと移行したクーリエ・ジャポンが挙げられる。有料課金メディアの難しさの一つに、「キャッシュをどうするか?」という問題がある。有料課金メディアの多くは、その一部を通常の無料ニュースとして配信している。Webサイトを訪れたユーザーの一部を課金ユーザーに転換する、それが基本戦略の一つだ。課金ユーザーにはプレミアム記事が表示され、無料ユーザーは「続きを読む」をクリックするとログイン&購入を迫られる。訪問するユーザーは多ければ多いほどいい。無料ユーザーより課金ユーザーが多いということはありえない。ユーザーはこのファネルのようにロイヤリティに応じて減少していく。Newsなどに外部配信され、時にはSNSなどでバズを起こすこともありえる。すると、「スパイク」が発生し、急激にサイトへの負荷が高まる。通常のメディアサイトでは、キャッシュを利用することで負荷を軽減するが、ユーザーのステータスに応じて動的に中身を書き換えるサイトの場合、ページを丸ごとキャッシュするページキャッシュの考え方が適用しづらい。本稿では「有料課金メディアにおけるページキャッシュの方法」を実例をまじえて紹介しよう。筆者はこの方法を「ダイナミックページキャッシュ」と呼ぶことにする。会員制メディアの勃興さて、本題に入る前に、会員制の有料課金メディアが増えつつある背景について、筆者の私見を述べさせていただこう。前提として、インターネット広告費は増え続けており、Webにおける広告市場は縮小していない。「大量のアクセスを集め、そこに広告を提示する」というモデルが制度疲労を起こしているのは確かだ。出稿者、つまり広告を出す側としても、PVという特性の見えづらい大量のユーザーに向けて広告を打つことに意義を感じづらくなっている。メディアとしてもバズを狙う虚しさに疲弊している。絞られたターゲットに向けて情報発信をするメディアほど、大量のアクセスを稼ぐことに希望を持てなくなっているはずだ。そこで近年はビジネス指標をPVやCVRという刹那的な指標から、LTV(顧客生涯価値)へ移そうという動きが盛んだ。バズによって訪れたイナゴの襲来のようなPVではなく、メディアを訪れてくるユーザーと長期的な関係を築こうと考えるようになったわけだ。その典型的なモデルが会員制有料課金メディアというわけである。青がPVで緑がLTV。メディアビジネスを緑のような積み上げ型のビジネスとして考える指標だ。ダイナミックページキャッシュ=動的なサイトでのページキャッシュさて、いよいよ本題に入ろう。ページキャッシュというのは以前書いたキャッシュに関する記事から図を拝借すると、次のような仕組みになっている。WordPressのページ描画を図示したもの。これをすべてキャッシュするので、当然高速化が期待できる。これを端的に説明すると、以下のようなユーザーによって動的に表示を変更する機能は使えないということだ。PHPの条件分岐などで現在のユーザーを判別する特定のユーザーに対してだけコンテンツの表示を変える。データベースから取得したユーザー情報をもとに何かを表示するたとえばマイページのような、ユーザーごとに表示が変わるページ(そして、データの更新があるページ)はキャッシュしないようにする。WooCommerceを利用しているなら、カートページや注文詳細ページがキャッシュされることは絶対にあってはならない。一方で、個別の記事ページのようなスパイクが想定されるページは絶対にキャッシュされている必要がある。判断基準は色々あるが、筆者は「DBにアクセスするなら金を払え」と考えるようにしている。ちなみにであるが、多くの大手メディアではキャッシュにCDNを利用しており、ほとんどのアクセスはWebサーバーにさえ到達していないのが普通だ。したがって、「金を払ってないユーザーにはコンピューターリソースを使わせない、転送量は奢ってやる」ぐらいの強い気持ちで運用しよう。クールなパーツとホットなパーツでは、キャッシュされた個別の記事ページ(バズる可能性があるページ)はどのように構築していけばよいのだろうか。ここではページのパーツレベルで「クールなパーツ」と「ホットなパーツ」という考え方を紹介しよう。ちなみにこの考え方は筆者独自のものであるので、一般的には通用しない。マクルーハンっぽくて格好いいかなと思ってそう呼んでいるだけだ。2001-12カテゴリー文庫ページ数223ISBN4480086684マクルーハンの理論の全体像はこの書籍で概観をつかむことができる。APIクールなパーツとは、ユーザーによって表示が変更しないパーツのことである。ホットなパーツとは、ユーザーによって表示が変更するパーツのことである。「こんにちは◯◯さん!」や課金ユーザー専用コンテンツなど。これらのパーツにはそれぞれ以下の特徴がある。クールなパーツはキャッシュされても構わない。ホットなパーツは絶対にキャッシュされてはいけない。ホットなパーツはクールなパーツに置き換わる。APIまたはCookieを経由して取得される。それ以外はありえない。API)にアクセスする機会を与えられない。Pを例にとると、ホットなパーツとは下記の部分である。してみると、それほど多くない。サイト設計をする上で、動的に変わるべき部分を少なくするのも重要な秘訣だ。この部分がユーザーに応じて切り替わる、というわけだ。APIを利用するさて、会員専用コンテンツに関していえば、とりあえず無料ユーザー向けに表示しておいて、もしユーザーがログインしていれば会員専用コンテンツを表示するという手法がありえるのだが、ここで勘違いしてしまいがちなのが、会員判別のタイミングである。API経由のチェックを行っていたら、キャッシュしている意味がない。そのため、閲覧権限をチェックするときは必ずなんらかのユーザーアクションを伴わなければならない。わかりやすい例は「つづきを読む」ボタンである。左の場合、データベースのアクセスは一度も発生しない。したがって、コンピューターリソースを消費しないし、AWSから届く請求書の桁が上がることもない。APIにアクセスする。少なくともお金を払うそぶりを見せた時点でデータベースへのアクセスを許可する、ということだ。マルイのアパレル店員が服を触った瞬間に話しかけてくるのと同じだ。ログインしているユーザーならコンテンツをダウンロードして表示し、そうでなければログインページ(作り込まれた会員登録ページであることが望ましい)にリダイレクトする。上記ではログインアクションを紹介したが、すでにログインしているサイトで毎回「続きを読む」をクリックするのも相当にダルい話だ。そこでこうしたUIパーツに関しては、Cookieに保存した情報を元にReactなどでパーツを作り出すことをオススメする。Tastingというプラグインを作成した。属性がついているので、JavaScript経由でアクセスできない。そこでこのプラグインはログイン時にCookieを付与する。こんな感じでCookieが付与される。APIを叩くときのnonceもキャッシュされたものを上書きする。Cookieは偽装可能であるため、偽装されても問題ない情報しか格納しないようにしよう。「こんにちは◯◯さん!」という部分が偽装されても、偽装しているユーザーにそう表示されるだけなので問題はない。アクセスしたら、必ずDBを経由してアクセス可否をチェックする必要がある。まとめいったんまとめると、ダイナミックページキャッシュにおける基本原則は次の通り。すべてのユーザーに対して「無料ユーザー向けのページ」を出力し、キャッシュする。「続きを読む」クリック)でホットなパーツを読み込み、会員専用ページを作り上げる。APIなどを経由してデータベースに確認を取る。したダイナミックページキャッシュを実現する場合、WordPressのテーマはカスタマイズされていなければならないケースがほとんどだろう。プラグインなどでチョチョイノチョイと作れるレベルではない。WooCommerceと組み合わせた事例なども知ってはいるので、許可が出次第紹介しよう。Pも有料会員制メディアである。本サイトでは、個別の記事ページがスパイクに備えてすべてキャッシュされるようになっており、有料ユーザーの場合は会員専用コンテンツが読み込まれる仕組みになっている。どのように実現しているのかを、コードを交えて会員限定でお伝えしよう。[Blu-ray]DVD発行20世紀フォックス・ホーム・エンターテイメント・ジャパンカテゴリーBlu-rayちなみにウッディ・アレンの映画『アニー・ホール』にはマーシャル・マクルーハン本人が出てくる。小説家であり、WordPress開発者。2016のリードオーガナイザー。山梨に土地を持ち、DIYで家を建てている。ウェブサイトTwitterFacebookInstagramPinterestYouTubeLinkedinWordPressこの記事が気に入ったらいいね!しよう最新の情報をお届けします古い投稿[PR]『WordPressのやさしい教科書。Pのファンクラブです。有料会員制となっており、Gumroad経由でサブスクリプションをご購入いただき、ライセンスキーを登録いただくことで、会員特典を受け取ることができます。詳細を見るこの投稿へのコメントコメントはありません。コメントデータの処理方法の詳細はこちらをご覧ください。WordPressでのAMP対応Wixの使用感をWordPressと比較する使うサイト数によって金額を変える販売方法とGPL。Pというサイト名は"Wordpress"と書いてしまったときに詳しい人から「Pは大文字!」とツッコミが入ってくる現象から名付けられました。クレド(行動指針)もご覧ください。サーバー代を支払い、諸々の法的責任を負っています。