複数のGitHubアカウントを運用する方法

## 前回の続き
こんにちは、前回の記事[GitHubでSSH認証を実装する](https://qiita.com/takatakao397/items/694c381f44aa2f6bbdfb)と関係していて、少し発展的な内容になります。なので、前回のSSH認証の記事を読んでいただいた上でこの記事を読んでいただいたら理解が進むと思います！
## 今回の困ったこと
会社の研修でGitHubアカウントの作成を求められて、既に個人用のアカウントを持っていましたが、色々と余計なコードもあったので、複数アカウントを持つことにしました。会社用と個人用のGitHubアカウントを使い分けたい方は結構いると思います。

アカウント認証の手順が多くて覚えきれないと思いましたので、未来の自分のためにも個人的備忘録としてこの記事を作成したいと思いました。

### 新しいGitHubアカウント用の秘密鍵・公開鍵の作成
前回の記事と同様に新アカウントでもSSH認証を導入したいので、秘密鍵・公開鍵のペアを作成しました。
```sas
# .sshディレクトリに移動
$ cd ~/.ssh
```
```sas
# 秘密鍵・公開鍵のペアを生成
$ ssh-keygen -t rsa
```
鍵の名前、パスフレーズの設定など3つの質問が聞かれますが、ここをスルーしてしまうと（3回Enterキー押してしまうと）既に使っている**id_rsa**と**id_rsa.pub**の情報を上書きしてしまいます。
既存のGitHubアカウントでSSH認証が完了している場合、**id_rsa.company**と会社用に使うと分かりやすいように別名で鍵の名前を決めましょう。
私はこのように会社用の鍵を**id_rsa.company**と名づけました。
![mosaic_20250502135848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/7a756b61-c955-47df-9ac5-ae832f4db596.png)
次に作成した公開鍵**id_rsa.company.pub**をGitHubアカウントに紐付けないといけません。その手順は[前回の記事](https://qiita.com/takatakao397/items/694c381f44aa2f6bbdfb)を見てください！

### configファイルにサブアカウントの情報を追記する
下記コマンドでサブアカ（会社用）の情報を追記します。
```sas
$ vim ~/.ssh/config
```
ついでにvimの操作を説明すると、**I** (Insert)を押下してキーボード入力が可能になります。入力が終わったら、**escキー**を押下して「__:wq__」で上書き保存が完了します。
```
# メインアカウント
Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes
# サブアカウント
Host github.com-for-company
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa.company
  TCPKeepAlive yes
  IdentitiesOnly yes
```
Hostには、任意のホスト名を設定します。IdentityFileには、アカウントごとの秘密鍵の場所を記述します。

### GitHubとの接続確認

```sas
# メインアカウントとの接続確認
$ ssh -T github

# サブアカウントとの接続確認
$ ssh -T github.com-for-company
```
Hi [アカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
と表示されたら成功です。

## アカウントの切り替え
ここで盲点だったのがターミナル上でのアカウント切り替えは別だということです。上のssh接続が上手くいかなかった場合、現在のアカウント情報の確認をしてみましょう。

```sas
# ユーザー名の確認
$ git config user.name
# 登録メールの確認
$ git config user.email
```
ここでユーザー名・登録メールはメインアカウントの物なのにssh接続はサブアカウントに向けたものと入れ違いが発生すると上手くいきません。このアカウントの切り替えとssh接続の流れはセットで覚えましょう。
```sas
$ git config --global user.name "[GitHubアカウント名]"
$ git config --global user.email "[GitHubのメールアドレス]"
```
切り替えの度にこれを実行するのは面倒なので、shellコマンドを作りましょう。
~/.zhrcファイルに関数を追記します。
```sas
$ vim ~/.zshrc
```
```shell
function gitmain() {
  git config --global user.name "[メインのGitHubアカウント名]"
  git config --global user.email "[メインのGitHubのメールアドレス]"
}

function gitsub() {
  git config --global user.name "[サブのGitHubアカウント名]"
  git config --global user.email "[サブのGitHubのメールアドレス]"
}
```
これで**gitmain**や**gitsub**と実行するだけで、アカウントを切り替えられるようになります。

git configに登録されている情報を確認したい時は下のコマンドを使用します。
```sas
$ git config -l
```
### リモートと接続する時の注意点
複数アカウントを持ったことで、githubリポジトリとの連携でメインアカウント・サブアカウントのどのリポジトリかちゃんと把握する必要があります。
```sas
$ git remote -v
```
メインアカウントの場合は
```sas
origin git@github:<アカウント名>/<リポジトリ名>.git
```
サブアカウントの場合は
```sas
origin git@github.com-for-company:<サブアカウント名>/<リポジトリ名>.git
```
と表示されます。git@以降でどのアカウント対象のリポジトリか確認しましょう。

メインアカウントとサブアカウントのリモート接続の方法は下のように
```sas
# メインアカウントのリモートと接続
$ git remote add origin git@github:<アカウント名>/<リポジトリ名>.git

# サブアカウントのリモートと接続
$ git remote add origin git@github.com-for-company:<サブアカウント名>/<リポジトリ名>.git
```

>久しぶりにGitHubを使うとここら辺のことすっぽり抜け落ちてしまいそうですよね...
>

## 参考資料
[GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)
[gitでPlease make sure you have the correct access rights and the repository exists. が出た時の対処法](https://qiita.com/GakuNaitou/items/81dbbd3ea6211af71648)
[複数のGitHubアカウントを使い分けたい時の設定方法とTips](https://zenn.dev/taichifukumoto/articles/how-to-use-multiple-github-accounts)