このプロジェクトについて

Counterscaleは、ユーザーがCloudflare上でセルフホストするオープンソースのウェブ解析トラッカーおよびダッシュボードです。MITライセンスの下でリリースされており、導入とメンテナンスが容易に設計されています。READMEによれば、高トラフィック時でも運用コストはほぼゼロに抑えられるとしています。主にCloudflare WorkersとWorkers Analytics Engineによって動作します。2025年2月時点で、Workers Analytics Engineの最大保持期間は90日であるため、ダッシュボードで表示できるのは直近90日間の記録データのみとなります。また、CounterscaleはApache Arrowファイルを使用してR2バケットにデータの長期保存を行う機能を提供しています。この長期保存はデフォルトで有効になっており、CLIを通じて無効にすることが可能です。 インストールには、macOSまたはLinux、Node v20以上、および有効なCloudflareアカウントが必要です。デプロイ前に、ユーザーはCloudflare Workersのサブドメイン、アカウントでのAnalytics Engineベータの有効化、および少なくともAccount.Account Analytics権限を持つCloudflare APIトークンを用意する必要があります。デプロイはnpx wrangler loginから始まり、続いてnpx @counterscale/cli@latest installを実行します。インストーラーはAPIトークンを求め、ダッシュボードをパスワードで保護するかどうかを確認します。公開デプロイの場合は「yes」を選択することが推奨されます。「no」を選択すると、ダッシュボードは誰でもアクセス可能な状態になります。インストール後、サーバーアプリケーションはworkers.devサブドメインにデプロイされます。 ウェブサイトのトラフィックを記録するために、Counterscaleはいくつかの統合方法を提供しています。スクリプトローダーにより、デプロイされたURLでtracker.jsが利用可能になります。ユーザーは、idにcounterscale-script、data-site-id属性、およびtracker.jsのソースを指定したscriptタグを追加できます。また、トラッカーはnpmパッケージ(@counterscale/tracker)としても公開されており、サイトIDとリポーターURLで初期化できます。クライアントモジュールは、init、isInitialized、getInitializedClient、trackPageview、cleanupなどのメソッドを公開しています。別途提供されるサーバーモジュール(@counterscale/tracker/server)は、バックエンドでの解析トラッキングをサポートしています。これはXMLHttpRequestの代わりにfetch APIを使用し、DOM依存の機能を持たず、URLとホスト名パラメータを明示的に必要とします。また、fire-and-forget方式であるため、トラッキングエラーが発生しても例外はスローされません。 Counterscaleには高度なオプションが含まれています。autoTrackPageviewsをfalseに設定することで自動ページビュー追跡を無効にし、その後にtrackPageviewを手動で呼び出すことができます。また、デプロイURLをカスタムドメインの背後に配置することも可能です。CLIは、インストール、認証、ストレージ管理のためのコマンドを提供しています。installコマンドは、ワーカー名や解析データセットをカスタマイズできるアドバンスモードや、詳細なログ出力をサポートしています。認証サブコマンドにはenable、disable、rollがあり、ストレージサブコマンドにはenableとdisableがあります。アップグレードは通常、CLIインストーラーを再実行することで行われます。メジャーバージョンでは、リリースノートに記載された追加ステップが必要な場合があります。 ローカル開発において、CounterscaleのデータベースはCloudflare APIを介してHTTPで通信するCloudflare Analytics Engineデータセットのみです。ローカルのテストデータベースは存在しないため、ローカルでの書き込みは何もしない(no-op)となり、読み取りは本番環境のAnalytics Engineデータセットから行われます。Cloudflare Analytics Engineは、他の解析ツールと同様に、大規模な取り込みとクエリを低コストで実現するためにサンプリングを使用しています。