2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Git & GitHub CLI】ディレクトリ毎にアカウントを切り替えたい!

Last updated at Posted at 2025-09-10

はじめに

業務利用のアカウントと個人利用のアカウントを使い分けていると誤ってプッシュしてしまう...なんて事故を起こしそうになることがたびたび...
安全に運用するために業務アカウントと個人アカウントを分けられる仕組みを作りましょう!

※セキュリティに十分に気を配り、組織の規則に従ったアカウント運用をしてください。

設定

今回設定するディレクトリツリーです。

.
├── .gitconfig
├── .gitconfig_work     # 業務用設定
├── .gitconfig_private  # 個人用設定
└── Dev/
    ├── work/           # 業務用ディレクトリ
    └── private/        # 個人用ディレクトリ
  • ~/Dev/work の配下で業務用のリポジトリを管理する。
  • ~/Dev/private の配下で個人用のリポジトリを管理する。

それぞれのディレクトリに移動したとき、自動的にGit & GitHub CLIアカウントを切り替えます。

Gitアカウントを使い分ける

まずはGitアカウントの使い分けから紹介します。

includeIf 設定をする

includeIfは条件付きで別の構成ファイルを取り込むことができる機能です。1これを利用して指定したディレクトリにいるとき、異なる設定を使い分けます。

~/.gitconfig を設定します。

  • [includeIf "gitdir:<directory>"] :固有の設定を適用したいディレクトリのパスを指定
  • path = <config-file> :固有の設定を記述したファイルパスを指定
[includeIf "gitdir:~/Dev/work/"]
    path = ~/.gitconfig_work

[includeIf "gitdir:~/Dev/private/"]
    path = ~/.gitconfig_private

アカウントを登録する

~/.gitconfig_work に業務用のアカウントを登録し、同様に ~/.gitconfig_private には個人用のアカウントを登録します。

~/.gitconfig_work
[user]
    name = <業務アカウント>
    email = <業務メールアドレス>
~/.gitconfig_private
[user]
    name = <個人アカウント>
    email = <個人メールアドレス>

git initを実行することでこのディレクトリ配下のすべてのディレクトリに格納されたリポジトリで設定が反映されます。

cd ~/Dev/work
git init

それぞれのディレクトリに移動し、想定したアカウントになっているか確認します。

git config user.name
git config user.email

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

つづいてGitHubアカウントの使い分けを紹介します。

gh auth login で認証したアカウントよりも環境変数 GH_TOKEN に登録されているトークンを所有するアカウントが優先して適用されます。これを利用してアカウントを切り替えます。

ちなみに GH_TOKEN が登録されていると常にそのアカウントが優先されるようになるため gh auth switch コマンドでアカウントを切り替えることができなくなります。※該当のディレクトリにいるときにのみ環境変数を設定するため今回これはあまり問題になりません。

gh auth status
github.com
  # 環境変数から読み込んだアカウントが優先され Active になっている
  ✓ Logged in to github.com account yamause (GH_TOKEN)
  - Active account: true
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo', 'workflow'

  ✓ Logged in to github.com account yamause (/home/yamause/.config/gh/hosts.yml)
  - Active account: false
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo', 'workflow'

# ↑プライベートなPCからコマンド実行しているのでこの例で表示されているのは同じアカウントですが
# 異なるアカウントでログインしていても、同様に GH_TOKEN に設定されているアカウントが優先されます。

GitHub CLI ログイン

はじめに、利用するGitHubアカウントへGitHub CLIからログインをしておきます。

gh auth login

direnv の設定

direnvを使い、ディレクトリに入ると自動的に環境変数 GH_TOKEN が設定されるようにします。

direnvとは現在のディレクトリまたは親ディレクトリに配置されdirenvによって承認された .envrc ファイルに記述された環境変数を自動的に設定できる優れものです。2

direnvのインストール方法は下記のドキュメントを参考にしてください。

それぞれのディレクトリに移動し、direnv edit コマンドを実行します。コマンドを実行するとエディタが開かれます。

cd ~/Dev/work
direnv edit .

gh auth token --user <アカウント名> は指定したログイン済みユーザーのトークンを出力するコマンドです。これを GH_TOKEN に設定します。

~/Dev/work.envrc には、業務アカウントのトークンを設定します。

~/Dev/work/.envrc
export GH_TOKEN=$(gh auth token --user <業務アカウント名>)

同様に、~/Dev/private.envrc には、個人アカウントのトークンを設定します。

~/Dev/private/.envrc
export GH_TOKEN=$(gh auth token --user <個人アカウント名>)

以上!

これでディレクトリに移動するだけでGitとGitHubは自動的にアカウントが切り替わります!

あとがき

わたしの所属している組織はGitHub Enterprise ServerからGitHub Enterprise Cloudへの移行期でありふたつの環境が併用されています。今回の手法はそのような環境でもとても有効でした。(わたしの所属するチームは最近やっとリポジトリをすべて移行させることができました!)

関連記事

参考

direnv - @zimbatm
Git Documentation - Git and Software Freedom Conservancy

  1. Git and Software Freedom Conservancy. “git-config” .Git - Documentation. 2025-08-18 . https://git-scm.com/docs/git-config#_conditional_includes, (閲覧2025-09-10) .

  2. @zimbatm. “direnv – unclutter your .profile”. direnv. https://direnv.net/, (閲覧2025-09-10) .

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?