~/gtn74

$ cat posts/20250416-rp9a77.mdx

PublicリポジトリにコミットするとメールアドレスはGitHub APIから取得できる

2025-04-16 · #tech #git #security

よくよく考えたら、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が第三者から見えているっぽいアクションがあったにも関わらず、曖昧なままにしていたことは、すごく反省したいことだと思いました。

誰かの血肉になりますようにー🍖

$