📡

Next.jsのTelemetry

#tech#Web

2024-3-25

先日,私物のノートPCで式年遷宮を行った.その際,今までNeovimのプラグインマネージャーとして用いていたpacker.nvimの開発がストップしている[1]ことに気付いた.

このため,lazy.nvimに移行したのだが,その際~/.config内をいじる必要があったのでついでにこの周辺にあるファイルを見ていたところ,~/.config/nextjs-nodejsディレクトリが存在し,その中にはconfig.jsonが入っていた.適当にcatしてみるとこれはNext.jsにおけるTelemetryの設定であることが分かるので,折角だしNext.jsにおけるTelemetryの実装を軽く追ってみた.尚公式のドキュメントはこれ

そもそもTelemetryとは

一応書いておく.Telemetryというのは何もNext.jsに固有の技術ではなく,英単語としての意味から自然に分かるように,パフォーマンスデータを収集し,それを用いて分析などを行うことを指す.

Next.jsにおけるTelemetry

発火条件

先に述べた公式のドキュメントにおいてはnext devを実行した際などに,収集した内容がTelemetry用のAPIにPOSTされる.詳しい発火タイミングはvercel/next.js/packages/next/src/telemetry/events/などを見ると良さそう.リクエスト先のURLはこれを見るとhttps://telemetry.nextjs.org/api/v1/record

~/.config以下の内容

冒頭で述べた~/.config/nextjs-nodejs/package.jsonは,手元では次のようなファイルだった:

{
    "telemetry": {
        "notifiedAt": "hoge",
        "anonymousId": "foo",
        "salt": "bar"
    }
}

ここにあるnotifiedAtanonymousIdsaltはそれぞれ,notifiedAtがそのままユーザーへの表示とリクエストに乗るペイロードに使われ,残りの2つがランダムな値に置き換えられ,リクエストに用いられる.

発火時の処理

例えばnext devを実行した際にTelemetryは送信される.next devの挙動を実装したファイルはpackages/next/src/cli/next-dev.tsなので,これを見ると,実際にTelemetryを詰めている様子が確認できる.他についても同様で,最終的にpackages/next/src/telemetry/storage.ts内でこの内容をPOSTする.

Telemetryを切る

切りたい場合は次を[2]叩く:

$ npx next telemetry disable

すると~/.config/nextjs-nodejs/package.jsonのTelemetryのvalueに"enabled": falseが付いてデータが収集されなくなる.再度Telemetryを有効化するにはnpx next telemetry enableとかすれば良い.

もしくは環境変数に次のように書いておいても収集されなくなる:

NEXT_TELEMETRY_DISABLED=1

.env等で管理できるので,もしプロジェクト単位で切り替えたい場合などにはこちらの方が便利だと思う.

脚注
  1. 去年の8月かららしい.exaの開発ストップとかには割と早く気付いたので興味の問題かも ↩︎

  2. まあなんかyarnとかpnpmとか使っている場合は適当に読み替えを ↩︎