📡
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というのは何もNext.jsに固有の技術ではなく,英単語としての意味から自然に分かるように,パフォーマンスデータを収集し,それを用いて分析などを行うことを指す.
先に述べた公式のドキュメントにおいてはnext dev
を実行した際などに,収集した内容がTelemetry用のAPIにPOSTされる.詳しい発火タイミングはvercel/next.js/packages/next/src/telemetry/events/などを見ると良さそう.リクエスト先のURLはこれを見るとhttps://telemetry.nextjs.org/api/v1/record
.
冒頭で述べた~/.config/nextjs-nodejs/package.json
は,手元では次のようなファイルだった:
{
"telemetry": {
"notifiedAt": "hoge",
"anonymousId": "foo",
"salt": "bar"
}
}
ここにあるnotifiedAt
,anonymousId
,salt
はそれぞれ,notifiedAt
がそのままユーザーへの表示とリクエストに乗るペイロードに使われ,残りの2つがランダムな値に置き換えられ,リクエストに用いられる.
例えばnext dev
を実行した際にTelemetryは送信される.next dev
の挙動を実装したファイルはpackages/next/src/cli/next-dev.ts
なので,これを見ると,実際にTelemetryを詰めている様子が確認できる.他についても同様で,最終的にpackages/next/src/telemetry/storage.ts
内でこの内容をPOSTする.
切りたい場合は次を[2]叩く:
$ npx next telemetry disable
すると~/.config/nextjs-nodejs/package.json
のTelemetryのvalueに"enabled": false
が付いてデータが収集されなくなる.再度Telemetryを有効化するにはnpx next telemetry enable
とかすれば良い.
もしくは環境変数に次のように書いておいても収集されなくなる:
NEXT_TELEMETRY_DISABLED=1
.env
等で管理できるので,もしプロジェクト単位で切り替えたい場合などにはこちらの方が便利だと思う.