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

OpenAnalyticsは、GitHub上で公開されているオープンソースのWebアナリティクス製品です。pnpm monorepoとして提供され、AGPL-3.0ライセンスの下で、自社ハードウェアへの自己ホストを想定して構築されています。設計思想はプライバシーファーストで、クッキーを使用しない集計-onlyの測定を実現しています。クッキーも指纹(フィンガープリント)もクロスサイト識別子も使用せず、生のIPアドレスは一切保存されません。訪問者の識別子は塩付きハッシュで、毎晩ローテートされるため、訪問履歴は「1回の訪問」の長さしか保たれ、「1人の人物」の全履歴にはなりません。Do Not TrackやGlobal Privacy Controlも、データを何も書き込む前にコレクター段階で尊重されます。都市レベルの地理情報はサイトごとにオプトイン方式で、ホスト上のデータベースに対して解決されるため、外部への照会は一切行われません。著者によって運用されているホスト型インスタンスは同じコードをgetopen.soで動かしています。 モノレポは複数のアプリケーションに分かれています:バイト予算がCIによって強制される軽量なブラウザトラッカースニペット、検証・サニタイズ・レート制限・キューイングを行うコレクター、キューをDrainしてClickHouseへ書き込み、セッション処理・ロールアップ・エクスポート・メール・削除を担当するワーカー、認証・サイト・キー・共有・イベント定義・ファネル・ウィジェット・収益・AIアシスタント・MCPサーバーをカバーするAPIコントロールプレーン、Ed25519署名付きクエリエンベロープを検証しClickHouseへの読み取りを唯一許可するクエリゲートウェイ、ライブダッシュボードの背後にあるSSEストリームを提供するリアルタイムアプリ、Next.js製のダッシュボード、そしてサイト設定・統計・デバイスフローログイン用の`oa` CLIです。共用パッケージにはドメインロジック、PostgreSQLおよびClickHouseのスキーマとマイグレーション、Redis/Valkey、認証、OpenAPI契約、観測可能性、統合モジュールが含まれます。 ストレージは3つに分散されています:コントロールプレーン用PostgreSQL、イベント・ロールアップ用ClickHouse、耐久型のイベントキュー用Valkey、および一時的なリアルタイムキャッシュ用Valkeyです。報告された機能には、ページビュー、カスタム・属性駆動型イベント、セッション、Web Vitals、ファネル、サイト別リテンション、埋め込み可能ウィジェット、公開シェアリンク、自身のStripeアカウントからの収益分析、CSV/JSONインポート・エクスポート、MCPサーバー、CLIが含まれます。ダッシュボードでは、プレゼンスキャッシュから取得したリアルタイム訪問者リスト、訪問者ごとのジャーニートレーls、および都市レベルの位置を示すオプトイン式のライブグローブも表示されます。 いくつかのアーキテクチャルールは慣習ではなくCIによって強制されます:Webアプリは共用契約パッケージのみをインポートでき、フロントエンドとバックエンド間の唯一の接合部はOpenAPIドキュメントです。ClickHouseへの到達経路はクエリゲートウェイのみが許可され、トラッカーのサイズ予算を超える変更はビルドを失敗させます。さらにCIジョブは実際のデータベースに対して、PostgreSQLスキーマに請求関連テーブルが含まれていないことを確認します。 自己ホスティングの詳細はSELF-HOSTING.mdに記載されており、ジェネレータースクリプトと`docker compose up -d`1コマンドで自動TLS付きで起動できます。Linuxホスト、Docker、4つのDNSレコード(app・api・c・rtの各サブドメイン)、約4GBのRAM、25GBの空きディスクが必要です。リリースではghcr.ioへ10イメージがpublisされ、インストールはビルド而非プルです。arm64ホストまたはブランチビルドの場合は画像をローカルでコンパイルします。`upgrade.sh`はリリース間を移動し、スナップショットを`rollback.sh`が必要とする形式で保存します。マイグレーションは不可逆であり、公式の戻り方は restore です。ソースから実行する場合は、コンパイル済みマイグレーションランナーより前にビルドする必要があります。AIアシスタントとオブジェクトストレージのみがオプションで、未設定の場合はこれらの機能は自己抑制されます。CI風テスト・検証スイートはインフラなしで動作します。 地理情報データは同梱されません(READMEによれば60MBのダウンロードで1ヶ月以内に陳腐化する)。CC BY 4.0の下で利用されるDB-IPデータベースを取得するヘルパースクリプトが用意されています。コントリビューションはプルリクエスト経由で行われ、一度限りのCLAにより著作権は貢献者に残ります。コードはAGPL-3.0で、変更版をネットワークサービスとして実行する場合はそのソースをユーザーに提供することが求められます(README記載)。プロジェクト名およびホスト型サービスのドメインはライセンス付与の対象ではありません。