DO_NOT_TRACKとは — Claude Codeのテレメトリを止める環境変数
DO_NOT_TRACKはClaude Codeのテレメトリと機能フラグ取得を止める環境変数です。DISABLE_TELEMETRYとの違い、止まる機能の一覧、ブラウザのDNTヘッダーとの関係をまとめます。
DO_NOT_TRACK は、Claude Codeのテレメトリ送信と機能フラグの取得を止める環境変数です。値を1にすると、DISABLE_TELEMETRYを設定したときとまったく同じ効果が働きます。多くの開発者向けCLIツールが同じ名前の変数を横断的な慣習として採用しており、Claude Codeもこの慣習に従う設計です。
DO_NOT_TRACKが止めるもの
Claude Codeは通常の利用で2種類の運用テレメトリを送信しています。1つは遅延・信頼性・利用パターンを計測する「メトリクス」、もう1つはClaude Code自体の内部エラーを追跡する「エラーレポート」です。DO_NOT_TRACKが止めるのはこのうちメトリクスの送信で、DISABLE_TELEMETRYを1にしたときと同じ経路を塞ぎます。
メトリクスにはコード・プロンプト・ファイルパスといったユーザーデータは含まれません。送信自体を止める判断はプライバシー方針の一環であり、内容が漏れることを心配して止めるものではありません。
エラーレポートは別の変数DISABLE_ERROR_REPORTINGで個別に制御します。DO_NOT_TRACKを設定してもエラーレポートは止まりません。両方を止めたい場合は2つの変数を両方とも設定する必要があります。なお、エラーレポートが送られるのはPro/Maxプランでサインイン済み、Claude API直結、ZDR/HIPAA契約なしといった条件がそろった一部の環境に限られます。
似た名前の変数との使い分け
「テレメトリを止める」系の環境変数はほかにもあり、止める範囲がそれぞれ違います。
| 変数 | 止める範囲 |
|---|---|
DO_NOT_TRACK | 止める範囲メトリクス送信 + 機能フラグ取得(DISABLE_TELEMETRYと同一効果) |
DISABLE_TELEMETRY | 止める範囲メトリクス送信 + 機能フラグ取得 |
DISABLE_ERROR_REPORTING | 止める範囲エラーレポートのみ |
DISABLE_GROWTHBOOK | 止める範囲機能フラグ取得のみ(メトリクス送信はDISABLE_TELEMETRYを別途設定しない限り継続) |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC | 止める範囲自動更新・テレメトリ・エラーレポート・/feedback・リリースノート取得・fast modeの可用性チェックなど非必須通信をまとめて停止 |
DO_NOT_TRACKとDISABLE_TELEMETRYは完全に同じ範囲を止める同義語のような関係で、慣習に合わせてDO_NOT_TRACKを使うか、Claude Code独自の変数名に合わせてDISABLE_TELEMETRYを使うかの好みの問題です。DISABLE_GROWTHBOOKは機能フラグ取得だけを狙って止めたいときの、より狭い範囲の変数です。非必須通信をまとめて断ちたいならCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICが最も広い範囲をカバーします。
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICにもDISABLE_TELEMETRYと同じ値の読み方の癖があり、0やfalseを設定してもオフのままです。空でない値であれば止まる、という判定基準は2つの変数で共通しています。DO_NOT_TRACKだけが標準的なブール値として読まれる例外です。
値の読み方がDISABLE_TELEMETRYと違う
DO_NOT_TRACKは標準的なブール値として読まれます。1を設定すればテレメトリが止まり、0を設定すればテレメトリは有効なままです。「変数が存在すれば止まる」という直感どおりの挙動です。
これに対してDISABLE_TELEMETRYは例外的な挙動を持ちます。1はもちろん、0やfalseを設定してもテレメトリは止まります。値の中身ではなく変数が空でないことだけが判定基準になっているためです。テレメトリを再び有効にしたいときは、値を書き換えるのではなく変数そのものを削除する必要があります。
同じ「テレメトリを止める」目的の2つの変数で、値の解釈ルールが逆になっている点は見落としやすい落とし穴です。DISABLE_TELEMETRY=0のつもりで書いたコードが実際には無効化として働いていた、という取り違えは両者の挙動を知らないと起きます。
設定のしかた
シェルの環境変数として渡すのが最も単純です。テレメトリまわりの計測を可視化する側の設定はClaude CodeのOpenTelemetryで利用量とコストを可視化にまとめています。
export DO_NOT_TRACK=1
claudeチームで固定値を共有したい場合は、settings.jsonのenvキーに書く方法もあります。テレメトリ関連の変数はプロジェクト設定・ユーザー設定・管理設定のいずれからでも適用される「安全な変数」に分類されており、リポジトリ直下の設定ファイルからでも問題なく反映されます。
{
"env": {
"DO_NOT_TRACK": "1"
}
}組織全体で強制したい場合は管理設定(managed settings)に同じ内容を書きます。管理設定の値は個人設定やシェルの環境変数よりも優先され、開発者側で上書きできません。
テレメトリを止めると使えなくなる機能
DO_NOT_TRACKが止める機能フラグ取得は、単なる計測用の通信ではありません。Claude Codeはいくつかの機能をAnthropicから取得したフラグで有効化する設計になっており、取得が止まると次の機能が動かなくなります。
| 使えなくなる機能 | 内容 |
|---|---|
| Auto modeの既定起動 | 内容Pro/Max/Teamプランでセッションが自動的にauto modeで始まる挙動 |
| Remote Control | 内容別デバイスからセッションを操作する機能 |
| クロスマシンのセッションメッセージング | 内容同一マシン内のメッセージングは引き続き動作する |
claude import / /import | 内容インポートコマンド |
| advisorツール | 内容コードレビュー補助機能 |
| Artifactのコメント読み取り・返信 | 内容Artifact上のコメント機能 |
| MCPクライアントのv2ランタイム | 内容MCP_SDK_GENERATION=v2を明示しない限りv1ランタイムに留まる |
| PowerShellツールの既定利用 | 内容Windows + Git Bash環境でCLAUDE_CODE_USE_POWERSHELL_TOOL=1が必要になる |
このほか、PR review statusバッジの自動更新間隔が60秒固定になる、Claude起草のフィードバック機能が使えなくなる、といった細かな挙動変化もあります。いずれも致命的な障害ではありませんが、DO_NOT_TRACKを設定した状態でRemote Controlだけを使おうとして動かない、というつまずき方は起こり得ます。Remote Controlの詳しい使い方はClaude Code Remote Controlで作業を別デバイスに引き継ぐにまとめています。
VS Code拡張機能が設定ファイルから起動時の権限モードを読み取る挙動も、この機能フラグ取得に依存しています。フラグが取れないと、拡張機能を開くたびにモードの初期値が期待どおりにならないことがあります。
ブラウザのDNTヘッダーとは別物
DO_NOT_TRACKという名前は、Webブラウザが送信するDNT(Do Not Track)HTTPリクエストヘッダーを連想させますが、両者は仕組みも現状も異なります。
ブラウザのDNTヘッダーはDNT: 1でトラッキングを望まない意思を、DNT: 0で許容する意思をサイトに伝える仕様でした。しかしこの仕様はW3Cの「Tracking Preference Expression」として策定が進んだのち、MDNのドキュメントでも明記されているとおり廃止(discontinued)されています。現在はサイト側に強制力を持たせる後継のSec-GPCヘッダー(Global Privacy Control)への移行が進んでいます。
一方、DO_NOT_TRACK環境変数はブラウザの仕様とは別系統の慣習です。CLIツール開発者のコミュニティで広まった「環境変数DO_NOT_TRACKが設定されていたら計測を送らない」という申し合わせで、多くの開発者向けCLIが認識している横断的な慣習としてClaude Codeもこれに従います。ブラウザのDNTヘッダーが形骸化した現在も、CLIツール側のDO_NOT_TRACK慣習は現役で使われています。
つまり、この変数名を見て「もう使われていない古い仕組みでは」と考える必要はありません。廃止されたのはブラウザのHTTPヘッダーの方で、環境変数としてのDO_NOT_TRACKはClaude Codeを含む多くのCLIで今も有効です。
サードパーティープロバイダーでは効果が変わる
Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundry、Claude Platform on AWS経由でClaude Codeを使う場合、エラーレポート・テレメトリ・バグレポートは既定でオフになっています。これらのプロバイダーでは、DO_NOT_TRACKをわざわざ設定しなくても計測はもともと送られません。
例外はセッション品質サーベイ(「Claudeの調子はどうですか?」という短いアンケート)とWebFetchのドメイン安全確認で、この2つはプロバイダーに関係なく既定で動作します。サーベイを止めたい場合はDO_NOT_TRACK(またはDISABLE_TELEMETRY、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC)のいずれかを設定すれば、プロバイダーを問わず止まります。
Claude Codeを組み込んだホストプラットフォームがCLAUDE_CODE_PROVIDER_MANAGED_BY_HOSTを設定している場合は事情が変わり、サードパーティープロバイダーでも計測は既定でオンになり、通常のDISABLE_TELEMETRY系のオプトアウトに従う扱いになります。この場合DO_NOT_TRACKは他の環境と同じように機能します。
設定しても止まらない通信もある
DO_NOT_TRACKは「Anthropicへの通信をすべて止める」変数ではありません。止まるのはメトリクス送信と機能フラグ取得の2つに限られます。
自動アップデートの確認はCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICを設定すれば止まりますが、DO_NOT_TRACK単体では止まりません。WebFetchのドメイン安全チェックはさらに独立していて、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICを含むどのテレメトリ系変数の影響も受けず、settings.jsonのskipWebFetchPreflightをtrueにする以外に止める方法がありません。公式プラグインマーケットプレイスの自動インストールも同様に対象外で、止めるには専用のCLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALLを設定します。3つとも止め方が違うので、何を止めたいかで選ぶ変数が変わってくる点は意識しておく価値があります。
セッション品質サーベイと/feedbackコマンドも別枠です。サーベイはDO_NOT_TRACKで止まりますが、/feedbackによるフィードバック送信は独立したDISABLE_FEEDBACK_COMMANDという変数で制御します。「フィードバックを送るたびに会話履歴のコピーがAnthropicに送信される」という/feedback固有の挙動は、DO_NOT_TRACKの設定とは無関係に残ります。
まとめ
DO_NOT_TRACKは、DISABLE_TELEMETRYと同じ効果を持つ標準的な慣習に沿った環境変数です。ただし値の読み方はDISABLE_TELEMETRYと逆で、0を設定すればテレメトリは有効なままという素直な挙動になります。止まるのはメトリクス送信と機能フラグ取得であり、エラーレポートは別変数で個別に制御します。フラグ取得が止まる副作用でRemote Controlやauto modeの既定起動なども使えなくなる点は、設定する前に把握しておくとつまずきにくくなります。ブラウザのDNTヘッダーが廃止された現在でも、CLIツールの慣習としてのDO_NOT_TRACKは現役です。Claude Codeの環境変数全体を見渡したい場合はClaude Code環境変数リファレンスを参照してください。