はじめに
背景
コンテンツクリエイターとして、私たちはしばしば様々なサードパーティプラットフォームに記事を公開します。しかし、コンテンツに真剣に取り組んでいる私たちにとって、公開は始まりに過ぎません。私たちは、時間の経過とともに記事の読者数を継続的に監視する必要があります。残念ながら、私たちのデータ収 集能力は各プラットフォームが提供するものに限定されており、それはプラットフォーム自身の能力に大きく依存しています。さらに、同じコンテンツを異なるプラットフォームに配信する場合、読者数や訪問データは完全に分離されています。
開発者として、私は多くのソフトウェアアプリケーションを作成します。しかし、これらのアプリケーションをリリースした後、私はしばしばそれらを制御できなくなります。例えば、コマンドラインプログラムをリリースした後、ユーザーがそれをどのように操作しているのか、さらには私のアプリケーションを使用しているユーザーが何人いるのかを知る方法がありません。同様に、オープンソースアプリケーションを開発する場合、過去にはGitHubのスターを通じてしか関心を測定できず、実際の使用状況については不明のままでした。
したがって、私たちは個人のプライバシーやその他の制限を尊重しながら、最小限の情報を収集するシンプルなソリューションを必要としています。このソリューションがテレメトリです。
テレメトリ
コンピューティングの分野では、テレメトリは、プライバシーの懸念に対応しながら、コンテンツクリエイターの基本的な分析ニーズを満たすために、最小限かつ匿名の情報報告を行う一般的な技術です。
例えば、ReactのNext.jsフレームワークはテレメトリを使用して情報を収集します:APIリファレンス: Next.js CLI | Next.js (nextjs.org)
または、記事に1pxサイズの空白の透明なピクセル画像を埋め込むことで、制御できないウェブサイトの訪問者データを収集することが可能です。現代のブラウザとほとんどのウェブサイトは、セキュリティリスクの可能性からカスタムスクリプトの挿入をブロックします。しかし、画像は比較的無害に見えます。ほとんどすべてのウェブサイトはサードパーティの画像の読み込みを許可しており、テレメトリは実行可能です。
画像を通じてどのような情報を収集できるのか?
驚くべきことに、1つの画像リクエストを受け取ることで、予想以上の情報を収集することができます。
ネットワークリクエストを分析することで、ユーザーのIPアドレス、訪問時間、リファラー、デバイスタイプを取得することができます。これにより、ピーク読者数の時間やトレンド、人口統計分布、異なるプラットフォーム間のトラフィックの粒度など、トラフィックパターンを分析することができます。この情報は、マーケティングやプロモーション活動に特に価値があります。
テレメトリをどのように実装できるのか?
テレメトリは、基本的にインターネットリクエストを受け取るエンドポイントが必要なシンプルな技術です。そのシンプルさから、この目的のための専用ツールはほとんどありません。多くの人は分析を重要視していないか、初期の障壁によって妨げられるかもしれません。しかし、そのような機能の需要は明らかです。
テレメトリソリューションの開発は簡単です。プロジェクトを作成し、ルートを設定し、リクエストボディから情報を収集し、空白の画像を返すだけです。
Node.jsを使用した例を以下に示します:
router.get(
'/telemetry.gif',
async (req, res) => {
const ip = req.ip;
const referer = req.header['referer'];
const userAgent = req.headers['user-agent'];
// データベースに保存する
const blankGifBuffer = Buffer.from(
'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
'base64'
);
res.header('Content-Type', 'image/gif').send(blankGifBuffer);
}
);
独自のソリューションを開発したくない場合は、Tianjiをお勧めします。ウェブサイト分析、稼働時間監視、サーバーステータスを提供するオープンソースプロジェクトとして、Tianjiは最近テレメトリ機能を導入し、コンテンツクリエイターがテレメトリを報告するのを支援し、より良いデータ収集を促進します。最も重要なのは、オープンソースであるため、データを制御でき、複数のプラットフォームからのトラフィックを1か所で集約でき、異なる場所で同じ情報を見ることによる断片化を避けることができます。
GitHub: https://github.com/msgbyte/tianji
公式ウェブサイト: https://tianji.msgbyte.com/