Web Analytics

Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

umamiをHerokuでホストする - 使い難いGA4に代わる、使い易いアクセス集計

|

2023年7月1日のUA (Universal Analytics)終了*1に備えて、GA4 (Google Analytics 4)への移行が進んでいる。

  • セッションに基づく分析から、ユーザーに基づく分析へ
  • イベント単位の分析へ

といった情報が、Googleを代弁するかのように発信され続けている。

単一のユーザーがPCからスマートフォンまで、多彩な端末を使用する現在、アクセス解析にこのような大規模な変化をもたらすことは、長期的な視点ではwebをより良くするものであり、必要とされる変化である、とGoogleは考えているのかもしれない。

あるいは、このようにも考えられる。もはやセッションに基づいたデータ集計と統計情報はGoogleにとっては重要ではなく、ユーザーに基づいたデータ集計と統計情報を必要としている。だから、そのような情報を収集できるようにGA4を開発し、半ば強いるかのように、それをユーザーに使わせることで、Googleは目的としている情報を得る。

いずれにせよ、私にとっては大きなお世話なのだ。もちろん、このサイトにGA4は導入済みだが、それは数か月、1年単位の集計、分析にこそ有意義であれ、日々の状態確認、

  • 今日、どのようなサイトからリンクされた
  • 今日、どのようなサイトからアクセスされた
  • 今日、どのようなページがアクセスを集めている

このような、特に”今日”にフォーカスした集計を確認するのに、GA4は全く向いていない。「できない」と言っても過言ではないほどだ。
データ集計が追いついていないのだろう。作成したレポート*2を参照したところで、翌朝7時に「昨日」のレポートすら表示できないのだ。

そこで試してみたのがumami*3だった。特に次の観点から、先述の欲求を満たすのに適したアクセス解析ツールだ。とても使い心地が良い。

friendlier, privacy-focused alternative to Google Analytics

Umami collects only the metrics you care about and everything fits on a single page

この投稿では、Herokuの無料枠を利用してumamiをホストするための手順を紹介する。

前提

この投稿で紹介する手順は、umamiのインストール文書に掲載されている「Running on Heroku」*4を改変したものだ。一部の作業内容、順序が異なっている。

本来であれば、インストール文書に掲載されている「Deploy to Heroku」が機能する。それが機能しなかったために手動対応した過程を、この投稿では説明している。

最初は「Deploy to Heroku」を試し、それが機能しなかった前提で、この投稿で紹介する手順を試してほしい。

ここで紹介する手順は、次の環境が整っていることを前提としている。この投稿では、これらについて説明しないので、各自で対応してほしい。

  • GitHub*5を利用できること
  • Heroku*6を利用できること
  • Heroku CLI*7を利用できること

手順

GitHub

まずumamiレポジトリを、ユーザーのGitHubへforkする必要がある。umamiレポジトリを参照し、”Create new fork”を選択する。

github.com


Heroku - new app

Herokuにログインし、新規アプリを作成する。

New > Create new app

"Deployment method"として”GitHub”を選択し、”Connect to GitHub”からumamiレポジトリを選択する。
”Connect”を選択する。

ここまで操作したら、一旦この画面の状態でストップしておく。

Heroku - PostgresSQL

データベース作成

次にumami用のデータベースを設定する。次の操作で”Heroku Postgres”を導入する。”Plan name”では”Hobby Dev - Free”を選択する。

Overview > Configure Add-ons
Attached as DATA BASE > This app as DATA BASE

ここで、先に一時停止していたappの画面に戻り、umamiをデプロイする。

Manual deploy > Deploy Branch


テーブル作成

データベースに必要なテーブルを生成するためのSQLスクリプトを実行する。この操作はHeroku CLIを利用したコマンドとして実行する。そのため、PowerShellやTerminalのようなCUIを介して操作する。

まず実行するコマンドのテンプレートを紹介する。

heroku run psql -h [Host] -d [Database] -U [User] -f [File] -a [App Name]

[]で指定するパラメータを、各自の必要な値に置き換える必要がある。これらの値は、”Database Credentials”で確認できる。

Settings > Database Credentials

Credentialsの各項目、コマンド上のオプション、パラメータは、次のように対応している。

Credentials option parameter
Host -h Hostに指定された値
Database -d Databaseに指定された値
User -U Userに指定された値

”File”、”App Name”は、”Database Credentials”には掲載されていない。”File”には、次に指定する値を代入する。
”App Name”は、先に対応した「Heroku - new app」で指定した名前を代入する。この投稿の添付画像では”espio999-umami”と指定されているが、実際の値は各自で異なる。

option parameter
File -f sql/schema.postgresql.sql
App Name -a 「Heroku - new app」で指定した値

準備が整ったら、出来上がったコマンドを実行する。
コマンド実行中にパスワードを尋ねられる。それはCredentialsに記載されている”Password”の値の入力を要求されている。Herokuアカウントのパスワードではないので、勘違いしないように。


umami - 監視対象サイトの登録

ここまでの作業が完了すると、umamiが機能する。”Open app”でumamiを起動する。

初回ログインでは、次のアカウント、パスワードを使用する。これらはログイン後、任意のものへ変更することができるし、変更しておくべきだ。



Username admin
Paswword umami



監視対象となるwebサイトを登録するため、”Add website”を選択する。この投稿では、このブログを登録している。

さらに”Go to settings”から、監視される側のサイトへ実装する追跡コード(監視用のscriptタグ)を取得する。

追跡コードは、監視対象となるwebサイトやブログ内の適切な場所へ挿入する。追跡コードの挿入後のアクセスから、umamiの記録が始まる。
ダーク・テーマや、集計対象を特定期間、リアルタイムで切り替えることもできる。

umamiのデータベース

umamiのデータベースは次の5つのテーブルで構成されている。

account umamiのユーザーアカウント マスター・テーブル
event 監視対象イベント マスター・テーブル
pageview ページビューの記録
session セッションの記録
website 監視対象サイト マスター・テーブル

umami/schema.postgresql.sql at master · umami-software/umami · GitHub

特にpageview、sessionテーブルには、監視対象サイトへのアクセスが生じるたびに、レコードが追加されていく。

DBレコードの削除

Herokuでは、PostgresSQLの無料枠として、最大1万レコード(10000 rows)の上限が設けられている。7000レコードを超えると、Herokuから警告のメールが届く。Herokuの無料枠で運用し続ける前提では、上限に達する前に不要なレコードを削除する必要がある。

削除対象となるのはpageview、sessionテーブルのレコードだ。「テーブル作成」と同じ要領でSQLを実行する。例えば、直近1週間(7日間)のデータを残し、それ以前のデータを削除する場合、次のSQLを実行する。

delete from pageview where created_at < now() - interval '7 days';
delete from session where created_at < now() - interval '7 days';

「テーブル作成」と同じように、このようなSQLを記録したファイルを実行しても良いし、Heroku上で直接実行しても良い。その場合、「テーブル作成」とは異なり、次のように”-f”無しでログインすること。ログイン後に、先述のSQLを直接実行する。

heroku run psql -h [Host] -d [Database] -U [User] -a [App Name]