Google Analyticsは、Webサイト全体のアクセス傾向やコンバージョンを分析するには非常に強力や。
ただ、個人サイトや技術ブログを運営していると、もっと素早く、もっと具体的に確認したい情報もある。
「どの検索サイトやSNSから来たんやろ?」
「Blueskyへ投稿した記事は、実際にどれくらい読まれたんやろ?」
「ひとつの訪問で、どの記事をどんな順番で読み、どのリンクを押したんやろ?」
「企業、大学、研究機関などのネットワークから、どの記事が読まれたんやろ?」
「気になった組織や訪問者へ、自分用の名前やメモを残せへんやろか?」
巨大なマーケティング基盤を構築したいわけではない。
管理画面を開いたときに、
- どの記事が読まれたか
- どの国・地域から来たか
- どのASN・ネットワーク組織に属するIPか
- どの検索エンジン・SNS・外部サイトから流入したか
- どのUTMキャンペーンから訪問したか
- ひとつのセッションで、どのページをどの順番で閲覧したか
- どの外部リンクやダウンロードが利用されたか
- 滞在時間やスクロール率
- 人間によるアクセスかBotか
- どの組織や訪問者を継続して確認したいか
- 自分が付けたラベル・メモ・タグで情報を整理できるか
といった情報を、自分のWebサーバー内で確認・整理したい。
そんな目的で開発しているのが、セルフホスト型アクセス解析ツール「Tenyen Analytics」や。
現在は、
- WordPress向けのTenyen Analytics for WordPress
- 通常のPHPサイト向けのTenyen Analytics Native
の2種類をGitHubで公開しているで。
Tenyen Analyticsとは
Tenyen Analyticsは、アクセス解析データを導入先のWebサーバーとデータベースへ保存し、管理者自身の環境で分析するツールや。
外部のアクセス解析サービスへ、解析目的だけで計測データを全面的に送信する構成ではない。
Google Analyticsの完全な代替やMatomoの縮小版を目指すのではなく、
軽量なアクセスログ解析+組織インテリジェンス
を製品の中心に据えている。
特に、
「どの組織のネットワークから、どの記事が、どのように読まれたか」
を確認し、その発見へ管理者自身の意味付けを加えられる解析ツールとして育てているで。
WordPress版・Native版ともにv0.6.2へ更新
WordPress版とNative版の両方を、v0.6.2へアップグレードした。
これまでの主な進化は、次のようになる。
- v0.6.0:セッションと匿名訪問者を軸に、アクセスを時系列の「線」として分析
- v0.6.1:流入チャネル、UTM、クリック、ダウンロード、404、カスタムイベントをセッションへ統合
- v0.6.2:組織ウォッチリスト、管理者ラベル、メモ、タグ、保存ビューを追加
v0.6.2では、解析データを眺めるだけでなく、管理者が気になった対象へ別名・メモ・タグなどを付け、継続的に整理できるようになったで。
v0.6.2の主な新機能
解析対象へ管理者独自の情報を追加
既存のアクセス解析データへ、管理者専用の情報を追加できる。
- 表示名・別名
- メモ
- タグ
- 組織のウォッチ状態
これらは、収集した生データそのものを書き換える機能ではない。
例えば、ASNへ登録された元の組織名は保持したまま、管理者が分かりやすい別名を追加できる。
元の組織名:
Research Organization Example
管理者の表示名:
研究機関・Linux関連記事
タグ:
research
linux
repeat-access
メモ:
Ubuntu関連記事への複数回アクセスを確認
別名を付けても、ASN番号、GeoLite2の組織名、組織分類、アクセス履歴などの元情報は上書きされない。
複数の解析対象へラベル・メモ・タグを付与
v0.6.2では、管理者による意味付けを複数の解析対象へ適用できる。
- ASN・ネットワーク組織
- 匿名訪問者
- 記事・固定ページ・URL
- 参照元ドメイン
- UTMキャンペーン
- 外部リンク先
例えば、匿名訪問者へ「Linux記事を継続閲覧」、キャンペーンへ「Bluesky告知」、外部リンク先へ「GitHubリポジトリ」といった表示名やタグを付けられる。
管理者メモはプレーンテキストとして保存し、公開ページや解析用JavaScriptへ出力しない。
再利用可能なタグ
タグは、一度作成したものを複数の対象で再利用できる。
important
research
education
linux
repeat-visitor
campaign
download
タグ名による検索や絞り込みにも対応し、管理者が独自に作った分類で解析データを整理できる。
色は視覚的な補助として利用するが、色だけに依存せず、必ずタグ名を表示する設計や。
組織・ASNウォッチリスト
継続して確認したいASN・ネットワーク組織を、ウォッチリストへ登録できるようになった。
ウォッチ対象には、
- ウォッチ中の表示
- 管理者別名
- メモ
- タグ
- 最近のアクセス
- セッションや閲覧ページ
などを組み合わせて確認できる。
組織一覧や関連する解析画面からウォッチ状態を切り替え、ウォッチ中の組織だけに絞り込むこともできる。
なお、v0.6.2のウォッチリストは、管理画面で注目対象を整理するための機能や。
メール通知、再訪通知、リアルタイム通知などは、このバージョンには含まれていない。
ASN・組織情報についての注意
GeoLite2 ASNから取得できるのは、接続元IPアドレスが登録されているASN番号とネットワーク組織名や。
特定の組織名が表示されたとしても、
- その組織の職員本人が閲覧した
- その組織が公式にアクセスした
- 閲覧者の勤務先・所属先が確定した
- 一つのIPアドレスが一人の人物を表す
という意味ではない。
組織ウォッチリストや管理者ラベルは、アクセス元ネットワークを調査・整理するための補助情報として利用してな。
保存フィルター・保存ビュー
アクセス履歴、セッション、コンテンツ、組織、流入元、キャンペーン、イベントなどで設定した検索条件を、名前付きの保存ビューとして再利用できるようになった。
例えば、次のような条件を保存できる。
- 日本の大学・研究機関からのHumanアクセス
- Blueskyキャンペーンから流入したセッション
- Linux記事から発生したダウンロード
- ウォッチ中の組織によるアクセス
- 404を発生させたBot
- 特定タグを付けた匿名訪問者
保存ビューには、画面に応じて次のような状態を保持できる。
- 検索条件
- 期間
- Human/Bot
- 並び順
- 表示件数
- 表示列
- タグ・ウォッチ状態
「直近7日」のような相対期間は、保存ビューを開いた時点から再計算する。
開始日と終了日を直接指定した場合は、その日付を固定した条件として保存する。
ピン留めと既定ビュー
よく使う保存ビューはピン留めできる。
また、各解析画面で最初に適用する既定ビューを指定できるため、毎回同じフィルターを設定し直す必要がない。
保存された条件に、将来のバージョンで利用できなくなった項目が含まれている場合は、画面全体を壊さず、利用可能な条件だけを読み込む設計としている。
ラベル・タグ・ウォッチ対象の集中管理
各解析画面から編集できるだけでなく、管理者が付けた情報をまとめて確認する管理画面も用意した。
- ウォッチ中の組織
- 別名やメモを付けた対象
- タグと利用件数
- 保存ビュー
使われているタグの確認、タグ名の変更、不要なタグの削除、保存ビューの整理などを一か所で行える。
タグや管理者メタデータを削除しても、元のページビュー、セッション、イベント、組織情報などの解析データは削除されない。
既存画面へ管理者メタデータを統合
別名、タグ、ウォッチ状態などは、専用画面だけに閉じ込めず、既存の解析画面へ統合している。
- アクセス履歴
- セッション
- 匿名訪問者
- コンテンツ
- 流入元
- キャンペーン
- イベント
- 外部リンク・ダウンロード
- ASN・組織
解析中に気になった対象を見つけたら、その画面から別名、メモ、タグ、ウォッチ状態を編集できる。
元の組織名、URL、参照元、キャンペーン値なども併記するため、管理者の別名だけを見て元データが分からなくなることはない。
v0.6.1で追加した流入・UTM・イベント分析
v0.6.1では、セッションの入口と途中で発生した操作を分析できるようにした。
流入チャネルの分類
参照元URLとUTM情報をもとに、アクセスを次のチャネルへ分類する。
- Direct
- Organic Search
- Social
- Referral
- Internal
- Campaign
- Unknown
検索エンジン、SNS、外部サイト、サイト内移動、UTMキャンペーンなどの違いを確認しやすくなる。
UTMキャンペーン分析
次の標準的なUTMパラメーターを解析できる。
utm_source
utm_medium
utm_campaign
utm_content
utm_term
例えば、Blueskyへ記事を投稿するときに、次のようなURLを使う。
https://example.com/article/
?utm_source=bluesky
&utm_medium=social
&utm_campaign=tenyen_release
セッション数、推定訪問者数、ページビュー数、直帰率、推定エンゲージメント時間、入口ページ、人気コンテンツ、イベントなどをキャンペーン別に確認できる。
セッションへ最初に入った流入情報を基準とする、ファーストタッチ方式を採用している。
イベント分析
ページビュー以外の操作もイベントとして記録・分析できる。
- 外部リンクのクリック
- ファイルのダウンロード
- 設定に応じた内部リンククリック
- 明示的に指定したボタンクリック
- 明示的に指定したフォーム送信
- 404ページ
- 任意のカスタムイベント
イベント種別、イベント名、発生回数、セッション数、推定訪問者数、発生ページ、リンク先ドメイン、Human/Botなどを確認できる。
公開JavaScriptカスタムイベントAPI
サイト固有の操作も、任意のカスタムイベントとして送信できる。
window.TenyenAnalytics.trackEvent('radio_play', {
station: 'example-station',
server: 'primary'
});
window.TenyenAnalytics.trackEvent('stream_server_change', {
station: 'example-station',
server: 'backup'
});
実際の呼び出し名や導入方法は、利用している版のREADMEを確認してな。
イベント名やメタデータには容量と形式の制限を設け、関数、DOMノード、HTML、深くネストしたオブジェクト、循環参照などは送信対象にしない。
フォーム内容は収集しない
フォーム送信イベントでは、フォームの識別子と表示ページだけを記録する。
氏名、メールアドレス、問い合わせ本文、パスワード、非表示フィールド、決済情報などの入力値は収集しない。
セッション経路へイベントを統合
ページビュー、engagement、クリック、ダウンロード、404、カスタムイベントを、ひとつの訪問の流れとして確認できる。
Organic Search
↓
Ubuntu高速化の記事
滞在 2分18秒/スクロール 82%
↓
Linux Dolbyの記事
滞在 1分04秒/スクロール 56%
↓
外部リンクをクリック
↓
ファイルをダウンロード
↓
離脱
クリックやイベントをページビューとして数えたり、直帰判定を不必要に変えたりはしない。
v0.6.0で追加したセッション・訪問者分析
v0.6.0では、個々のアクセスをセッションと匿名訪問者の単位へまとめ、訪問行動を時系列で確認できるようにした。
セッション一覧
ひとつの訪問について、次の情報をまとめて確認できる。
- セッション開始日時
- 最終アクセス日時
- ページビュー数
- 推定滞在時間
- 入口ページ
- 離脱ページ
- 参照元
- 国・地域
- ASN・登録組織名
- ブラウザ・OS・端末
- Human/Bot判定
匿名訪問者の詳細
既存の匿名訪問者IDを基準に、過去のセッションをまとめて確認できる。
- 初回訪問
- 最終訪問
- セッション数
- 総ページビュー数
- 主な入口ページ
- よく閲覧しているコンテンツ
- 主な参照元
- 最近利用したブラウザ・OS・端末
- 過去のセッション一覧
匿名訪問者IDは、ブラウザ内へ保存された識別子を利用した推定や。
Cookieやブラウザストレージの削除、別ブラウザ・別端末の利用などによって変化するため、同一人物であることを証明するものではない。
入口・出口・直帰・離脱
コンテンツ分析では、次のセッション指標を確認できる。
- 入口数
- 出口数
- 直帰数
- 直帰率
- 離脱率
- セッション数
- セッション当たりのページビュー
現在実装済みの主な機能
基本アクセス解析
- ページビュー
- 推定ユニーク訪問者数
- セッション数
- 滞在時間
- スクロール率
- 参照元URL・参照元ドメイン
- 流入チャネル
- UTMキャンペーン
- 記事・固定ページ別アクセス
- IPv4/IPv6対応
- User-Agent解析
- ブラウザ・OS・端末判定
イベント・行動分析
- 時系列のセッション経路
- 匿名訪問者ごとの過去セッション
- 外部リンククリック
- ダウンロード
- 内部リンク・ボタン・フォームの明示的なイベント
- 404イベント
- 任意のカスタムイベント
- イベント別ランキングと絞り込み
- リンク先ドメイン・URL分析
- 発生元ページ分析
管理者ラベル・組織インテリジェンス
- ASN・組織のウォッチリスト
- 組織・匿名訪問者・コンテンツへの管理者別名
- 参照元・キャンペーン・外部リンク先への管理者メタデータ
- プレーンテキストの管理者メモ
- 再利用可能なタグ
- タグ・別名・ウォッチ状態による検索と絞り込み
- 保存フィルター・保存ビュー
- ピン留めと既定ビュー
- 管理者メタデータの集中管理
- 元の解析値を保持したまま管理者情報を併記
IP・地域・ASN解析
- 生IPアドレスの暗号化保存
- HMACを利用したIPアドレス完全一致検索
- GeoLite2 Cityによる国・地域判定
- GeoLite2 ASNによるASN番号取得
- ASN登録組織名の表示
- 通信事業者、企業、大学、研究機関、クラウド、Proxyなどの分類
- 注目組織アクセス
- ASN・組織別ランキング
グラフ・集計
- 指定期間のPV推移
- 推定訪問者数の推移
- セッション推移
- 平均滞在時間
- 平均スクロール率
- ブラウザ・OS・端末別グラフ
- 国別グラフ
- ASN・組織別グラフ
- 人気記事ランキング
- 注目組織ランキング
- 流入チャネル・参照元ドメイン分析
- キャンペーン分析
- イベント分析
- Human/Botの分析対象切り替え
アクセス履歴
- pageviewとengagementを統合した閲覧履歴
- 生イベントログ
- Bot自動判定
- キーワード検索
- 日付範囲検索
- 国・ASN・ブラウザ・OS・端末による絞り込み
- 流入チャネル・キャンペーン・イベントによる絞り込み
- 管理者タグ・ウォッチ状態による絞り込み
- 非同期検索・非同期ページング
- 表示件数と並び順の変更
- 表示列のカスタマイズ
- 行ごとの詳細表示
- 関連セッション・匿名訪問者詳細への移動
THK Analyticsから着想を得たプロジェクト
俺は以前、セルフホスト型アクセス解析のTHK Analyticsを利用していた。
THK Analyticsには、訪問者別のログ、閲覧ページの順序、入口・出口、クリック情報などを、管理画面から直感的に確認できる良さがあった。
Tenyen Analyticsは、その使いやすい訪問行動分析の思想から着想を得ている。
ただし、THK Analyticsのソースコードをそのまま移植したものではない。
Tenyen Analyticsでは、独自のイベント構造と管理画面を基礎に、現代のPHP・WordPress環境向けとして実装している。
- WordPress版とNative PHP版
- 非同期管理画面
- セッションと匿名訪問者による行動分析
- 滞在時間とスクロール率
- 流入チャネルとUTM
- リンク・ダウンロード・カスタムイベント
- GeoLite2 City/ASN
- ASN・ネットワーク組織の分類
- 組織ウォッチリスト
- 管理者別名・メモ・タグ
- 保存フィルター・保存ビュー
- Human/Bot判定
- 生IPアドレスの暗号化保存
- HMACによるIP完全一致検索
- 英語/日本語UIとドキュメント
- GitHubによるソースコードとリリース管理
THK Analyticsで便利やった「訪問者の動きを眺める楽しさ」を受け継ぎながら、Tenyen Analyticsとして現代的に強化していくのが、このプロジェクトの目標のひとつや。
Tenyen Analytics for WordPress
WordPress版は、プラグインを有効化すると解析用JavaScriptが自動的に読み込まれる。
一般的なWordPressテーマであれば、テーマファイルへ解析タグを手作業で追加する必要はない。
WordPress側のログイン状態や404判定など、WordPress固有の情報も利用できる。
管理画面は機能別のサブメニューへ分割し、一覧・詳細・フィルター・ページングを非同期で操作できる。
保存ビューはWordPress管理者ごとに管理し、他の管理者の非公開ビューを読み書きしない構成としている。
WordPress標準の管理ダッシュボードにも、Tenyen Analyticsの概要ウィジェットを追加しているで。
Tenyen Analytics Native
WordPressを使っていないPHPサイト向けには、Native版を用意している。
解析対象サイトへ専用JavaScriptを読み込み、PHPの収集エンドポイントへアクセス情報やイベントを送信する。
ブラウザで導入できるGUIインストーラー
ZIPを展開してサーバーへアップロードし、ブラウザでインストーラーを開くと、次の設定を画面に従って進められる。
- PHP動作環境の確認
- 書き込み権限の確認
- データベース接続テスト
- サイトURL・公開URLの設定
- 管理画面アカウントの作成
- 秘密鍵・サイトトークンの生成
- GeoLite2 City/ASNのアップロード
- データベーステーブルの作成
- 埋め込みコードの表示
既存環境を保ったアップグレード
アップグレード時には、利用者が所有する次の設定・データを保護する。
config.php
data/
storage/
storage/installed.lock
管理者アカウント
暗号鍵
サイトトークン
GeoLite2データベース
既存のアクセスログ・セッション・イベント
独自の非同期管理コンソール
Native版もWordPress版と同様に、URL、再読込、ブラウザの戻る・進むに対応した非同期管理画面を備えている。
イベント、キャンペーン、流入元、アクセス履歴、セッション、ウォッチリスト、保存ビューなどを、画面全体を再読込せずに切り替えられる。
GeoLite2データベース
国・地域・ASN情報の解析には、MaxMindが提供するGeoLite2データベースを使用する。
GeoLite2-City.mmdb
GeoLite2-ASN.mmdb
GeoLite2を利用するには、MaxMindアカウントの作成と利用条件への同意が必要や。
WordPress版
次のディレクトリへ配置する。
wp-content/uploads/tenyen-analytics/
Native版
GUIインストーラー、または管理画面からアップロードできる。
大きなMMDBファイルでも共有サーバーのPOST上限へ引っ掛かりにくいよう、分割アップロードに対応している。
プライバシーとデータ保護
Tenyen Analyticsは、IPアドレス、閲覧ページ、参照元、UTM情報、ブラウザ情報、セッション・匿名訪問者識別子、設定されたイベントなどを、導入先サイトのデータベースへ保存する。
生IPアドレスは暗号化して保存し、完全一致検索用にはHMACによるハッシュ値を利用する。
管理者が追加した別名、メモ、タグ、保存ビューは、導入先データベース内の管理者専用情報として扱い、公開サイトの解析用JavaScriptへ送信しない。
カスタムイベントには容量制限と形式チェックを設け、フォーム入力値やDOM全体を収集しない設計としている。
導入するサイトの管理者は、適用される法令やサイトのプライバシーポリシーに従って運用する必要がある。
導入時には、次の内容をプライバシーポリシーへ明記してな。
- アクセス情報やイベントを収集していること
- 収集目的
- 保存する情報
- 保存期間
- 第三者提供や外部送信の有無
- 問い合わせ方法
GitHub
Tenyen Analytics for WordPress
Tenyen Analytics Native
両版ともライセンスはGPL-2.0-or-later。
ソースコード、英語版/日本語版README、英語版/日本語版CHANGELOG、配布ZIP、SHA-256チェックサムなどをGitHubで公開している。
不具合報告、改善案、Issue、Pull Requestも歓迎やで^^
Powered by 10yendama.com
Tenyen Analytics v0.6.2
Powered by 10yendama.com
© 2026 10yendama.com
WordPress版では管理画面内だけにクレジットを表示し、公開サイト側へリンクを自動挿入することはない。
今後の予定
今後も、軽量・セルフホスト・個別ログ・組織情報という中核を保ちながら、段階的に機能を追加していく。
v0.6.3系
- 管理者・自分自身のアクセス除外
- Bot・クローラー除外ルール
- 特定URIの除外
- 国・地域・組織・端末などの除外条件
- 除外ルール管理画面
- データ品質を確認するための診断
v0.7系
- CSV/JSONエクスポート
- ログ保存期間設定
- 古いログの自動削除
- DB容量・ログ件数の管理
- 日別集計と大量ログ向け高速化
- バックアップと復元
v0.8系以降
- GeoLite2の自動取得・自動更新
- ウォッチ中組織の再訪通知
- 新しい法人・教育機関からのアクセス通知
- PV・Bot・404急増通知
- 日次・週次レポート
- 複数サイト・権限管理
ヒートマップやセッション録画は、DOM保存量、個人情報のマスキング、ストレージ消費、再生UIの複雑さなどが大きく、Tenyen Analyticsの軽量性を損なう可能性があるため、現時点では優先していない。
v0.6.0で訪問を「点」から「線」として確認できるようになり、v0.6.1では、その線の入口と途中の操作まで分析できるようになった。
そしてv0.6.2では、見つけた組織、訪問者、コンテンツ、流入元などへ管理者自身の知識を追加し、あとから継続して追えるようになったで。
自分のサーバー内で解析データを管理しながら、流入元、UTM、セッション、イベント、ASN・組織アクセスを確認し、自分用のラベルや保存ビューで整理したい人は、ぜひGitHubをのぞいてみてな^^



コメント