🔑

Macで複数のGitHubアカウントを使い分ける(SSH + プロジェクト単位のauthor設定)

に公開

🎯 ゴール

  • 複数の GitHub アカウント(例:個人用・仕事用)を Mac で安全に使い分ける
  • SSH 接続をアカウントごとに設定
  • プロジェクト単位で user.name / user.email を固定して、誤ったアカウントでコミット・push しないようにする

🧱 手順の全体像

  1. SSHキーをアカウントごとに作成
  2. ~/.ssh/config にHost別設定を記述
  3. GitHub に公開鍵を登録
  4. 接続確認
  5. 各プロジェクトで git config --local を設定

1. SSH鍵を作成 (Ed25519)

GitHub公式も推奨しているEd25519方式で作成します。
RSAよりもセキュリティと速度のバランスが良く、今後はこちらが主流です。

# 個人アカウント用
ssh-keygen -t ed25519 -C "personal@example.com" -f ~/.ssh/id_ed25519_personal

# 仕事アカウント用
ssh-keygen -t ed25519 -C "work@example.com" -f ~/.ssh/id_ed25519_work

作成後、SSHエージェントに登録(macOS):

eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_personal
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work

2. ~/.ssh/config の設定

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  UseKeychain yes
  AddKeysToAgent yes

Host work.github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  UseKeychain yes
  AddKeysToAgent yes

ポイント:

  • Host 名に別名をつけることで、アカウントを切り替えられる(work.github.com など)
  • UseKeychain yes により再起動後もパスフレーズ入力が不要になる

3. GitHub に公開鍵を登録

各アカウントでログインし、
Settings → SSH and GPG keys → New SSH key から以下を追加。

# 公開鍵をコピー
pbcopy < ~/.ssh/id_ed25519_personal.pub
pbcopy < ~/.ssh/id_ed25519_work.pub

4. 接続確認

ssh -T github.com
ssh -T work.github.com

Hi <username>! You’ve successfully authenticated... が出ればOK。


5. プロジェクト単位で author を固定(重要)

SSHで接続先を切り替えても、Gitのコミットユーザー設定は別途必要です。
誤ったメールアドレスでコミットしないよう、リポジトリごとに設定しておきます。

# 各プロジェクトのルートで実行
git config --local user.name  "Your Work Name"
git config --local user.email "work@example.com"

# 設定漏れ防止(グローバル設定を使わない)
git config --global user.useConfigOnly true
git config --global --unset user.email
git config --global --unset user.name

確認:

git config --get user.name
git config --get user.email

これで、そのプロジェクトでは常に指定したアカウント情報が使われるようになります。


6. リポジトリのclone例

# 個人用アカウント
git clone git@github.com:<personal-username>/<repo>.git

# 仕事用アカウント
git clone git@work.github.com:<work-username>/<repo>.git

既存リポジトリのリモートURLを切り替える場合:

git remote set-url origin git@work.github.com:<work-username>/<repo>.git

7. (応用)ディレクトリ単位で自動切替する

同じフォルダ配下に複数の仕事用リポジトリを置くなら、
~/.gitconfig の includeIf を使って自動的に author を切り替える方法もあります。

# ~/.gitconfig
[user]
  name  = Your Personal Name
  email = personal@example.com

[includeIf "gitdir:~/work/"]
  path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
  name  = Your Work Name
  email = work@example.com

~/work/ 以下にあるすべてのリポジトリで自動的に仕事用設定が反映されます。


🔗 参考資料


🧭 まとめ

  • ~/.ssh/config でアカウントをHost別に分ける
  • 各プロジェクトで git config --local user.email を固定することで コミットの誤り防止
  • 長期的には includeIf による自動切替も便利

この設定をしておけば、個人・業務・OSS のすべてで安全にGitHubを使い分けられます。

Discussion