🐙

複数のGitHubアカウントを使い分けたい時の設定方法とTips

2021/07/04に公開
2

概要

この記事では、複数の GitHub アカウントを使い分ける方法について解説しています。
仕事とプライベートで GitHub アカウントを使い分けたいなと思っている方のお役に立てれば幸いです。

この記事の説明は、「すでに GitHub を使用していて新たに 2 つ目の GitHub アカウントを追加したい」というユースケースにおける説明になっています。

それでは頑張っていきましょう!

動作環境

  • マシン: M1 Mac mini
  • OS: macOS Big Sur
  • シェル:zsh 5.8

秘密鍵・公開鍵を生成する

新しい GitHub アカウント用に秘密鍵・公開鍵を生成します。
ターミナルを起動し、以下のコマンドを順に実行します。

~
#.sshディレクトリに移動
% cd ~/.ssh
~/.ssh
#鍵を生成
% ssh-keygen -t rsa

既存の GitHub アカウントで公開鍵認証をしている場合は、ホームディレクトリの直下に.sshディレクトリが存在するはずです。
ssh-keygen -t rsaを実行すると、以下のような対話形式 3 つの質問に答えたのち、鍵が生成されます。

~/.ssh
% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_sub_rsa #既存のファイル名とは異なる任意のファイル名を指定する
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

GitHub を複数アカウントを使用する際には、1 つ目の質問が非常に重要です。
生成する鍵のファイル名は必ず既存のファイル名とは異なる名前をつけなければいけません。

1 つ目の質問では、「id_rsaというファイル名で鍵と生成していいですか?」と聞かれてます。
すでにid_rsaというファイル名で鍵を生成している場合は、そのファイルの中身が上書きされてしまいます。
そのため、ここでは既存の鍵のファイル名とは異なるファイル名を指定してあげる必要があります。

id_sub_rsaなどの任意の名前をつけましょう。

パラフレーズの設定は、こだわりがなければスルーして OK です。

鍵が生成されていることを確認しましょう。

~/.ssh
% ls
id_rsa    id_rsa.pub    id_sub_rsa    id_sub_rsa.pub    known_hosts

生成された公開鍵の方を GitHub に渡す作業を忘れずに行っておきましょう。

こちらの記事が参考になります。

configファイルに設定を書き込む

~/.ssh/configファイルがない場合は、以下のコマンドで空のconfigファイルを作成します。

~/.ssh
% touch config

Vim でconfigファイルに設定を書き込みます。Vim でファイルを開きましょう。

~/.ssh
% vi config

Vim で開いたら以下のように設定を記述します。
わかりやすいように、既存のアカウントを「メインアカウント」、新たに追加したいアカウントを「サブアカウント」としています。

~/.ssh/config
#メインアカウント
Host github #任意のホスト名
  HostName github.com
  IdentityFile ~/.ssh/id_rsa #メインアカウントの鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

#サブアカウント
Host github-sub #任意のホスト名
  HostName github.com
  IdentityFile ~/.ssh/id_sub_rsa #サブアカウントの鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

上記の設定での変数は 2 つです。

Hostには、任意のホスト名を設定します。これはリモートとの接続を行う際に使用します。
IdentityFileには、アカウントごとの秘密鍵の場所を記述します。

これらの設定により、それぞれのアカウントでの公開鍵認証を行うことができます。
記述したら、:wqで保存して終了しましょう。

GitHub との接続を確認する

それぞれの GitHub アカウントとの接続を確認しましょう。
ここで先ほど~/.ssh/configファイルに記述したHost名を使用します。

ssh -T [Host]とすることで、それぞれのアカウントとの接続を確認できます。

#メインアカウントの接続を確認する
% ssh -T github
Hi [メインアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

#メインアカウントの接続を確認する
% ssh -T github-sub
Hi [サブアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

このようにそれぞれのアカウントのアカウント名が表示されて、接続がうまくいっていれば OK です。

アカウントの切り替え

ターミナル上で GitHub のアカウントを切り替える際は、git config --globalコマンドを使用します。

% git config --global user.name "[GitHubアカウント名]"
% git config --global user.email "[GitHubのメールアドレス]"

毎回これで切り替えるのは面倒なので、shell コマンドを作りましょう。

~/.zshrcファイルに関数を書きます。
vi ~/.zshrcを実行し、Vim でファイルを開きます。

~/.zshrc
function gitmain() {
  git config --global user.name "[メインのGitHubアカウント名]"
  git config --global user.email "[メインのGitHubのメールアドレス]"
}

function gitsub() {
  git config --global user.name "[メインのGitHubアカウント名]"
  git config --global user.email "[メインのGitHubのメールアドレス]"
}

これでgitmaingitsubと実行するだけで、アカウントを切り替えられるようになりました。もちろん shell コマンドの名前は、任意の名前に変えてもらって構いません。

アカウントが切り替わっているかどうかは

git config user.name
git config user.email

で確認することができます。

【2021/7/6 追記】ディレクトリごとに GitHub アカウントを自動的に切り替える設定

コメントいただいたので、設定方法を追記しました。
~/.gitconfigファイルに設定を追加することで、ディレクトリごとに GitHub アカウントを自動的に切り替えることができるようになります。
例えば、プライベートな開発を行うディレクトリでは、自動的にプライベートの GitHub アカウントを使用することができます。

それでは手順を説明していきます。

既に存在するであろう~/.gitconfigファイルには、メインアカウントの情報を記載します。

~/.gitconfig
[user]
	name = [メインアカウント名]
	email = [メインアカウントのメールアドレス]

新たに、~/.gitconfig_subなど任意の名前で Git の config ファイルを作成します。

#空の~/.gitconfig_subを作成
% touch ~/.gitconfig_sub

#Vimで編集
% vi ~/.gitconfig_sub

~/.gitconfig_subファイルの中には、サブアカウントのユーザー名とメールアドレスを記載します。

~/.gitconfig_sub
[user]
	name = [サブアカウント名]
	email = [サブアカウントのメールアドレス]

2 つの config ファイルを用意したら、~/.gitconfigファイルに設定を追記します。

~/.gitconfig
  [user]
    name = [メインアカウント名]
    email = [メインアカウントのメールアドレス]

+ [includeIf "gitdir:~/path/to/your-private/"]
+   path = ~/.gitconfig_sub

この設定を追記することで、gitdir:の後ろで設定したディレクトリの中にあるプロジェクトでは、デフォルトの~/.gitconfigファイルではなく新たに作成した~/.gitconfig_subファイルの中に記載したアカウントに切り替わります。
指定したディレクトリ以外では、引き続き~/.gitconfigファイルに記載されているアカウントが使用されます。
仕事とプライベートでディレクトリを切り分けている方にはおすすめだと思いました。

指定したディレクトリから外れた場所で、アカウントを切り替えたい場合は引き続き~/.zshrcで定義した shell コマンドを使用すると良いでしょう。

こちらもぜひ試してみてください。

リモートと接続する際の注意点

1 つの PC 上で複数の GitHub アカウントを使用している場合は、リモートと接続する際に注意点があります。

リモートとの接続を行う場合は、~/.ssh/configで設定した Host 名を用いて接続を行う必要があります。

通常リモートと接続する際は、git remote add origin git@github.com:<アカウント名>/<リポジトリ名>.gitとします。
しかし、複数アカウントを使用している場合にgit@github.comとしてしまうと、「どっちの GitHub アカウントですか?」となってしまいます。

そこで、~/.ssh/configで設定したHost名を使用します。

#メインアカウントのリモートと接続
% git remote add origin git@github:<アカウント名>/<リポジトリ名>.git

#メインアカウントのリモートと接続
% git remote add origin git@github-sub:<アカウント名>/<リポジトリ名>.git

git@[Host名]:~とすることで、アカウントを区別してリモートと接続ができます。
リモートとの接続の際は気をつけてください。

以上が、GitHub アカウントを使い分ける際の全手順でした。

【Tips】ターミナル上でどちらの GitHub アカウントを使用しているか表示する

自分の設定を Tips として紹介します。
2 つのアカウントを切り替えて使用していると、どちらのアカウントを使っているのかわからなくなりそうだったので、常にターミナルに表示するようにしました。

ターミナルの見た目を変更するコードに書き加える方になりますので、詳しく知りたい方はこちらの記事が参考になります。

設定は~/.zshrcファイルに書きます。

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

この設定を書くことで、ターミナルの見た目を以下の画像のように変更することができます。

<`git config user.name`>という設定によりカレントディレクトリの隣に<アカウント名>と表示されるようになります。

このままでは、アカウントを切り替えても<アカウント名>の表示が切り替わらないので、先ほど作成したアカウントを切り替える関数にコードを追加します。

~/.zshrc
  function gitmain() {
    git config --global user.name "[メインのGitHubアカウント名]"
    git config --global user.email "[メインのGitHubのメールアドレス]"
+   source ~/.zshrc
  }

  function gitsub() {
    git config --global user.name "[メインのGitHubアカウント名]"
    git config --global user.email "[メインのGitHubのメールアドレス]"
+   source ~/.zshrc
  }

gitmaingitsubといった関数名は、好きに変更してもらって構いません。
アカウントの切り替えと同時に毎回~/.zshrcファイルを読み込ませることで、以下のように<アカウント名>の表示も切り替わります。

[~] <メインアカウント名>
=> % gitsub

[~] <サブアカウント名>
=> % gitmain

[~] <メインアカウント名>
=> %

ぜひ試してみてください。

【Tips】VSCode の GitHub アカウントを使い分ける

普段 VSCode をエディタとして使用しているかたは、VSCode と GitHub も連携しているかと思います。
いちいちサインアウトして別のアカウントでサインインし直すのも面倒ですよね。

VSCode でも 2 つの GitHub アカウントを使い分けたい方におすすめなのが「Visual Studio Code Insiders」です。
こちらからダウンロードできます。

VSCode Insiders は、簡単にいうと VSCode のベータ版です。緑色の VSCode のアイコンです。

VSCode と VSCode Insiders は、それぞれアプリとして独立しているため、別の GitHub アカウントでログインすることができます。
また、拡張機能なども安定板の VSCode とは別のものを入れることができるので、それぞれの作業環境を構築することができます。

まとめ

今回は、1 つの PC で GitHub アカウントを使い分ける方法について解説してみました。
仕事でもプライベートでも快適な開発を行っていきたいと思います!

最後まで読んでいただきありがとうございました。それではまた。

GitHubで編集を提案

Discussion

しんのすけしんのすけ

includeIfを使うとディレクトリ単位でGitの設定を変更できるのでおすすめです。
自分は下記のように設定しています。

[includeIf "gitdir:~/development/company/"]
	path = .gitconfig_company
[includeIf "gitdir:~/development/private/"]
	path = .gitconfig_private

https://git-scm.com/docs/git-config#_conditional_includes