$ cat posts/20250416-rp9a77.mdx
PublicリポジトリにコミットするとメールアドレスはGitHub APIから取得できる
よくよく考えたら、Publicリポジトリにコミットすると git config user.email が第三者に GitHub API から取得されるのでは? と気づいた話です。
導入
2年くらい前に全然知らない人から、メールをもらったことがありました。
もらったメールには、その人のGithubリポジトリのリンクが掲載されていたせいか、よく調べもせずGithub経由で送られたメールなんだと決めつけてしまいました。
でもSNSの見えるところにメールアドレスを記載してないつもりだったので、この人はどうやって自分にメールを送れたのだろうと思って一度調べたことがあります。
当時、どう調べたのか忘れてしまいましたが、Githubの機能を使って自分宛にメールを送れたんだ!と結論づけてしまっていました。最近きちんと調べて仕組みがわかりました。
自分が意図してない方法でGithubに登録しているメールアドレスが流出していました。
この記事に書くこと
- GithubAPIからコミッターのEmailが取得できることを確かめる
- noreply メールアドレスについて
- コミッターのEmailをnoreply メールアドレスに変更する
- コミッターのEmailをリストで取れるアプリケーションを雑に紹介
前提
プライベートのGithubアカウントは、よっぽどな理由がなければリポジトリは、基本publicにしていました。
調査
自分の開発をやってる時に、GitLensのような拡張機能でカーソルホバーしたらこんな感じのポップアップが出てきて、名前の部分にカーソルを当てたらメールアドレスが表示されました。

てか、Publicリポジトリに、コミットしてる場合、このメールアドレスって、誰でも見れるんじゃないか?と急に思いました。
GithubAPIからコミッターのEmailを取得する
公式のコミット用の REST API エンドポイントを参考にcommitのAPIを叩いてみたところ、自分のEmailアドレスが取得できてしまいました。
サンプルコード
curl "https://api.github.com/repos/gtn-74/dotfiles/commits/1b01e35ce874e80c2753b5de965b104022efb847"
noreply emailアドレス
メールアドレスのプライバシーを有効にしたいならnoreply emailアドレスを使いましょう。的なことが書いてありました。
noreply emailを有効にするための手順
https://github.com/settings/emails の、Keep my email addresses private、Block command line pushes that expose my emailにチェックを入れる。
ローカルのgit config emailを赤枠のnoreply emailアドレスに変更する。

ローカルのgit config emailをnoreplyアドレスに置換後、コミットプッシュで取得できていたemailがnoreplyアドレスに変わっていることが確認できました。

noreply設定前のコミットには実アドレスが残る
noreply アドレスを設定したから、メールアドレスは第三者から見られなくなった。というわけではありません。
noreplyアドレスを登録以前のコミットに関してemailは変更されないからです。

まだ終わりじゃないよ😇
git config の email をすでにnoreplyアドレスでマスクしている人こそ、最後まで読んでほしいです。
noreplyアドレスを設定しても、これからのコミットのemailをnoreplyにできるだけで、過去のコミットのemailは書き換えられていません。過去のコミットを遡れば、結局メールアドレスは取得できてしまいます。
最後に
つらつら書きましたが、もちろんリポジトリをPublicにしている以上、ばれても良いemailアドレスを設定しています。
そして、noreplyを設定していなかったら、apiからメールアドレスが見えることも分かってたら、別に気にすることないかなと思います。
でも、自分の場合、emailが第三者から見えているっぽいアクションがあったにも関わらず、曖昧なままにしていたことは、すごく反省したいことだと思いました。
誰かの血肉になりますようにー🍖