複数のGitHubアカウントを使い分ける方法

はじめに

最近、社内で自社サービスの開発が活発になってきました。 自分も開発に関わりたいと思った矢先、最初に悩まされたのは GitHub アカウントの管理です。

これまでは個人と会社のアカウントが混ざるのを防ぐため物理的に PC を分けて対応していたのですが、複数の PC を揃えるコストや異なる OS を行き来する手間を考えると2台運用はなかなか大変です。

そこで今回は1台の PC 上で複数の GitHub アカウントを切り替えて運用する方法を調べたので、設定手順を共有します。

なお、今回の手順では SSH の鍵切り替えなどを省略するため HTTPS が前提となっています。

事前準備

GitHub CLI をインストールする

brew install gh

Mac を使用している方は上記コマンドでインストールすることができます。 インストールした後は以下の記事を参考にアカウントの認証を行ってください。

【環境構築】wsl2-から-github-cli-を使って認証を行うまで

GitHub.com に複数アカウントでログイン

画面右上のプロフィールアイコンをクリックすると、表示されるダイアログ右上に「Account switcher」のアイコンがあり、「Add account」からアカウントを追加することでブラウザ上で複数のアカウントを切り替えられるようになります。

GitHub CLI による複数アカウントの認証

現在のステータスを確認

gh auth status
github.com
  ✓ Logged in to github.com account xxxxxx (keyring)
  - Active account: true
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo', 'workflow'

ターミナル上で gh auth status を実行することで、現在ログインしているアカウントを確認できます。

アカウントを追加

※ ディレクトリ単位でアカウントを自動切り替えしたい場合はこの手順をスキップしてください

gh auth login
? Where do you use GitHub? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: XXXX-XXXX
Press Enter to open <https://github.com/login/device> in your browser... 
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as motoki-hirayama-isub

ターミナル上で gh auth login を実行することで、ブラウザが立ち上がり追加したいアカウントが選択できるようになっています。

アカウントの認証が完了したら再度 gh auth status を実行します。

gh auth status
github.com
  ✓ Logged in to github.com account motoki-hirayama-isub (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

  ✓ Logged in to github.com account xxxxxx (keyring)
  - Active account: false
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo', 'workflow'

追加したアカウントが表示されていることが確認できました。

追加したアカウントを切り替える

手動切り替え

gh auth switch

上記コマンドを実行することでアカウントを切り替えることができます。

gh auth switch --user アカウント名

アカウントを指定して切り替えたい場合は –user でアカウント名を指定できます。

自動切り替え

direnv を使用してディレクトリごとの環境変数を作成することで、アカウントの自動切り替えを実現します。 私の環境では ghq を使ってリポジトリを管理しているため、ghq/github.com/isub-inc に対して環境変数を設定します。

https://github.com/x-motemen/ghq

eza --tree --git-ignore --level=3
.
└── github.com
    ├── isub-inc
    │   └── vivaya_web
    └── xxxxxx
        └── dotfiles

direnv をインストール

https://github.com/direnv/direnv

brew install direnv

初期設定

# 以下を .zshrc へ追記
eval "$(direnv hook zsh)" 

# 設定を反映
source ~/.zshrc

環境変数の設定

会社用のディレクトリ配下(ghq/github.com/isub-inc/ など)に .envrc を作成し以下を記述します。

export GH_CONFIG_DIR="$HOME/.config/gh-work"

初回保存時は以下のようなエラーが出ますが、指示通り direnv allow を実行しておきます。

vim .envrc

direnv: error ghq/github.com/isub-inc/.envrc is blocked.
Run `direnv allow` to approve its content

これで direnv によって GitHub CLI が参照する設定ファイルが切り替わりました。

gh auth login

このディレクトリ用の設定を作成するために、再度 GitHub CLI による認証を行います。

このように設定することで、特定のディレクトリ配下では $HOME/.config/gh-work を参照し、それ以外のディレクトリでは $HOME/.config/gh を参照して認証を行うようになります。

動作確認

設定したディレクトリ

gh auth status
github.com
  ✓ Logged in to github.com account motoki-hirayama-isub (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

設定していないディレクトリ

gh auth status
github.com
  ✓ Logged in to github.com account xxxxxx (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo', 'workflow'

コマンドを実行したディレクトリによってアカウントが切り替わっていることが確認できました。

Git のユーザー設定も自動で切り替える

コミットなどで使用される Git のユーザー設定も自動で切り替わるようにします。 Git には標準で includeIf という識別子が用意されているため、.gitconfig に以下の設定を記述することで、特定のディレクトリで使用する設定を切り替えることができます。

# [user] 設定よりも後に追記
[includeIf "gitdir:~/ghq/github.com/isub-inc/"]
    path = ~/.gitconfig-work

指定したパスに .gitconfig-work を作成し、以下のように設定を追記します。

[user]
    name = 会社用のユーザー名
    email = 会社用のメールアドレス

これで指定したディレクトリ配下では .gitconfig-work に記述した情報が使用されるようになりました。

# ~/ghq/github.com/isub-inc/vivaya_web
git config user.name
motoki-hirayama-isub

さいごに

最初は zsh のスクリプトを書いたりと小難しい設定をする方針で進めていたのですが、最終的にはディレクトリベースのシンプルな設定にまとめることができとても満足しています。

一度設定してしまえば意識せずに使い分けることができるので、皆さんも是非試してみてください。

投稿者プロフィール

HirayamaMotoki

関連記事

  1. 【React×TypeScript】環境構築メモ

  2. 【Node.js】環境構築メモ

  3. 【Git】環境構築メモ

  4. 【Git】②GitHub アカウント作成

  5. 【Node.js】バージョン管理をVoltaに移行する

  6. WSL2 から GitHub CLI を使って認証を行うまで

最近の記事

制作実績一覧

  1. Checkeys