Webサイトのパフォーマンスを最適化(Lighthouse 100点)した後は、その状態を維持し、実際のユーザー体験(Core Web Vitals)を計測する必要があります。 しかし、一般的なGoogle Analyticsはスクリプトが重く、Cookie同意バナーの設置も必要になるなど、静的サイトのシンプルさを損なう要因になりがちです。
そこで本稿では、Cloudflare Web Analytics を活用した、軽量かつプライバシーに配慮したアクセス解析の導入について解説します。 また、ダッシュボードを見るだけでなく、PythonとGraphQL APIを用いてデータをプログラムから取得・監視する方法も紹介します。
Cloudflare Web Analyticsのメリット
- プライバシーファースト: Cookieを使用せず、IPアドレスなどの個人特定情報も保存しません。GDPRなどの規制に準拠しやすいです。
- 超軽量:
beacon.min.jsは非常に小さく、サイトのパフォーマンス(Lighthouseスコア)に悪影響を与えません。 - 自動設定: Cloudflare Pagesを利用している場合、デプロイ設定で有効にするだけで自動的に計測が始まります。
- Web Vitals計測: PV数だけでなく、実際のユーザー環境でのLCPやFIDなどのCore Web Vitals指標を計測できます。
GraphQL APIによるデータ取得
Cloudflareのダッシュボードは優秀ですが、日々の監視を自動化するにはAPI経由でのデータ取得が不可欠です。 Cloudflareは詳細な分析データにアクセスするための GraphQL API を提供しています。
以下は、直近7日間のトラフィックデータを取得し、ボットを除外(可能な場合)してJSON形式で出力するPythonスクリプトの例です。
スクリプトの機能
- Zone IDの自動検出: APIトークンから対象のZone IDを自動でルックアップします。
- フォールバック機能: Freeプランで制限されている詳細データ(Adaptive Groups)が取得できない場合、自動的に日次集計データ(1d Groups)に切り替えます。
導入手順
-
APIトークンの発行: Cloudflareダッシュボードの[API Tokens]から、「分析およびログを読み取る (Analytics Read)」権限を持つトークンを作成します。
-
環境変数の設定: プロジェクトルートに
.envファイルを作成し、トークンを記述します。CLOUDFLARE_API_TOKEN=your_token_here -
スクリプトの実行: リポジトリに含まれる
web/scripts/analyze_traffic.pyを実行します。uv run web/scripts/analyze_traffic.py --days 7 --json
実行すると、以下のようなJSONデータが得られます。
{
"mode": "basic",
"total_requests": 1752,
"total_pageviews": 333,
"details": [
{
"date": "2026-01-04",
"requests": 570,
"page_views": 121,
"bytes": 114842033
}
...
]
}
Freeプランの制限と対策
実装にあたり、Freeプラン特有のAPI制限に直面しました。 Cloudflare GraphQL APIには主に2つのデータセットがあります。
- httpRequestsAdaptiveGroups: フィルタリングやドリルダウンが可能な詳細データ。
- httpRequests1dGroups: 日次で集計された統計データ。
本来であれば前者の AdaptiveGroups を使用して、「User Agentごとの詳細なフィルタリング」を行いたかったのですが、Freeプランではこのクエリの一部が制限されており、エラー(unknown field)が返ってくることが判明しました。
そのため、開発したスクリプトではエラーを検知して自動的に httpRequests1dGroups へフォールバックする実装を行っています。
結果として、プランに関わらず最低限のトラフィック推移(PV数、リクエスト数、転送量)は確実に取得できるようになっています。
まとめ
Cloudflare Web Analyticsは、設定不要で高性能な解析基盤を提供してくれます。 APIを活用することで、サイトの健康状態をプログラムから「自律的に」監視する体制が整いました。 パフォーマンスとプライバシーを両立させたい静的サイト運営者には、最適な選択肢と言えるでしょう。