ブログの累計PV表示、実はvisitsで作った話


ブログのトップページに「累計PV」を出したくなった。

理由は単純。

数字が見えると続けやすいから。

更新カレンダー、運営日数、記事数。そこにアクセス数も並べたら、ブログが少しだけゲームっぽくなる。

ただ、作ってみたら最初の想定と違った。

「累計PV」と書いているけど、中身は厳密なPVではない。

Cloudflare Web Analytics の visits を使っている。

最初にやりたかったこと

やりたかったのはこれ。

私以外の、累計PV数を自動で数えて、トップページに表示する。

Google Analytics は入れていない。Cookie同意まわりが面倒だし、個人ブログでそこまで細かく追う気もない。

今動いているのは Cloudflare Web Analytics。

Cloudflareがサイトの入口でざっくり数えてくれる仕組み。Cookieを使わないので、個人ブログにはちょうどよい。

Claude Code に頼んで、CloudflareのAPIから数字を取らせた。

API は、サービスの管理画面をプログラムから読むための入口みたいなもの。

取れなかった数字

最初は「自分以外の累計PV」を取りたかった。

でも、ここで制約が出た。

CloudflareのAPIでは、ページビュー数そのものは取れる。ただし、私がやりたかった条件付きの取り方ができなかった。

たとえば、

  • 日本国内だけ
  • 自分のアクセスをなるべく除く
  • 累計で出す

こういう条件を付けようとすると、使える数字が変わる。

Cloudflare側で国ごとの絞り込みに使えるデータでは、PVではなく visits が取れる。

visits は、ざっくり言うと「訪問数」。ページを何回開いたかではなく、「人と日付に近い単位」で数える数字。

PVとは違う。

でも、個人ブログのトップに置く数字としては、むしろそっちのほうが落ち着いている気もした。

ページを10回読み直した1人を10として数えるより、訪問の手応えとして見るほうが近い。

名前だけが少しズレた

問題は、画面上のラベル。

トップページには「累計PV」と出している。

でも中身は国内visits。

これは正確にはズレている。

ただ、非エンジニア向けのブログで「累計国内visits」と出しても意味が分からない。私自身も、読者として見たら一瞬止まる。

なので、現時点では「累計PV」という表示にしている。

厳密な解析レポートではなく、ブログ運営のざっくりした手応えを見るための数字。

そう割り切った。

今後、気になるなら「累計訪問」などに変える余地はある。

自動更新の仕組み

作った仕組みはこう。

  1. GitHub Actions が毎日朝に動く
  2. Cloudflare Web Analytics から国内visitsを取る
  3. pv-stats.json に累計値を書き込む
  4. ブログを再ビルドする
  5. Cloudflare Pages に反映する

GitHub Actions は、GitHub上で決まった作業を自動実行する仕組み。

ブログ記事の予約公開にも使っている。

今回も同じ流れに乗せた。

毎日JST 7:00に再ビルド。記事の予約公開と、累計数字の更新をまとめて処理する。

トップページには、運営日数、連続更新、記事数、累計PVが並ぶようになった。

数字としては小さい。

でも、ゼロではない。

途中でデプロイが止まった

実装自体はすぐできた。

でも、GitHub Actions の途中で止まった。

原因は、依存パッケージの高リスク警告。

Security audit という自動チェックが、古い部品に問題があると判断してデプロイを止めた。

面倒ではある。

でも、止まって正解だった。

こういうチェックがないと、見えない問題を抱えたまま本番に出してしまう。

npm audit fix で修正して、再度デプロイ。最終的には本番にも反映された。

学んだこと

アクセス解析の数字は、名前が似ていても中身が違う。

PV、visits、requests。

全部「アクセス数っぽい数字」に見える。でも意味は違う。

今回の学びはこの3つ。

  • 欲しい数字と、実際に取れる数字は違う
  • 厳密さより、目的に合う数字を選ぶほうが大事な場面がある
  • 表示する数字は盛らない。取れた数字の性質を理解して使う

個人ブログの数字は、見栄を張るために出すものではない。

続けるための目印。

それくらいの距離感でちょうどよい。