【GitHub】複数アカウント管理のための効率的な設定方法

GitHubで複数のアカウントを持っている方に向けて、アカウント切り替えの手間を軽減する設定方法を備忘録として共有します。

2024年05月08日

最近、個人プロジェクトと社用プロジェクトを横断して作業する機会が増え、それぞれのアカウントでの設定を都度切り替えるのが非常に面倒に感じていました。より効率的な方法を模索した結果、うまく機能する方法を見つけることができたので、その方法を備忘録として共有します。

対象者

  • 複数のGitHubアカウントを持っている(または持つ予定のある)方
  • 設定変更の手間を減らしたい方

ファイルとディレクトリ構成

以下のファイル、ディレクトリ構成を前提に進めます。

.gitconfig
.gitconfig-personal
.gitconfig-company1
.gitconfig-company2
.ssh/
Workspace
├── personal
│   ├── Repo1/
│   └── Repo2/
├── company1
│   ├── Repo1/
│   └── Repo2/
└── company2
     ├── Repo1/
     └── Repo2/

アカウント別設定

Workspace以下のディレクトリごと(GitHubアカウントごと)にgithubの設定ファイルを分けています。

例)個人用設定例

# ~/.gitconfig-personal

[user]
    name = Personal
    email = personal@xxx.com

例)会社用設定例

# ~/.gitconfig-company1

[user]
    name = company1
    email = company1@yyy.com
# ~/.gitconfig-company2

[user]
    name = company2
    email = company2@zzz.com

設定の自動適用

それぞれの設定ファイルを .gitconfig ファイルで pathを明示的に配置していきます。

# ~/.gitconfig

~~その他の設定~~

[includeIf "gitdir:~/Workspace/personal/"]
	path = ~/.gitconfig-personal
[includeIf "gitdir:~/Workspace/company1/"]
	path = ~/.gitconfig-company1
[includeIf "gitdir:~/Workspace/company2/"]
	path = ~/.gitconfig-company2

これでそれぞれのプロジェクトでのgitユーザーが、アカウント別に設定されているはずです。

Personal Access Token

せっかくアカウント別に分けたので、Personal Access Tokenもここで設定しておきたい。

アカウント別にSSHキーの作成

まず、各GitHubアカウントに対して異なるSSHキーを生成します(すでにキーがある場合はこのステップは不要です)。
次のコマンドを使用してキーを生成できます。

# それぞれのアカウントごとに生成
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

コマンドを実行する際に、キーにユニークな名前を指定するよう求められます(例:id_personal_github)。

GitHubにSSHキーを追加

対象のアカウントにログインし、こちら にアクセスし、 生成したSSHキーの公開キー(例:id_personal_github.pub)をGitHubアカウントに追加します。

# 公開鍵のコピー
pbcopy < ~/.ssh/id_personal_github.pub

そして、 ~/.ssh/config ファイルを編集(または作成)し、GitHubのホストごとに異なるSSHキーを指定します。以下は設定例です。

# Personal
Host github.com-personal
  HostName github.com
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_personal_github

# Company1
Host github.com-company1
  HostName github.com
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_company1_github
  
# Company2
Host github.com-company2
  HostName github.com
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_company2_github

Host はアカウント別に任意の識別名を使い、IdentityFile で使用するキーのパスを指定します。

Gitリポジトリでの設定

リポジトリの設定を変更して、正しいSSH設定を使用するようにします。

git remote set-url origin git@github.com-personal:personal/Repo.git

※ github.com-personal は上述のSSH設定ファイルに設定したHostの識別名です。

筆者情報
IT業界経験6年目のフルスタックエンジニア。
フロントエンドを軸として技術を研鑽中でございます。