0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

昔懐かしいアクセス解析CGIを現代風に作ってみた

Last updated at Posted at 2026-01-06

出来たものがこちらです。

スクリーンショット 2026-01-06 095547.png

アクセス解析といえばとりあえずGoogleAnalyticsを入れとけという感じでしたが、ふと思いついて共用レンタルサーバで動くCGI型アクセス解析があってもいいのかも。と作ってみました。

なにがはいっているの?

スクリーンショット 2026-01-06 112901.jpg

たったこれだけです。installとsqlは消しちゃっていいので、サーバに置くのはconfig/tracker/cron_aggrigate/dashboardの4つだけです。

既存のアプリケーションに気軽に解析機能を追加提供したい

ユーザー投稿型サービスを運営するときなどに、ユーザーさんにアクセス数を提供したいことはありませんか?私はあります。しかし、いざ提供しようとすると、地味に面倒なんですよね。アクセス解析って1アクセス毎にDBに書き込むから、メインアプリケーションのついでに実装しちゃうとアプリケーションが重くなったり。

あとはアクセス解析を作ったことがないと、ユニークユーザをどう定義するかとか、botの連続アクセスをどうするかとか迷いますよね。そういう地味に面倒な部分をこちらに逃がしてあげて、後はメインアプリケーションから集計済みのpageviewだけ取得してあげたらなんと簡単にCGMにアクセス解析機能を提供してあげることができます。

グラフを出したければdashboard.phpのコードをコピペしてカスタマイズすればいいですし、pageview以外のカスタムイベントも計測することができます。

かといってMatomoみたいなやつは高機能すぎる

PHPのアクセス解析で言えばMatomoが有名です。しかし高機能すぎて、既存のアプリケーションにちょい足ししたい場合には学習コストが大きすぎると感じました。

どちらかといえば、umamiとかを参考にしました。

umamiはNext.jsとPostgresqlなので要件があればこちらもおすすめです。ですが、レンタルサーバで動かないことと、これよりももっともっとシンプルにしたいという風に考えました。

Google Analytics/Google Tag Manageと併用してね

とはいえ、解析の集計は日単位ですし、細かい情報も集計していないので(ブラウザ種別とか・画面解像度とか)そういうのはGAでとってもらって、あくまでメインアプリケーションから使いやすい解析データ機能という位置づけでお願いします。

余談:アクセス解析をどういうアーキテクチャで実装するか

一昨年からアクセス解析に関してはたびたび様々なOSSのコードを読んで学んできたのですが、だいたいはClickHouseなどの列指向DBにデータをため込んで、適宜集計するという方式が多かったと思います。

しかしながら、自前でそのようなデータストアのインフラをメンテするのが面倒ですし、こういうデータ蓄積系はどこか1か所で止まってしまうとその期間のデータが集計できないという取り戻しがきかない系の問題があります。

そのため、個人的にもうちょっと頑張る系のサービスでは、キューとPubSubとBigQueryを使った比較的本格的なAnalyticsサービスを実装しています。今回はそこまでやりたくない、お金もかけたくない要件があったため、既存のレンタルサーバなどで動作する&集計結果が手元のDBにたまって取得しやすい「昔のCGIスタイル」で実装することにしました。

よければぜひ使ってみて感想をいただければ嬉しいです。あと需要があればCloudflare Workers+Turso版に移植してもいいなと思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?