GitHubアカウントを簡単に切り替える方法

仕事とプライベートで GitHub アカウントを使い分けている人は多いと思います。
自分も使い分けていていたのですが、プライベートのGitHubアカウントで接続したまま、Gitにpushしてしまい、プライベートのアカウントの写真が見られて恥ずかしい思いをしました。

なので、GitHubアカウントを簡単に切り替える方法を調査したので、その方法をここに記しておこうと思います。
コマンド一つで切り替える方法やファルダ別で自動で切り替え設定する方法も記しています。

*Macでの方法になります。

SSHキーを作成する

以下がGitHubのドキュメントです。

GitHub アカウントへの新しいSSHキーの追加

ターミナルを起動し、`.ssh`ディレクトリに移動します。

$ cd ~/.ssh

以下のテキストを貼り付け、例で使用されているメールを GitHub メール アドレスに置き換えます。

$ ssh-keygen -t ed25519 -C "your_email@example.com"

これにより、以下の内容が表示されます。

> Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM):
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

1つ目が、ファイル名です。id_privateなど好きなファイル名に変更できます。
デフォルトはid_ALGORITHMになると思います。

2つ目と3つ目は、パスワード設定です。パスワードが必要なければEnterで飛ばします。
詳しくはこちら

これにより、SSHキーが作成されます。lsコマンドで確認しておきましょう

$ ls
> id_rsa  id_rsa.pub  id_private id_private.pub

SSH キーを ssh-agent に追加する

バックグラウンドでssh-agentを開始します。

$ eval "$(ssh-agent -s)"
> Agent pid 59566

ssh-agentが起動できたら、Configファイルを開きます。

$ open ~/.ssh/config

ファイルがない場合は、ファイルを作成します。

$ touch ~/.ssh/config

~/.ssh/configファイルを開き、以下のように編集します。
よく使うアカウントは、Hostgithub.comにしておくと良いと思います。
ファイルのパスは、先ほど作成したSSHキーのファイル名に変更してください。

# お仕事用
Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa #お仕事用アカウントの鍵のファイル

# プライベート用
Host github.com.private
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_private #プライベートアカウントの鍵のファイル

SSH キーを ssh-agent に追加します。
SSH キーのファイル名は、先ほど作成したファイル名に変更してください。

$ ssh-add ~/.ssh/id_private

パスフレーズを使用した場合は、パスフレーズをキーチェーンに保存するために--apple-use-keychainを追加して実行します。

$ ssh-add --apple-use-keychain ~/.ssh/id_private

GitHub で自分のアカウントに SSH 公開キーを追加しておきます。
詳しくはこちら

GitHubでの設定が完了したら、GitHubとの接続を検証します。
configファイルで設定したHostで接続を検証できます。

お仕事用

$ ssh -T github.com

プライベート用

$ ssh -T github.com.private

SSHの接続方法

通常は以下のようにクローンします。お仕事用はこれで問題ないです。

$ git clone git@github.com:<アカウント名>/<リポジトリ名>.gitgit
$ git remote add origin git@github.com:<アカウント名>/<リポジトリ名>.git

プライベート用は以下のようにgithub.comgithub.com.privateHostでつけた値にする必要があります。

$ git clone git@github.com.private:<アカウント名>/<リポジトリ名>.gitgit
$ git remote add origin git@github.com.private:<アカウント名>/<リポジトリ名>.git

アカウントの切り替え

GitHubアカウント名とメールアドレスで切り替えできます。
ターミナル上で 以下のコマンドを使用し切り替えが可能です。

$ git config --global user.name `{GitHubのアカウント名}`
$ git config --global user.email `{GitHubのメールアドレス}`

アカウントをコマンド一つで切り替える

ただ、先ほどのコマンドを毎回使用するのは面倒なので、コマンド一つで切り替えるように shell コマンドでまとめておきます。

$ open ~/.zshrc

.zshrcファイルを開き以下の shell コマンドを作成します。

function gitwork() {
  git config --global user.name `{GitHubのアカウント名}`
  git config --global user.email `{GitHubのメールアドレス}`
}

function gitprivate() {
  git config --global user.name `{GitHubのアカウント名}`
  git config --global user.email `{GitHubのメールアドレス}`
}

この様にすると、gitworkgitprivateを実行するだけで切り替えができます。
ファイルを実行しておきます。

$ source ~/.zshrc

ファルダ別で自動で切り替え設定する

ファルダ別にGitHubアカウントを自動的に切り替えることも可能です。
これで、privateファルダ内でのGitHubへの接続は、自動的にプライベート用に切り替えて操作ができます。

$ open ~/.gitconfig

~/.gitconfigファイルを開き、デフォルトの接続アカウントを設定します。ここでは仕事用をデフォルトにします。

[user]
	name = GitHubのアカウント名
	email = GitHubのメールアドレス

プライベート用のファイルを作成し開いて、同じようにアカウント情報を記載します
privateの部分は好きな名前で大丈夫です。

$ touch ~/.gitconfig_private
$ open ~/.gitconfig_private
[user]
	name = GitHubのアカウント名
	email = GitHubのメールアドレス

もう一度、~/.gitconfigファイルを開いて、先ほど作成したプライベート用のパスを読み込ませます。
gitdirの後は、フォルダのパスです。

[includeIf "gitdir:~/Desktop/private"]
	path = ~/.gitconfig_private

これでDesktop/private配下でのGitHubへのアクションは、自動的にプライベート用に切り替えて操作ができます。

どちらに接続しているか常に分かるようにしておく

どのGitHubアカウントに接続しているか常に分かるようターミナル上で表示をカスタマイズすることも可能です。こうすることで限りなくミスを減らせます。

gitwork $ git push origin # お仕事用アカウントに接続中
gitprivate $ git push origin # プライベート用に接続中

.zshrcファイルを開きます。

$ open ~/.zshrc

以下のように変更します。git config user.nameではなくgit config user.emailでも大丈夫だと思います。

export PROMPT="
%F{green}[%~]%f `git config user.name`
=> %# "
RPROMPT='%*'

アカウントを切り替えたタイミングでファイルを実行するようにしておきます。

function gitwork() {
  git config --global user.name `{GitHubのアカウント名}`
  git config --global user.email `{GitHubのメールアドレス}`
  source ~/.zshrc 
}

function gitprivate() {
  git config --global user.name `{GitHubのアカウント名}`
  git config --global user.email `{GitHubのメールアドレス}`
  source \~/.zshrc
}

.zshrcを保存しファイルを実行しておきます。

$ source ~/.zshrc

これによりターミナルの表示をカスタマイズできていると思います。

VSCodeにも反映させる

VSCodeに反映させるには、以下のコマンドでシェルをZshに変更します。デフォルトはBashだと思います。

$ zsh
AIへの質問や指示のプロンプト共有コミュニティ Promptolkクリエイターのための情報共有コミュニティ Utan