ブログの解析を実装する

2025年も残すところあとわずかとなり、26日から作り始めたこのブログの機能は一通り完成した。
このブログリニューアルで、はじめて「解析」を真面目に考えることになった。
今回はこの3日間のダイジェストとして特に印象に残った解析機能の設計まわりについてまとめようと思う。
解析を始めるきっかけ
最初にブログを始めたのは随分と前に遡るけれども、それまでGoogle Analyticsは利用してこなかった。
その頃はプライバシーを気にする以前に、ブログのPV自体を気にすることはなかった。
ただ静的サイトジェネレータでサイトを作ることだけが目的で、解析は二の次だった。
全く関心がなかったわけではないが、ブログの解析にわざわざVPSを用意したくはなかった。
今回ブログのリニューアルに伴って、ChatGPTに質問したらフリーでも解析できるようになったので
始めてみることに決めた。
プライバシーファースト
作ってみて実感したのだが、プライバシーを尊重しようとすると次の情報は極力収集してはならない:
収集すべきでないもの
| 項目 | 理由 |
|---|---|
| IPアドレス | 個人識別性が高い |
| UserAgent | 指紋化の温床 |
| Cookie / localStorage | 追跡そのもの |
| 永続ID | 再識別可能 |
これはほぼ全員が一致する NG。
収集すべきもの
| 項目 | 値 |
|---|---|
| path | /blog/hello-world |
| referrer | https://example.com/ |
| count | 1 |
収集できるもの:
- 記事別 PV
- リファラ別 PV
なぜ収集するべきではないのか
👉 取ること自体が悪ではない
👉 しかし 「なぜ必要か」を言語化できないなら取らない
この意見に則り、私はプライバシーポリシーで明言する方法を選択した。
収集しないことでよくも悪くも不正が起きてしまうと思う。
例えばサーバーに連続で送信される同一のPOSTリクエストを想像してほしい。
――直前のリクエストと直後のリクエストを判定できないので
それが押し間違いなのか、悪意のあるものか、あるいは同一人物によるものかすら判断できない。
そう考えるとプライバシーポリシーを謳っている会社は送信されているデータを
一切判断していないのかというとそうでもないらしい。
「IPを収集していない」の正確な意味
多くの人が混同しがちだが、技術的には明確な違いがある。
❌ 収集している状態
- IP を保存している
- IP をログに残している
- IP を後から参照できる
- IP を分析に使っている
✅ 収集していない状態
- IP を一時的に評価する
- 判定後すぐ捨てる
- 保存しない
- 再利用できない
bot 判定の役割は「分析」ではなく「防御」
- prefetch
- OGP crawler
- Lighthouse
- 不正アクセス
👉 analytics に保存する必要はない
👉 Worker 内で弾くだけでよい
記録しないが、利用はする
これが最もクリーンな方法だ。
ただしいくら明言していてもIPアドレスを送信しているコードが含まれると、
サーバー側でそれをしていない証明にはなりえないと思う。
そのため私は最初から 「取らない」設計 を選択することにした。
「取らない」設計のメリット
技術的メリット
- 設計が単純
- クエリが簡単
- 将来の後悔がない
思想的メリット
- プライバシーポリシーが短く書ける
- 説明責任が軽い
- 「見ていない」ことを保証できる
「取らない」設計の理由
例えば「国」の情報を取得する場合:
- 国別に記事を書き分ける?
- 翻訳を最適化する?
- 法規制を変える?
👉 必要はない
例えば「ページリロードを防ぐ」場合:
- 誤ってリロードする人は少ない
- リロードしてまで like 連打する人はほぼいない
- bot は IP 以外で弾ける
- 見る側も書く側も気にしない
👉 そこまで防ぐ価値はない
ただしこれはあくまでこのブログが個人サイトであるという理由からであり、
通常はサービスの規模によってIPアドレスを保存する・しないを判断するべきである。
まとめ
今回の判断を踏まえると:
- analytics / like は おまけ
- 正確性を追わない
- 他用途に広げない
- 消しても後悔しない
得られるもの
- 説明が圧倒的にシンプル
- プライバシー宣言に一点の曇りもない
- 実装が軽い
- 「おまけ」としての立ち位置が明確
失うもの
- 正確さ(もともと期待していない)
- 悪意ある操作への耐性(実害はほぼない)
👉 ブログの性質と完全に一致
これらを踏まえて解析機能を使っていこうと思う。