GitHubアカウントを使い分けたい

Published
Aug 3, 2025
Volume
12 min read
Tag
Dev

はじめに

会社の人とも GitHub アカウントを共有する機会があったので、仕事用の GitHub アカウントを新たに作成し、プライベートと仕事用でそれぞれアカウントを使い分けるときに快適にアカウントの切り替えができるように設定を行いました。 その中で行き詰まった点がいくつかあったので、それを振り返りながらメモとして残しておこうと思った次第です。

本記事は現在使用している GitHub アカウントを Private 用とし、2 つ目の会社用 GitHub アカウントを新たに追加することを前提として説明を行なっております。

動作環境

  • マシン : M1 MacBookAir
  • OS : MacOS Sequoia
  • シェル : zsh 5.9 (x86_64-apple-darwin24.0)

手順

新しい SSH 鍵(公開鍵と秘密鍵)を生成する。

# ~
# .sshディレクトリに移動
cd ~/.ssh
# shell:~/.ssh
# .sshディレクトリに移動
ssh-keygen -t ed25519 -C "[email protected]"

ssh-keygen -t rsa -b 4096 -C "[email protected]"を実行すると、以下のメッセージが表示されるのでそれぞれに答えた後、SSH 鍵(公開鍵・秘密鍵)が生成されます。

Enter file in which to save the key (/Users/user/.ssh/id_ed25519):のファイル名は任意と記載しているが、同一ファイルの場合は上書きされてしまう為、既存の Private 用のファイル名と被らないように名前を設定しましょう。

# ~/.ssh
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/user/.ssh/id_ed25519): work # Work用のファイル名を入力(ファイル名は任意)
Enter passphrase (empty for no passphrase): # [Type a passphrase]
Enter same passphrase again: # [Type passphrase again]

鍵が生成されていることを確認する。

# ~/.ssh
ls
private    private.pub    work    work.pub    known_hosts

生成された SSH キー(公開鍵)を GitHub アカウントへ追加する

work アカウントの公開鍵をコピ-する。

# ~
cat ~/.ssh/work.pub
# ~/.ssh/work.pub
ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

以下 URL にアクセスして、「New SSH Key」をクリック https://github.com/settings/keys

  • 「Title」は任意
  • 「Key type」はそのまま。
  • 「Key」は先ほどコピーした work.pub の中身をコピペする。

入力完了後、「Add SSH Key」をクリックして完了。

config ファイルの設定

どの SSH 鍵を使用してどの GitHub アカウントにアクセスするかを区別するためです。 ここでは、Private 用と Work 用を自動的に使い分けられるように config ファイルの設定を行います。 Vim で config ファイルを編集する。

# ~/.ssh
vi config
# ~/.ssh/config
# privateアカウント
Host github-private
  HostName github.com
  IdentityFile ~/.ssh/private # privateアカウントの秘密鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

# workアカウント
Host github-work
  HostName github.com
  IdentityFile ~/.ssh/work # workアカウントの秘密鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

設定の意味

  • Host: 識別名です。リポジトリのリモート URL でこの名前を使います。
  • HostName: 実際のホスト名です。GitHub なら github.com。
  • User: SSH 接続時のユーザー名。Git では常に git になります。
  • IdentityFile: この接続に使用する SSH キーのパスです。個人アカウントと仕事用アカウントで別々のキーを指定します。
  • User: SSH 接続に使うユーザー名です。GitHub の場合は常に git です。
  • Port: SSH 接続に使用するポート番号です。標準の SSH ポートである 22 が指定されています。
  • TCPKeepAlive: 接続が自動で切れないように、TCP 接続を定期的に保つ設定です。yes にすると、SSH 接続が長時間アイドル状態になっても維持されやすくなります。
  • IdentitiesOnly: 明示的に指定した鍵のみを使用するオプションです。これにより、他の SSH 鍵が自動的に試されるのを防ぎます。

上記の設定を行ったら、:wqで保存して終了する。

接続確認

下記コマンドで SSH 接続ができるか確認する。

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

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

上記の通り出力されたら OK。

ディレクトリごとに GitHub アカウントを切り替える

Git アカウントを複数管理していると、アカウント切り替えが非常に面倒になります。これを解決してくれるのが、includeIfです。

1. ~/.gitconfig に次を追加

[includeIf "gitdir:~/work/"] 
    path = ~/.gitconfig_work

この設定は、~/work/ 配下のリポジトリに対して、特定の Git 設定(ここでは~/.gitconfig_work)を適用するためのものです。

2. ~/.gitconfig_work を作成

[user]
    name = work.name // Work用
    email = [email protected]

3. リモート URL 変換の設定を追加

メインの ~/.gitconfig に以下を追加します。

[url "git@github-work:"]
    insteadOf = [email protected]:

4. いざ実証

Work ディレクトリに移動してリポジトリをクローンします。

cd ~/work
git clone "[email protected]:username/repository.git"

クローンが成功したら、リモート URL が正しく設定されているか確認しましょう

cd repository
git remote -v

以下のようにgit@github-work:が表示されれば成功です。

origin  git@github-work:username/repository.git (fetch)
origin  git@github-work:username/repository.git (push)