🦄

ディレクトリ切替で複数GitHubアカウントを自動管理する方法

に公開

SSH鍵とユーザー情報を同時管理して、ディレクトリ移動だけでGitHubアカウントを自動的に切り替えます。

概要

対象ユーザー:

  • 仕事用とプライベート用のGitHubアカウントを使い分けるのが面倒
  • アカウント切り替えのたびにSSH鍵やユーザー情報を手動で変える手間

仕組み :

  1. プロジェクトを置くディレクトリを分ける
    • 仕事用:~/git/work/
    • 個人用:~/git/personal/
  2. それぞれのディレクトリ専用のGitHub設定を作る
  3. ディレクトリに移動するだけで自動的に:
    • 適切なSSH鍵が使われる
    • 正しいユーザー名・メールアドレスが設定される

手順概要

  1. アカウントごとのSSH鍵を生成
  2. GitHubへの公開鍵登録
  3. SSHの設定ファイル作成
  4. Git設定の構成
  5. リポジトリ操作時のアカウント切り替え

詳細手順

1. SSH鍵の生成

メインアカウント用のSSH鍵生成

  1. ターミナルを開きます。
  2. 以下のコマンドを実行してSSHディレクトリに移動します。
cd ~/.ssh
  1. メインアカウント用のSSH鍵を生成します。
ssh-keygen -t ed25519 -C "main_email@example.com" -f id_ed25519_github_mainuser
  • -t ed25519: 使用する鍵のタイプ(現在推奨される安全なアルゴリズム)
  • -C "main_email@example.com": GitHub登録メールアドレス(あなたのメインアカウントのメールに置き換えてください)
  • -f id_ed25519_github_mainuser: 生成する鍵ファイルの名前
  1. パスフレーズを求められますので、強力なパスフレーズを入力します(推奨)。
  2. 生成された公開鍵をクリップボードにコピーします。
pbcopy < ~/.ssh/id_ed25519_github_mainuser.pub

サブアカウント用のSSH鍵生成

  1. 同様の手順でサブアカウント用のSSH鍵を生成します。
ssh-keygen -t ed25519 -C "sub_email@example.com" -f id_ed25519_github_subuser
- `C "sub_email@example.com"`: あなたのサブアカウントのメールアドレスに置き換えてください
- `f id_ed25519_github_subuser`: サブアカウント用の鍵ファイル名
  1. 別のパスフレーズを求められますので、強力なパスフレーズを入力します(推奨)。
  2. 生成された公開鍵をクリップボードにコピーします。
pbcopy < ~/.ssh/id_ed25519_github_subuser.pub

2. GitHubへの公開鍵登録

メインアカウントへの鍵登録

  1. Webブラウザで GitHub にアクセスし、メインアカウントでログインします。
  2. 右上のプロフィールアイコンをクリックし、Settings を選択します。
  3. 左側のサイドバーから SSH and GPG keys を選択します。
  4. New SSH key ボタンをクリックします。
  5. Title フィールドに識別しやすい名前(例:「Work Laptop - Main」)を入力します。
  6. Key フィールドに先ほどコピーした公開鍵を貼り付けます。
  7. Add SSH key ボタンをクリックして保存します。

サブアカウントへの鍵登録

  1. GitHub からメインアカウントをログアウトします。
  2. サブアカウントでログインします。
  3. 同様に右上のプロフィールアイコン > Settings > SSH and GPG keys に進みます。
  4. New SSH key ボタンをクリックします。
  5. Title フィールドに識別しやすい名前(例:「Work Laptop - Sub」)を入力します。
  6. Key フィールドにサブアカウント用の公開鍵を貼り付けます。
  7. Add SSH key ボタンをクリックして保存します。

3. SSH設定ファイルの作成

  1. テキストエディタで ~/.ssh/config ファイルを開きます。ファイルが存在しない場合は作成します。
touch ~/.ssh/config
vim ~/.ssh/config  # または任意のエディタ
  1. 以下の内容を追加します(既存の内容がある場合は末尾に追加):
# メインのGitHubアカウント設定
Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519_github_mainuser
  User git

# サブのGitHubアカウント設定
Host github-sub
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519_github_subuser
  User git

この設定では:

  • Host github github.com: デフォルトのGitHub接続に使用する識別子
  • Host github-sub: サブアカウント用の接続に使用する識別子
  • IdentityFile: それぞれのアカウント用の秘密鍵ファイルのパス
  1. ファイルを保存して閉じます。
  2. SSH設定ファイルのパーミッションを適切に設定します。
chmod 600 ~/.ssh/config

4. 接続テスト

メインアカウントの接続テスト

  1. 以下のコマンドを実行してメインアカウントへの接続をテストします。
ssh -T github
  1. 初回接続時は、ホストの認証確認が表示されます。yes と入力して続行します。
  2. 秘密鍵のパスフレーズを求められた場合は入力します。
  3. 正常に接続できた場合、以下のようなメッセージが表示されます:
Hi mainusername! You've successfully authenticated, but GitHub does not provide shell access.

サブアカウントの接続テスト

  1. 同様にサブアカウントへの接続をテストします。
ssh -T github-sub
  1. 初回接続時は、ホストの認証確認が表示されます。yes と入力して続行します。
  2. 秘密鍵のパスフレーズを求められた場合は入力します。
  3. 正常に接続できた場合、以下のようなメッセージが表示されます:
Hi subusername! You've successfully authenticated, but GitHub does not provide shell access.

5. Git設定の構成

ディレクトリ構造の準備

  1. プロジェクトを整理するためのディレクトリ構造を作成します。
mkdir -p ~/git/main  # メインアカウント用のプロジェクトを格納するディレクトリ
mkdir -p ~/git/sub   # サブアカウント用のプロジェクトを格納するディレクトリ

グローバル設定

  1. .gitconfig にグローバル設定を行います。
vim ~/.gitconfig  # または任意のエディタ
  1. 以下の内容を追加します:
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[user]
    name = メインアカウントのユーザー名
    email = main_email@example.com

[includeIf "gitdir:~/git/main/"]
    path = ~/git/main/.gitconfig

[includeIf "gitdir:~/git/sub/"]
    path = ~/git/sub/.gitconfig

この設定では:

  • デフォルトの user 情報をメインアカウントに設定
  • includeIf ディレクティブを使用して、特定のディレクトリでは別の設定ファイルを読み込む
  1. ファイルを保存して閉じます。

メインアカウント用プロジェクト設定

  1. メインアカウント用のディレクトリに専用の .gitconfig を作成します。
vim ~/git/main/.gitconfig
  1. 以下の内容を追加します:
[user]
name = メインアカウントのユーザー名
email = main_email@example.com
  1. ファイルを保存して閉じます。

サブアカウント用プロジェクト設定

  1. サブアカウント用のディレクトリに専用の .gitconfig を作成します。
vim ~/git/sub/.gitconfig
  1. 以下の内容を追加します:
[user]
name = サブアカウントのユーザー名
email = sub_email@example.com
  1. ファイルを保存して閉じます。

使い方(リポジトリの操作)

メインアカウントのリポジトリ操作

  1. メインアカウントのプロジェクトディレクトリに移動します。
cd ~/git/main/
  1. メインアカウントのリポジトリをクローンします。
git clone git@github.com:mainusername/repository.git
  1. クローンしたディレクトリに移動します。
cd repository
  1. 設定が正しく適用されているか確認します。
git config --get user.name  # メインアカウントのユーザー名が表示されるはず
git config --get user.email  # メインアカウントのメールアドレスが表示されるはず
  1. 通常通り、変更をコミットしてプッシュすることができます。
git add .
git commit -m "メッセージ"
git push origin main

サブアカウントのリポジトリ操作

  1. サブアカウントのプロジェクトディレクトリに移動します。
cd ~/git/sub/
  1. サブアカウントのリポジトリをクローンします。注意:ホスト名を github-sub に変更して使用します。
git clone git@github-sub:subusername/repository.git
  1. クローンしたディレクトリに移動します。
cd repository
  1. 設定が正しく適用されているか確認します。
git config --get user.name  # サブアカウントのユーザー名が表示されるはず
git config --get user.email  # サブアカウントのメールアドレスが表示されるはず
  1. 通常通り、変更をコミットしてプッシュすることができます。
git add .
git commit -m "メッセージ"
git push origin main

新規リポジトリの作成とプッシュ

  1. サブアカウントで新しいリポジトリを作成する場合:

a. GitHub上でリポジトリを作成します(Webインターフェース)。

b. ローカルでプロジェクトディレクトリを作成します。

cd ~/git/sub/
mkdir new-project
cd new-project

c. Gitリポジトリを初期化します。

git init

d. 設定を確認します。

git config -l

e. リモートリポジトリを設定します(サブアカウント用のホスト名を使用)。

git remote add origin git@github-sub:subusername/new-project.git

f. ファイルを追加してコミットします。

echo "# New Project" > README.md
git add README.md
git commit -m "Initial commit"

g. メインブランチを設定してプッシュします。

git branch -M main
git push -u origin main

既存リポジトリの接続先変更

既存のリポジトリを別のアカウントで操作したい場合は、リモートURLを変更します。

  1. リポジトリのディレクトリに移動します。
cd path/to/repository
  1. 現在のリモートURLを確認します。
git remote -v
  1. リモートURLを変更します。
# メインアカウントに変更する場合
git remote set-url origin git@github.com:mainusername/repository.git

# サブアカウントに変更する場合
git remote set-url origin git@github

Discussion