当サイトで利用しているCloudflareをProプランにしてみました

当サイトで利用しているCloudflareをProプランにしてみました
Photo by Max Böhme / Unsplash

当サイトではDNS/CDNにCloudflareを利用してます。このドメインsakashita.pageでオンラインショップも立ち上げたこともありウェブページの読み込みや画像に関してお手軽に最適化したいなあと考えたのがきっかけです。

CloudflareのProプランは個人向けのプランだと思うのですが、調べてみても使っている人が見つからないんですよね。海外ではRedditなんかにそこそこいるようですが、日本で使っているユーザーさんのブログ記事なんかを見つけられませんでした。あるんでしょうが、参考にしようと検索しても引っ掛かりませんでした。せっかくなので、人柱といいますか、誰かの参考になればと思い、利用した記録を残しておきます。


環境について

当サイトはGhost(Pro)を利用しています。Ghost(Pro)はfastlyのCDNを利用していますし、そこにCloudflareのCDNも二重にかかっている状態です(たぶん)。そもそもGhostが速いこともあり、速度的な不満は特にありませんでした。画像の読み込みもテーマのほうで遅延読み込みをかけていますし、Ghostが自動的にオリジナル画像のほかにリサイズしたものを生成しています。

問題は今回作成したECショップです。こちらはShopifyのサービスであり、バックではWordPressが動いています。ShopifyはCloudflareと提携しているのでCDNは自動的に利用されている状況だと思われます。問題はキャッシュがされていないページの読み込み、つまり(Cloudflareのいうところの)オリジンへのアクセスがまあまあ遅いということです。ECショップでは画像が多く使われるうえに、カートなど管理でまあまあリソースが多いです。そもそもおっそいWordPressの上に成り立っているシステムなので仕方ないといえば仕方ないのですが、かといってテーマをちまちま最適化するほど暇じゃありません。CloudflareのProプランではHTTP/2の並列読み込みが利用可能になります。これによって見た目上の速度が向上するという算段です。HTTP/3という規格もありますが、Firefoxがデフォルトでは対応していないなどまだまだ発展途上という感じでした。

Proプランについて

Cloudflareにはfreeプランがあります。Proプランでは何が使えるのかというと、実はたいしたことは使えるようになりません。

Proプラン概要 | 機能と料金設定
CloudflareのProプランは、基本的なセキュリティ機能とパフォーマンス機能を必要とするWebサイト、ブログ、スタートアップ企業向けです。Proプランの機能と料金設定の詳細をご確認ください。

Proプランでできること(公式サイトから引用)

  1. 可逆圧縮と非可逆圧縮による画像最適化
    1. Polishを使って、メタデータを取り除き、可逆または非可逆の圧縮により画像から冗長バイトを削除して、画像サイズを縮小しましょう。
  2. モバイルへの画像配信を高速化
    1. Mirageを使って、Web訪問者のデバイスに応じて画像配信を加速しましょう。Mirageは、画面サイズと接続速度を自動検出し、画像配信を最適化します。
  3. 主要なサイトアセットを優先的に読み込み
    1. Enhanced HTTP/2 Prioritizationを使って、サイトリソース読み込みの優先順位を、Web訪問者のブラウザでなくお客様のサーバーで決定できるようにしましょう。
  4. CDNキャッシングの分析と改善
    1. 紛失、期限切れ、キャッシュ対象外といった理由でCloudflare CDNが使えないサイトアセットを把握しましょう。このデータを基に変更を行い、キャッシュされたリソースの数を増やしてサイト速度を上げましょう。
  5. WordPressプラグイン
    1. CDN、インテリジェントキャッシングなどに自動プラットフォーム最適化(APO)プラグインを使って、WordPressサイトを最適化しましょう。有効化すればすぐに使えます(最大300%の高速化を実現します)。
  6. Google検索のためのコンテンツプリフェッチ
    1. Largest Contentful Paint(LCP)など、有機的検索ランキング(SEO)の主要要因であるコアWebバイタルを改善しましょう。Automatic Signed Exchangeを使うと、Chromiumベースのブラウザを有効にして、Googleの検索結果ページでWebサイトをプリフェッチし、Webサイトを高速化することができます。

基本的には画像と通信の最適化を行うことでWebサイトが速く読み込めるようになり、おまけ程度にWordPressやGoogleの面白機能をつかえるよ~という感じです。

オプションについて

ネットワークの輻輳を避け、サイトの応答速度を爆速にするArgoと、大量のアクセスを複数のサーバーで裁くときに使うLoad Balancerをオプションにつけることができますが、大したサイトではありませんので、オプションはつけません。こういった特殊ユーザーのオプションは別に用意されているあたりがCloudflareのいいところだと思います。

さて、Proプランの魅力ですが、Freeプランで提供されるよりも高度なCDN機能が必要な方向けと分かります。

プランをアップグレードする

プランのアップグレードは超がつくほど簡単です。Proプランを購入するボタンをクリックするだけです。あっけないですね。一つ気を付けなければいけないのは、Cloudflareではドメインごとにプランが適用されています。Proプランにアップグレードしたいドメインを選択した状態でプランのアップグレードを行いましょう。どうでもいいドメインのプランをアップグレードしてしまわないようにしましょう。

機能をいろいろ変更していく

さて、Proプランで使えるようになった機能で私がいじった項目は以下の部分です。

  • SSL/TLS
    • エッジ証明書
      • Encrypted Client Hello(有効化)
  • セキュリティ
    • 設定(テンプレートから好きなようにルールを設定する)
  • Speed
    • 最適化
      • サイトの推奨事項(全有効化)

ほんとこれだけなので、拍子抜けするほど簡単です。今の時点ではあまりうまみが感られませんが、詳細なアナリティクスにアクセスできるようになります。わかりやすく地図にプロットされるので、眺めてふーんとなる程度には面白いです。

効果について

セキュリティの向上という効果のほうが大きな気もしますが、そもそもはページの読み込みを早くする目的でした。開発者ツールを開き、キャッシュを無効化した状態で読み込みをしてもまるでキャッシュから読み込まれたかのような速度でページが表示されますね。実際には通信が完全に終わったわけじゃないので、Lighthouseなどのインサイトツールを使えば体感しているほどの高速化の恩恵は感じませんね。現在のスコアが気になる人はこのページやトップページのLighthouseスコアを調べてください。

参考までに記事執筆時点でのサイトトップページのスコアおよびCNAMEレコードで飛ばしているECサイトのトップページのスコアをPro機能で利用可能になった機能を切り替えて比較をします。オンオフを切り替える機能は次にあげるものです。

  • Polish
  • Mirage
  • Enhanced HTTP/2 Prioritization

測定の仕方

Google Chromeのシークレットタブでwww.sakashita.pageを開き、開発者ツールにあるLighthouseから測定を行います。測定は以下のような環境設定で行いました。

Dev ToolsでLighthouseを開き、設定を済ませたところ
全機能オフ(このブログ)
全機能オン(このブログ)

遅延読み込みをすることによっておそらく通信が完全に終わるまでの時間が伸びてしまい、評価が下がってしまいましたね。というかたぶん誤差ですね。アイコン画像などがプログレッシブ画像になったのでしょうか。大きな画像のあるショップのほうでは1だけ評価が上がりましたね。ほんとうはCDN読み込むキャッシュがパージされてないので、Proプランに上がる前にLighthouseスコアを測定しておくべきだったのですが、やり忘れました。そのせいでLighthouseスコア的には意味のない検証になってしまっていますが、実際には体感できるほど速くなりました。ウェブページがちまちま部分ごとに読み込まれるのと、一瞬で全体が表示されるのでは快適度が大きく変わります。

じつはProプランを契約してからShopifyではCloudflareのプロキシ機能を利用できないことを知りました。プロキシをしないのであれば、CloudflareのDNS機能以外はすべてスルーです。意味がありません。

おわりに

ちょっとした便利機能が使えるCloudflareのProプランですが、皆さんの目にはどう見えましたか?へたくそな比較のせいで意味がないサービスに見えてしまっていたらすみません。使ってみた感想としては無茶苦茶いいなと思ったのですが、数値として表せなくなっているのが無念です。

人柱になれれば幸いです。

Read more

TailscaleのSubnet Routesを消す

SynologyのNASにTailscaleを導入し、便利に使っている。 TailscaleにはSubnet routersという機能がある。 これは、Tailscaleネットワークに接続されたデバイスが、そのデバイスが接続されているローカルネットワーク(サブネット)全体へのアクセスを他のTailscaleデバイスに提供できる機能だ。つまり、Subnet routerとして設定されたデバイスを経由することで、Tailscaleネットワーク上の他のデバイスから、そのローカルネットワーク内の機器にアクセスできるようになる。 Subnet routers · Tailscale DocsUse subnet routers to give devices outside your local network access to services within specific subnets. Extend your private network with Tailscale.Tailscale 便利そうだなと思って設定をしてみたものの、結局使うことがなかった。 公式ドキュメント

By Sakashita Yasunobu

Boids

群れに指揮者はいない 鳥の群れは、誰かが指示を出しているわけではない。魚の群れも同じ。それぞれが周囲を見て、少しだけ動く。その繰り返しが、全体として秩序ある動きを生む。 これを1986年にCraig Reynoldsがコードで再現した。名前は Boids(bird + oid)。個体に与えるルールは3つだけ。 1. Separation ── 近すぎたら離れる 2. Alignment ── 周囲と同じ方向を向く 3. Cohesion ── 群れの中心に寄る これだけで、群れは群れらしく動く。 なぜ作ったか 群れの動きは、見ていて飽きない。 * 単純なルールから複雑な動きが生まれる ── 創発(emergence)の典型例。設計していないのに、設計したかのように見える。 * 自分のブログに置きたかった ── 静的なページに、動くものがあると空気が変わる。 * Web Components で作りたかった ── どこにでも持っていける部品として。 設計の話 見えないときは止める 画面外でアニメーションを回し続けるのは無駄。Inte

By Sakashita Yasunobu

Days Elapsed

一年を「面」で見る 一年は365日。数字で見ると多いけど、並べてみると案外少ない。 12ヶ月を並べて、過去を塗りつぶして、今日を光らせる。それだけのカレンダーを作った。進捗バーが「一次元」なら、これは「二次元」の進捗表示。 Year Progress一年は50週ちょっとしかない 2026年を週で数えると、52週とちょっと。 カレンダーで見ると長そうなのに、週で数えると急に短くなる。そんな感覚を形にしたくて、このページの上の方に進捗バーを置いた。 やっていることは単純で、「今年が何%進んだか」をリアルタイムで表示しているだけ。 なぜ作ったか 理由は3つある。 1. 時間を「量」として見たかった ── イベントや予定ではなく、単純に「どれだけ経ったか」を数値で見たかった。 2. 目に見える形にしたかった ── 抽象的な「一年」を、動く数字に落とすとどう感じるか試したかった。 3. 自分の場所に置きたかった ── 誰かのツールを借りるのではなく、自分のブログに自分で作ったものを置きたかった。 実装の話 せっかく作るなら、

By Sakashita Yasunobu