GitHubのユーザー名変更に伴う懸念と実践
プログラミングなんて全くわからん頃に作った適当なユーザー名のGitHubアカウント、名前変えたい。
GitHubのユーザー名変更
GitHubのユーザー名は後から変更することができる。私と同じような理由で名前を変えたい人もいるだろう。しかし、GitHubのユーザー名を変更すると幾つかの問題が発生する可能性がある。それを理解した上で実行しよう。
関連するURL等の変更
GitHubのユーザー名はリポジトリをはじめとした色々なページのURLに含まれる。
github.com/usernameアカウントのトップページgithub.com/username/repoリポジトリのトップページgithub.com/username/repo.gitgit remote (http)git@github.com:username/repo.gitgit remote(ssh)username.github.io/repoGitHub Pagesraw.githubusercontent.com/username/repo/pathrawファイルgist.github.com/username/hashgist@usernamemention / CODEOWNERS
ユーザー名を変更するとこれらのURLも変わるので、必要に際して更新する必要がある。
なおリポジトリ関係のURL(リポジトリのトップ、git remote、rawファイル)については、新しくそのURLができるまで=他者が旧ユーザー名を取得して同名リポジトリを作成するまではGitHub側でリダイレクト処理を行ってくれる。ただ混乱を生むのと、他者が旧ユーザー名を取得する可能性も考えると、できる範囲でこれまでに公開したURLを更新しておいた方がよいだろう。
公式Docでも同じことが言われている。
Repository references
After you change your username, GitHub will automatically redirect references to your repositories.
If the new owner of your old username creates a repository with the same name as your repository, that will override the redirect entry and your redirect will stop working. Because of this possibility, we recommend you update all existing remote repository URLs after changing your username.
Username changes - GitHub Docs
noreplyメールアドレスの変更
自身のメールアドレスがコミット履歴に残らないように、GitHub側で用意されるダミーのアドレスを使うことがあるが、このアドレスにはユーザー名が含まれており、ユーザー名を変更することでこのアドレスも変わる。アドレスの形式は次のようになっている。
- 2017年7月18日以前に作成されたアドレス:
username@users.noreply.github.com - それ以降に作成されたアドレス:
ID+username@users.noreply.github.com
Email addresses reference - GitHub Docs
コミットへの署名を行っている場合、メールアドレスが変わることで検証が通らなくなる。したがって、ユーザー名を変更することで過去のコミットのVerifiedバッジがUnverifiedに変わる。
また、古い方のアドレスを用いている場合、ユーザー名を変えると、GitHub上で過去のコミット履歴がアカウントに紐づかなくなる。結果としてcontributions graphに自身が表示されないなどの症状が起こる。新しい方はprefixのIDで識別してくれるので大丈夫。
After a username change, verified commits signed using the previous GitHub-provided
noreplyemail address will lose their "Verified" status.…
Older versions of the
noreplyemail address that do not contain a numeric ID will not be associated with your GitHub account after changing your username.
Username reference - GitHub Docs
この2つを回避する方法はないっぽいので、嫌なら諦めるしかない。私の場合、アドレスは新しいものだし署名も行っていないので、特に気にすることはない。
GitHubでログインしているサービスへの影響
GitHubアカウントを使って他のサービスにログインしている場合、GitHubのユーザー名が変わることでログインができなくなるのでは?という懸念がある。
結論から言うと、基本的には問題なくログインできる。まともな実装をしているサービスであれば、ユーザー名ではなく内部のIDやトークンを使用しているので。しかし全てのサービスがまともな実装をしているとは限らないので、万全を期すなら全てのサービスでGitHub以外のログイン手法を設定しておくとよい。ちなみにGitHubログインを利用しているサービスの一覧はSettings > Integrations > Applications > Authorized GitHub (OAuth) Appsから確認できる。
他者に旧ユーザー名を取得される可能性
当然ながら、手放したユーザー名は他者に取得される可能性がある。他者が取得して同名のリポジトリを作成した場合、リダイレクトが無効になる。悪意のある人の手に渡れば悪質ななりすましや攻撃に利用される可能性もある。
一応、この問題についてはGitHub側である程度対策されている。特定の条件(変更前1週間で100 cloneまたはGitHub Actions 100 use)を満たした人気リポジトリについては、新たにユーザー名を取得した人が同じリポジトリ名を利用できないようにブロックされる。
Limitations of username changes
If the account namespace includes any public repositories that contain an action listed on GitHub Marketplace, or that had more than 100 clones or more than 100 uses of GitHub Actions in the week prior to you renaming your account, GitHub permanently retires the old owner name and repository name combination (
OLD-OWNER/REPOSITORY-NAME) when you rename your account.
Username reference - GitHub Docs
自分でできる最も有効な対策は、他者に取得される前に自身で旧ユーザー名を確保しておく方法だろう。しかしこの方法はGitHubの利用規約に抵触する可能性があり、やや注意が必要。
Name Squatting Policy
GitHub prohibits account name squatting, and account names may not be reserved or inactively held for future use. Accounts violating this name squatting policy may be removed or renamed without notice. Attempts to sell, buy, or solicit other forms of payment in exchange for account names are prohibited and may result in permanent account suspension.
GitHub Username Policy - GitHub Docs
日本語だとこう(PLaMo翻訳)
アカウント名の占用禁止ポリシー
GitHubではアカウント名の占用行為を禁止しており、アカウント名を将来の使用目的で予約したり、長期間放置したりすることは認められません。このアカウント名占用禁止ポリシーに違反するアカウントは、予告なく削除または名称変更される場合があります。アカウント名を売買したり、その他の形態の対価と交換したりする行為は禁止されており、このような行為が確認された場合、アカウントは永久的に停止される可能性があります。
スクワッティング(サイバースクワッティング)とは、著名な企業名やブランド名を含むドメインを先回りして取得し、それを売りつけることで不当な利益を得ることを指す。GitHubのユーザー名でそういうことやったらアウトねってのがこの規約だと思うので、売買を目的としていない本件では問題ないようにも思えるが、とはいえ本文ではアカウントの長時間放置などにも言及されており、これらの項目を全てクリアできるかというとややグレーな感じもある。やる場合は適度にアカウントを動かしてスクワッティングとみなされないようにした方がいいかも。
ちなみにGitHubの無料アカウントは1人1つしか作成できないので、やるならOrganizationを作成するのが良い。
One person or legal entity may maintain no more than one free Account
GitHub Terms of Service - GitHub Docs
実際にユーザー名を変更する
一通り調査が終わったので、やってみようと思う。
各サービスへのログイン手段の確保
GitHubでログインしている各サービスに他のログイン手法を設定しておく。サービス一覧はSettings > Integrations > Applications > Authorized GitHub (OAuth) Appsから確認できる。
前述した通り、基本的にはやらなくても問題ない。私はサービス一覧を確認した上で、ログインできなくなったらマジで困るやつだけ対処した。後述するが、実際に問題は起きなかった。
ユーザー名変更
Settings > Account > Change usernameから変更する。クリックすると、強めのメッセージが出てくる。
Loading image...
この手順を読まないと、予期しない問題が発生する可能性があります!
- 旧プロフィールページのリダイレクト設定は行いません。
- Pagesサイトのリダイレクト設定は行いません。
- リポジトリ(WebアクセスおよびGitアクセス)のリダイレクト設定を行います。
- リネーム処理が完了するまでに数分かかる場合があります。
前述したことと同じ。
I understand, ...をクリックするとユーザー名が入力できるようになるので、所望の名前を入力して変更しよう。完了したら、次でもろもろの対応を行う。
旧ユーザー名のOrganization作成
旧ユーザー名を他者が取得してリダイレクトが失われる可能性などを考慮し、自身で旧ユーザー名を取得しておく。前述した通り、この手法はGitHubの規約に抵触する可能性があるので、慎重に行う。
まずはOrganizationを作成する。ユーザー名を変更してすぐ旧ユーザー名が使えるようになるのかは知らん。ちょっと待つのかもしれん。私は変更した半日後にこの作業をやったが、その頃には使えるようになっていた。次に、移行先の案内とName Squattingに関与していない声明をREADMEに記載する。あとはこのOrganizationを適当に動かしておけば完了。リポジトリをいくつかOrganizationに移管しておくとかが良いかも。
各サービスへのログイン確認
新しいユーザー名のGitHubアカウントで各種サービスにログインできるか確認する。私の場合、全てのサービスを確認したわけではないが、確認した主要なサービスは全て問題なくログインできた。
プロフィールページの修正
ユーザー名と同じ名前のリポジトリがある場合、それがプロフィールとしてアカウントトップに表示されるが、ユーザー名を変更するとそのマッチングが壊れるので、当該リポジトリの名前を新たなユーザー名に変更する。
出版物等に記載されているURLの更新
自身の出版物(記事や資料など)やSNSで送信したメッセージなどに変更前のURLが含まれている場合、予期せぬ混乱や問題が起こる可能性がある。重要そうなものについてはURLを新しいものに更新しておこう。
特にリダイレクトされないもの(プロフィールページやGitHub pages等)は必ず更新しよう。私はポートフォリオやSNSに自身のGitHubアカウントへのリンクを貼っていたので、それを更新した。また研究のデモページをGitHub pagesで公開していたので、論文等の関連する出版物を更新した。自作したライブラリのドキュメントもGitHub pagesで公開していたので、READMEに記載してあったURLを更新した。
git configとgit remoteの更新
git configのユーザー名とメールアドレスを更新する。メールアドレスはSettings > Access > Emailsから確認できる。つってもprefixのID部分は変わらないのでユーザー名の部分が新しくなっただけだが。
git config --global user.name "newname"git config --global user.email "newaddress"
次に、ローカルに存在する全てのリポジトリについて、originのURLを設定し直す。リダイレクト対象ではあるが、公式では再設定することが推奨されているし、スクリプトを組んでしまえば一瞬で終わるので、やっておきましょう。
set-url.shとして、与えたrootディレクトリ以下の各ディレクトリ(再帰無し)について、1. .gitディレクトリが存在し、2. 設定されているURLが旧ユーザー名のものだったら、URLを新しいものに置き換えるという処理を記述した。私は全てのリポジトリを~/workspace以下に置いているので、./set-url.sh ~/workspaceを1回回しておしまい。
オワリ
アカウントが有名になればなるほど名前を変えづらくなるので、変えるなら早めに変えてしまいたいですね。皆さんもお気に入りのユーザー名を手に入れましょう。
参考
- https://docs.github.com/account-and-profile/concepts/username-changes
- https://docs.github.com/account-and-profile/reference/email-addresses-reference
- https://docs.github.com/account-and-profile/reference/username-reference
- https://docs.github.com/site-policy/other-site-policies/github-username-policy
- https://docs.github.com/site-policy/github-terms/github-terms-of-service
- https://zetamatta.hatenablog.com/entry/2022/02/02/183120
- https://dangerous-animal141.hatenablog.com/entry/2014/05/05/000000