Produced by Fourier

ghqとSSHの設定で複数のGitアカウントを効率よく管理する方法

Ohashi Ohashi カレンダーアイコン 2024.09.20

Gitを日常的に使用している皆さんは、複数のアカウントをどのように管理されていますか?

個人アカウントと仕事用アカウントを使い分けている方も多いと思います。とはいえ、アカウントの切り替えや管理は煩雑で、手間がかかることもあります。そこで、この記事では ghq を活用してGitリポジトリを効率的に整理し、SSHを用いたアカウント設定で複数アカウントをスムーズに運用する方法をご紹介します。複数アカウントの手動切り替えが不要になり、作業が快適になるはずです。

今回は、個人用と仕事用の2つのアカウントを使うケースを例に説明します。

ghqとは?

ghq は、リモートリポジトリを効率的に管理するためのCLIツールで、このツールを使うと、リポジトリのクローンが指定したルートディレクトリ内に自動的に整理されます。たとえば、以下のようにコマンドを実行するだけで、リポジトリを手軽に管理できます。

ghq get https://github.com/ユーザー名/リポジトリ名

デフォルトでは、リポジトリは ~/ghq にクローンされます。手動でディレクトリを整理する必要がなくなり、複数のリポジトリを一元管理できます。 ghq を使えば、Git管理が一段とスムーズになります。

さらに詳細な情報は こちら を確認してください。

複数アカウントを管理するSSH設定

次に、Gitの複数アカウントを使い分けるために、SSHの設定を行います。

個人アカウント用SSH設定

まず、 ~/.ssh ディレクトリに personal_config という設定ファイルを作成し、個人アカウント用の接続情報を記載します。

Host にはわかりやすい名前を設定します。ここでは「personal.github.com」としていますが、自由に設定可能です。

Host personal.github.com
  HostName github.com
  Port 22
  User git
  IdentityFile ~/.ssh/id_rsa_personal

  • Host : 自分でわかりやすい名前を設定します。
  • HostName : 実際に接続するホスト、GitHubの場合は github.com です。
  • IdentityFile : 個人用の秘密鍵を指定します。

仕事用アカウントのSSH設定

同様に、 work_config というファイルを作成し、仕事用アカウントの接続設定を記載します。

Host work.github.com
  HostName github.com
  Port 22
  User git
  IdentityFile ~/.ssh/id_rsa_work

SSH設定ファイルを統合する

最後に、 ~/.ssh/config ファイルに Include を使って、作成した設定ファイルを読み込ませます。

Include ~/.ssh/personal_config
Include ~/.ssh/work_config

これで、個人と仕事のSSH設定が完了です。

Gitの設定

SSH設定が整ったら、Gitでもアカウントを使い分けられるようにします。ここでは、リポジトリごとに異なるアカウント設定を自動的に適用する方法を紹介します

個人アカウントのGit設定

まず、個人アカウントの設定を作成します。 {アカウント名} の箇所は自身のアカウント名に差し替えてください。

~/.config/git/personal/ifconfig の作成

[user]
    name = {アカウント名}
    email = {アカウント名}@users.noreply.github.com
  • name : コミット時に使用する名前。
  • email : コミット時に使用するメールアドレス。GitHubのnoreplyアドレスを使うことで、プライバシーを保護できます。

~/.config/git/personal/config の作成

次に、リポジトリのURLに基づいて接続先をSSHに切り替える設定を行います。

urlセクションでは insteadOf と pushInsteadOf で指定したURLを使用した時に、自動的にSSH設定で定義した Host 名(personal.github.com)を使用しSSHで接続するように設定しています。

includeIfセクション では remote.*.url に指定した設定があった場合に ~/.config/git/personal/ifconfig を読み込むことで当該アカウントの場合のみそのユーザ情報が使用されるようにしています。

insteadOf や includeIf を複数記述しているのはクローンする際にどの形式のリンクを使用しても対応できるようにするためです。

[url "personal.github.com:{アカウント名}"]
    insteadOf = ssh://git@github.com/{アカウント名}
    insteadOf = git@github.com/{アカウント名}
    insteadOf = <https://github.com/{アカウント名}>
    pushInsteadOf = ssh://git@github.com/{アカウント名}
    pushInsteadOf = git@github.com:{アカウント名}
    pushInsteadOf = <https://github.com/{アカウント名}>

[includeIf "hasconfig:remote.*.url:ssh://git@github.com/{アカウント名}/**"]
    path = ~/.config/git/personal/ifconfig

[includeIf "hasconfig:remote.*.url:git@github.com:{アカウント名}/**"]
    path = ~/.config/git/personal/ifconfig

[includeIf "hasconfig:remote.*.url:<https://github.com/{アカウント名}/**>"]
    path = ~/.config/git/personal/ifconfig

仕事アカウントのGit設定

仕事アカウント用の設定も同様の手順で作成します。

最後に

この記事で紹介した方法を使えば、個人と仕事用のアカウントをスムーズに使い分けられ、リポジトリの管理も格段に効率化できます。これからは、複数アカウントを気にせず、快適にGitを活用しましょう!

Ohashi

Ohashi slash forward icon Engineer

主にLaravelなどのバックエンドを中心にサーバー周りも担当しています。目標は腕周り40cm 越え。