
ブログの管理画面にアクセスのグラフを1本表示させたいだけなのに、Google Cloud Consoleを操作しているうちに強烈な面倒くささが襲ってきた。
プロジェクトを作って、APIを有効化し、サービスアカウントのJSONキーを落として権限を紐付ける…
初期設定だけでも面倒なのに、時間が経ってトークンが期限切れになるたびにダッシュボードのグラフがプツンと途切れるのが一番のストレスだった。
そのたびにコンソールにログインしてキーを再発行し、設定を直す羽目になる。
静かに記事を書きたくて作った個人ブログなのに、アクセス推移を見るためだけにこんな苦労を続ける必要があるのか?
もっと手離れが良くて楽な方法はないものかと真剣に考え始めた。
1. 「そもそもインフラ、全部Cloudflareじゃん?」
ふと我に返ってみると、SKBEは最初からCloudflare PagesとD1データベースの上で動いている。
そしてCloudflareには、完全無料で使える独自のアクセス解析「Cloudflare Web Analytics (CFA)」が標準で用意されている。
サイトタグとトークンを1つ設定しておくだけで、OAuthの期限切れや定期的なキー更新に煩わされることもなく、バックグラウンドで黙々とデータを集めてくれる。
「自分のインフラがすべてCloudflare上にあるんだから、わざわざ外部のGoogle APIの期限切れに怯えるより、CFAをブログのメイン統計として組み込んでしまった方が合理的じゃないか?」と思った。
2. 軽い気持ちで始めたら、いつの間にか大ごとに
最初の計画はごくシンプルだった。CFAのAPIを叩いて、管理画面に数字をいくつか並べ、グラフを1本出して終わらせるつもりだった。
しかしコードを触り始めると、開発者特有のこだわりが発動して、やるべきことが次々と増えていった。
- 管理画面に直接トークンを置くことへの抵抗感:
CFAからデータを引っ張るには、Cloudflare APIトークンにAnalyticsの読み取り権限を付与する必要がある。初期セットアップで権限設定の手間が1つ増えること自体、正直あまり納得がいっていなかった。
その上、せっかく発行したトークンをWebに公開されるPagesの環境変数にそのまま置いておくのは、セキュリティ的にもかなり抵抗があった。
そこで、外部公開ルートを一切持たない非公開のCron Worker(cfa-sync)を独立して作成した。
このWorkerが毎時間バックグラウンドでD1にスナップショットを放り込み、管理画面はトークンを持たずにD1だけを読み取る構成にした。攻撃される隙をまた1つ消し去った形だ。
- Workerの呼び出し回数は意地でも最小化:
開発中に一番神経を尖らせたポイントの1つだ。
CFA APIからデータを取得してD1に保存する際、無駄にWorkerの呼び出し回数が増えるのだけは絶対に避けたかった。
そのため、過去7日分のデータを同期する際も、Worker 1回の実行にすべてひとまとめにして処理を完結させた。
- え? 20人いたはずのアクセスがなぜ0人に?:
テスト運用中、当日に20人と記録されていた訪問者数が、翌日になると0人にリセットされるという奇妙な挙動に遭遇した。
過疎ブログにおいて、自分の小さく大切なアクセス数が消滅するのは到底看過できない。そこで当日データに限り、前回の値より小さい場合は上書きしない単調増加ガードを仕込んだ。
- D1に蓄積されたデータをExcelで出力する:
日ごとのスナップショットがD1に溜まってくると、これをExcelに落としてローカルで集計できるようにしたくなってきた。
単一のCSVに全部突っ込むとディメンションが混ざって見づらいため、SheetJSを組み込んでタブごとに綺麗に整理されたマルチシート形式のXLSXで出力できるようにした。
- サブブログのデプロイパイプラインにcfa-syncを追加:
メインブログだけでなくサブアカウントにも同期Workerを反映させる必要があるが、アカウントごとに手動でデプロイするのは本来の「楽をしたい」という趣旨に反する。
そこで既存のマルチアカウント同期スクリプトにcfa-syncを組み込み、未デプロイのアカウントがあれば自動でデプロイされるようパイプラインを拡張した。
3. 使ってくれる人がいるかは分からないけれど
「Google APIの認証管理が面倒」という極めて個人的な理由から始まった作業が、気がつけばv1.0.1.3という1つのバージョンを更新する規模になっていた。
振り返ってみると、大層な目標があるときよりも、自分が使っていて感じる小さな煩わしさを自分の手で解消するときの方が、一番集中してコードを書いている気がする。
もうGoogle Cloud Consoleを行き来する必要もなければ、トークンの期限切れを気にする必要もない。
毎正時、見えないところで静かにD1へデータが蓄積され、必要なときはいつでも綺麗なExcelファイルで書き出せる。
このエンジンをフォークして使う人が果たして何人いるのかと思うと、Excelのシートまで律儀にタブ分けした自分がおかしくもあるけれど…
まあ、オープンソースとして公開している以上は最低限の責務だと割り切って、誰か1人でも役に立てばそれで十分だ。
その「1人」が存在するかどうかは、甚だ怪しいところではあるが…(笑)
コメント 0件
コメントを投稿するにはログインが必要です。