ハクソク

世界を動かす技術を、日本語で。

GitHub CLIが擬似匿名のテレメトリを収集するようになりました

概要

  • GitHub CLIはユーザー体験向上のために疑似匿名のテレメトリーを送信
  • 送信内容や理由を透明性をもって公開
  • テレメトリー内容の確認方法オプトアウト手順を明示
  • データ送信先やサードパーティ拡張の注意点も説明
  • Copilot CLIには本内容は非適用

GitHub CLIのテレメトリー収集について

  • GitHub CLIは製品改善のために疑似匿名テレメトリーを収集
  • テレメトリーは機能利用状況の把握が目的
    • 新しいサブコマンドの利用頻度や使い方の分析
    • 利用が少ない場合は設計や発見性の見直し判断材料
    • 特定フラグの高頻度利用は体験改善の投資先判断に利用

テレメトリー内容の確認方法

  • GitHub CLIはオープンソースであり、cli/cliリポジトリで実装を確認可能
  • 実際に送信される内容を確認したい場合、ロギングモードが利用可能
    • 環境変数:export GH_TELEMETRY=log
    • CLI設定:gh config set telemetry log
  • ロギングモードでは、通常送信されるJSONペイロードがstderrに出力
  • 例:GH_TELEMETRY=log gh repo list --archived
    • 出力例にはコマンド、OS、アーキテクチャ、バージョン、デバイスIDなどが含まれる
  • コマンドや環境変数、認証アカウントによって出力内容が変化

オプトアウト方法

  • テレメトリー送信を停止するには環境変数またはCLI設定を利用
    • 環境変数:export GH_TELEMETRY=false
      • 0, false, disabled, 空文字などのfalsy値も有効
      • export DO_NOT_TRACK=trueも利用可能
    • CLI設定:gh config set telemetry disabled
  • 環境変数がCLI設定より優先される仕様

データ送信先とプライバシー

  • テレメトリーイベントはGitHubの内部分析基盤に送信
  • 詳細はGitHub General Privacy Statement参照
  • GitHub CLI拡張(GitHub/サードパーティ製)は独自のデータ収集を行う場合あり
    • 拡張ごとのドキュメントでテレメトリー有無や無効化方法を確認
  • 本ページはGitHub CLI(gh)本体のクライアントサイド収集に関する説明
    • GitHub CopilotやCopilot CLIには適用されない
    • Copilot CLIの詳細は公式ドキュメント参照

Hackerたちの意見

短いPRは最高だね!: https://github.com/cli/cli/pull/13254 > テレメトリーを制御する環境変数を削除したから、デフォルトでオンになるよ。
デフォルトでオンなだけじゃなくて、どうやら無効にすることもできないみたい。強制的にオンにされてる感じだね(企業向けを除いて)。
テレメトリーを集める理由…私たちのチームは、機能が実際にどのように使われているかを把握する必要があるんだ。このデータを使って、作業の優先順位を決めたり、機能が本当にユーザーのニーズに応えているかを評価したりしてる。なんで企業の開発チームは、ユーザーを監視する必要があると思ってるんだろう? 良いエンジニアリングやデザインの実践をすれば十分じゃない? Gitは20年以上も、誰がどの機能やコマンドを使っているかの詳細な分析なしでうまく機能してきた。もしGitがテレメトリーを集めていたら、もっと良くなっていたのかな?それとも、データはただの気を散らすものだったのかな?
> 良いエンジニアリングやデザインの実践をすれば十分じゃない? それが不十分ってわけじゃないけど、新しい開発者やプロダクト担当者、デザイナーは、まず「ユーザーに聞く」ことで実験しないと、センスのある有用な決定ができないんだよね。以前はユーザーベースに対する直感を育てていたけど、今は皆が毎年転職してるから、そんな時間もないんだろうね。だから、すべての決定が「データドリブン」になって、誰もが超満足ってわけじゃなくて、みんな「まあ、いいんじゃない」って感じになってる。
> Gitがテレメトリーを集めていたら、もっと良くなっていたのかな?それとも、データはただの気を散らすものだったのかな? あなたがそれが明らかだと言っているのかもしれないけど、私にはそれが役に立たないとは思えないんだ。
企業の開発チームだけじゃないよ — オープンソースの開発チームもユーザーを監視したがってる。例えば、Homebrewでは、「匿名の分析によって、どのように、どこで、いつ人々がHomebrewを使っているかに基づいて、修正や機能の優先順位を決めることができる。」 [1] [1] https://docs.brew.sh/Analytics
> なんで企業の開発チームはユーザーを監視する必要があるんだろう?残念ながら、これは「意思決定者」が技術に詳しくない人たちで、実際にツールを使ってないから、どう使われているか理解できていないからだと思う。だから、開発ツールに責任を持つプロダクトマネージャーは、自分の仕事をこなすためにこういう情報が必要なんだよね。まるで、無知なプロダクトマネージャーがeコマースで、ユーザーの行動を追跡するスクリプトでフロントエンドを過剰に重くしているのと同じように。もちろん、そもそもなんでそんな仕事が存在するのかっていう疑問も残る。エンジニアたちは、VCが技術に詳しくない人が高度な技術製品のデザインや開発をリードするという不幸なパラダイムを押し付ける前は、ユーザーとのインタラクションをうまく設計できていたのに…だから、今こうしてデータを共有しているわけだ。ジョーがAIにスライドを促したり、さまざまな「超重要」な会議の合間にPMの給料を稼ぐためには、どうするんだろうね。
ちょっとしたネットワークコールやプライバシーの低下の影響は、ユーザーには「監視されてる」っていう抽象的な認識を超えて感じられないことがほとんどだよね。でも、製品開発チームにとっては、このテレメトリの影響は重要なんだ。テレメトリがプライバシーよりも価値があるとは言わないけど、実際の利益が抽象的なプライバシーの懸念と釣り合うとき、企業にとっては明確な決断になるんだよね。だから、商業的に開発されたアプリやツールには、これが普遍的に適用されるわけ。
> なんで企業の開発チームはユーザーを監視する必要があるんだろう?良いエンジニアリングやデザインの実践を使うだけじゃ足りないの?いいえ、ユーザーは開発者とは違うニーズや考えを持っているからです。時には、良いフィードバックを得るのが難しいこともあるし。みんなが機能Xのコンセプトを好きだと言っても、実際には何らかの理由で使わないこともある。ある機能には声の大きいファンがいるけど、実際の売上や使用にはつながらないこともある。 > Gitがテレメトリを収集していたら、もっと良くなっていたのか、それともデータがただの気を散らすものになっていただけなのか?私はそう思う。なぜなら、Gitは有名なほどひどいUIを持っていて、どんなテレメトリでも最初は人々がかなり手間取っていることをすぐに教えてくれるから。別の世界では、テレメトリ付きのGitが出てきて、誰かが統計を見て「git restore」を最初から追加していたかもしれない。だって「git checkout -- foo.txt」は全く直感的じゃないコマンドだから。
自分のスタートアップを作り始めるまでは、必要ないと思ってたんだ。でも、分析がないと盲目的に進んでいるようなもので、ユーザーが実際に何に関心があるのか、成功するユーザージャーニーをどう最適化するのかがわからない。人々が直接聞かれたときに言うことと、実際にソフトウェアを使うときの違いは、驚くべきものだよ。
> 良いエンジニアリングとデザインの実践を使うだけでは不十分じゃない? Git... Gitはデザインも使い勝手も最悪だよ。エンジニアがエンジニアのためにインターフェースを設計して、フィードバックループがない良い例だね。皮肉なことに、エンジニアは自分たちの製品が実際にどう使われているかをもっと理解する必要があるってことを証明しちゃったね。彼らの頭の中の製品の使われ方のイメージは大体ひどいから。
匿名のテレメトリーは必ずしもスパイ行為ではないけど、「擬似匿名」というのは自由な言論と「絶対主義」を区別するのと同じくらい守られているとは言えないね。GitHubもここでgitの使用を追跡するわけじゃなくて、インストールする必要のない`gh` CLIを追跡しているだけだよ。とはいえ、たくさんの企業環境にいた経験から、データが匿名化されているとは思えないし、主な動機が内部のOKRや政治に起因することには驚かないな。
Gitは最近、使わなくなった二つのコマンド用に `--i-still-use-this` オプションが追加されたんだ。それを使いたいなら、これを実行しなきゃいけない。出てくるエラーがそのことを教えてくれて、「本当に代替案が見つからないなら、ここにメールしてね」って言ってるよ。これが普通で非侵襲的なソフトウェアの代償なんだろうね。
先月、ホームラボにgiteaをデプロイして超嬉しい!GitHubからのインポート機能があって、正直言ってGitHubよりも速くて安定してる。Claudeもtea cliとgitで問題なく使えるし。ほぼGitHubのパクリだけど、今のところこっちの方がいいと思ってる。
私はForgejoを運用していて、同じコアコードを使ってるけど、ほんと素晴らしいよ。確かに速くて安定してる。インターネットがダウンしても、デスクの隣のキャビネットにあるPi 4で動いてるから大丈夫。バックアップはborgとsyncthingでオフサイトに取ってる。設定にはちょっと手間がかかるけど、その後はメンテナンスの時間はほぼゼロ。2週間に1回手動でSSHで入って、SSDの空き容量やRAMの使用状況をチェックして、apt updateとupgrade、メジャーバージョンのアップデートをしてる。
みんな、GitHubがすでにサーバーに送られたリクエストを集めていると思ってないの?それがgh CLIの本質なんだから。リクエストを追跡されたくないなら、この設定だけじゃなくて、もっと多くのことからオプトアウトしなきゃならないよ。
データは彼らのサーバーにあるから、当然もうやってるよね。さらに、GitlabやCodebergなどへのトランジットを知るために、クライアントサイドのメトリクスを追加して追跡を増やしたいんだ。
マイクロソフトがやるあのこと、覚えてる?「抱きしめて、拡張して、消す」ってやつ。最初の二つはもうやったよね。あと5年もすれば、GH CLIがGitHubリポジトリとやり取りする唯一の方法になると思う。その後、3つ目も終わって、サイクルが完成するってわけ。
> GH CLIがGitHubリポジトリとやり取りする唯一の方法になるまで5年かかると思う。賭けようよ。いくらかけるつもり?
もし3人の開発者が、使用されていないコードベースのエリアに80%の時間を費やしていて、使用を現実的に増やす道筋が見えないなら、他の場所に焦点を当てるか、機能を再考する方が開発者の時間を有効に使えるかもしれない。私が多くの分析に対して抱く問題は、無害な使い方もあるけど、ユニークな識別子を行動パターンに結びつけて、機械学習でアイデンティティを再構築できる可能性があるという理解があることだ。タイムスタンプが含まれているとさらに悪化する。送信されるテレメトリが何で、いつ送信されるのかを正確に公開するだけでいいじゃん。テレメトリを詳細にするオプションを追加して、でも有効にしない限り送信しないようにすればいい。そうすれば、オンにする前に評価できるから。Steamのハードウェア調査を行うと、何が送信されるかがわかるよ。これが正しいやり方だと思う。
GitHubにはいいね。どの企業もこれが必要だよ。製品を改善するために使うところもあれば、あまり褒められない目的で使うところもある。HNの人たちはテレメトリーにアレルギーがあるみたいだけど、もしサービスとしてのソフトウェアを開発したことがあるなら、テレメトリーは欠かせないよ。
ユーザーと話すなんてとんでもないね。
AIの兄弟たちはみんな同じだな。P.S. テムの悪役みたいな見た目だね。
考えを整理中:ツールのテレメトリーの詳細を確認するためのベストプラクティスは何だろう?細部に悪魔がいるからね。以下に、Claudeの助けを借りたリサーチの簡単なまとめを。頭に浮かぶのは、ユーザーと製品開発者の両方にとって十分な中間地点を見つけることに利害関係を持つ信頼できる仲介サービスみたいなもの。要点:進行中、31分経過、まだ調理中。
> この設定だけでなく、もっと多くのことからオプトアウトしなきゃならないよ。 gh CLIのテレメトリーのオプトアウト状況は、実際には思っているよりも厄介なんだ。ghはCI/CDパイプラインやサーバー環境で動くから、プライバシーのためじゃなくてネットワークの制約からgithub.comへのアウトバウンド接続を全く望まない場合もある。その環境では、デフォルトでテレメトリーがオンだとCIが失敗したり、BastionホストがGitHubに全くアクセスできなくなったりする。これに対して、git自体は明示的にプッシュするまで完全にローカルなんだ。信頼モデルが違うんだよ:gitは設定しない限り、電話をかけることはない。ghはGitHub APIのラッパーだから、機能するためにはその呼び出しをしなきゃいけないけど、それがコマンドパターンを収集してアップロードするべきかどうかとは別の話だね。
「擬似匿名」なんて存在しないよ。そんなものはないし、矛盾語だね。
彼らは「擬似匿名」のテレメトリー、つまり「特定できないテレメトリー」を意味してるのかな?それとも「擬似匿名」テレメトリー、つまり本当に匿名じゃないテレメトリーを指してるのかな?この二つの言葉はほぼ正反対の意味を持ってるし、言ってることは特定可能なデータを集めてるってことだよね。
つまり、彼らは一台のマシンからのすべてのテレメトリーを見れるけど、そのマシンのアイデンティティは人間のアイデンティティやGitHubアカウントには結びついてないってことだね。各マシンには独自のUUIDが割り当てられて、それでマシンを「識別」してるんだ。