TL;DR
Claude Codeの環境変数設定でGitHubのnoreplyメールのIDを適当に入れたら、実在の別ユーザーのIDと偶然一致してしまった。
- GitHubはメールアドレス中のIDだけで紐付けを判定するため、commitのauthorが他人のアカウント表示になった
- 実害はなかったが、noreplyメールのIDは必ず
https://github.com/settings/emailsで自分の値を確認してから使うべき
きっかけ
本当に心臓に悪いことが起きたので、備忘録として残しておこうと思い書きました。
先日、Claude Codeのクラウド環境を使って作業をしていたときの話です。
環境の設定画面で GIT_AUTHOR_EMAIL や GIT_COMMITTER_EMAIL といった環境変数を登録する場面があり、そこに入れる値を間違えたまま登録してしまいました。特に意味のなさそうな数字だったので、深く考えずそのまま使ってしまったんです。
その後、普通に気にせずに作業をしていて、ふとGitHubでPRを開いたときに違和感がありました。commit一覧に、見覚えのないユーザーのアイコンと名前が、自分のcommitのauthorとして表示されていたんです…!
「誰だこれ!?」から始まって、状況がわからなくなり、一気に血の気が引きました。
何が起きていたか
原因はGitHubのnoreplyメールの仕組みでした。
GitHubのnoreplyメールは <ユーザーID>+<ユーザー名>@users.noreply.github.com という形式になっています。詳しくは公式ヘルプにまとまっているので是非お時間ある際にお読みください。
この紐付けの判定に使われているのはIDの数字部分だけで、+の後ろのユーザー名部分は表示用のラベルにすぎません。ユーザー名を変更しても紐付けが継続する、という仕様が公式のリファレンスページにも載っています。
つまりユーザー名の部分に自分の正しいユーザー名を入れていても、IDだけが他人のものと一致していれば、そのcommitは相手のアカウントに紐付いてしまいます。
環境変数に入れていたIDは、自分では「なんとなく入れた意味のなさそうな数字」のつもりでした。ですがそれがたまたま、まったく無関係な実在ユーザーのIDと一致してしまっていたんです。誰でも思いつきそうな並びの数字だったので、被ってもおかしくありませんでした。
まあこれに関しては自分の落ち度100%です。ただ、もっと簡単に人のものと被らないようなIDにしておいてほしかった気持ちも、ちょっとだけあります(もちろん単なる連番なので無理な注文なのはわかっています。何度も言いますが私が悪いです、はい)。
実際どうなっていたか
PRのcommit一覧を見ると、自分が書いたはずのcommitのauthor・committerとして、見知らぬ第三者のアイコンとプロフィールへのリンクが表示されている状態になっていました。中身は自分のcommitなのに、著者だけ他人になっている、という状態です。一瞬「なんか誰かがCommiterとして作業してくれてるんだけど」と思ったんですが、そんなわけなかったです。
対処した内容
まず環境変数の値を、自分の正しいnoreplyメールに修正しました。正しいIDは https://github.com/settings/emails の画面に表示されている、自分専用の値です。ここは決め打ちせず、必ず実際の画面で確認する必要があります。
すでにpushしてしまっていたcommitについては、Claude Codeに直してもらいました。
git commit --amend --reset-author
git push --force
これでPR上の表示は自分のアカウントに戻りました。よかった。
実害はあったのか
幸い、確認した範囲では相手への通知や権限の付与といった実害はありませんでした。GitHubのnoreplyメールの紐付けは表示上のものであり、招待や権限追加が発生する仕組みではない、という理解です。
ただ一つ引っかかったのが、force pushしても直前のcommitはすぐには消えないという点でした。参照が外れた「dangling commit」として残り、直接URLを知っていればアクセスできてしまいます。確実に消したい場合は、公式にはGitHubサポートへの削除依頼が手段としてあるようです。しかもGitHub上だけの話ではなく、当時のpushの記録自体が外部のアーカイブサービスなどに残っている可能性もあり、force pushや削除依頼だけで痕跡を完全に消せるとは限らないようです。
今回は実害がないと判断し、そこまでの対応はしませんでした。とはいえ、一瞬とはいえ無関係の人のプロフィールが自分のcommitに表示されていた、というのは心臓に悪い体験でした。
教訓
noreplyメールのIDは、適当な数字を入れていい場所ではありません。必ず https://github.com/settings/emails に表示されている自分専用のIDを使う必要があります。
Claude Codeの環境変数の設定画面に値を入力するときも、GitHubアカウントに紐づく値は鵜呑みにせず、自分の設定画面と照合してから使うようにしないと、と再確認しました。(意識しているつもりだったのですが、もう少し敏感にならないといけないですね)
こういう経験、会社で起こさなくてよかったと思ってます。これからも個人開発で色々な経験をしていきたいとも思いました。