Dockerで複数 GitHub アカウントを簡単に運用　設定不要すぐ運用可能

## 概要

本記事では、**Alpine Linux** をベースにして最新バージョンの Git を含む軽量 Docker イメージを紹介します。  
**複数の GitHub アカウントを簡単に運用**する方法の一例として、フォルダごとの `.git/config` やカスタム `.gitconfig` ファイルの活用法もあわせて解説します。

- **GitHub リポジトリ**: [https://github.com/softjapan/git](https://github.com/softjapan/git)  
- **Docker Hub リポジトリ**: [https://hub.docker.com/r/softjpn/git](https://hub.docker.com/r/softjpn/git)

## 使い方

### Docker Hub からプル

```bash
docker pull softjpn/git
```

### ローカルディレクトリをマウントして Git を実行

ホスト側のカレントディレクトリを `/app` にマウントし、以下のように Git コマンドを実行します。

```bash
# git status
docker run --rm -it -v "$PWD:/app" softjpn/git status

# git add
docker run --rm -it -v "$PWD:/app" softjpn/git add -A .

# git commit
docker run --rm -it -v "$PWD:/app" softjpn/git commit -m "Your commit message"

# git push
docker run --rm -it -v "$PWD:/app" softjpn/git push origin main
```

---

## 代表的な Git コマンド例

- **clone**  
  ```bash
  docker run --rm -it -v "$PWD:/app" softjpn/git clone https://github.com/user/repo.git
  ```
- **branch, log, checkout**  
  ```bash
  # ブランチ一覧
  docker run --rm -it -v "$PWD:/app" softjpn/git branch
  
  # ログ確認
  docker run --rm -it -v "$PWD:/app" softjpn/git log --oneline --graph

  # ブランチ切り替え
  docker run --rm -it -v "$PWD:/app" softjpn/git checkout main
  ```
- **ブランチを新規作成して移動**  
  ```bash
  docker run --rm -it -v "$PWD:/app" softjpn/git checkout -b feature-branch
  ```
- **pull, merge, rebase**  
  ```bash
  docker run --rm -it -v "$PWD:/app" softjpn/git pull
  docker run --rm -it -v "$PWD:/app" softjpn/git merge feature-branch
  docker run --rm -it -v "$PWD:/app" softjpn/git rebase feature-branch
  ```
- **stash**  
  ```bash
  docker run --rm -it -v "$PWD:/app" softjpn/git stash
  docker run --rm -it -v "$PWD:/app" softjpn/git stash pop
  ```
- **tag**  
  ```bash
  docker run --rm -it -v "$PWD:/app" softjpn/git tag v1.0.0
  docker run --rm -it -v "$PWD:/app" softjpn/git push --tags
  ```

---

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

個人用と会社用など、複数の GitHub アカウントを使い分ける場合に便利な設定方法を紹介します。

### 1. リポジトリごとの `.git/config` を活用

各プロジェクトの `.git/config` に直接ユーザ情報を記述します。  
たとえば、プロジェクトA の `.git/config` には以下のように設定。

```ini
[user]
  name = "YourNameForProjectA"
  email = "yourA@example.com"
```

プロジェクトB の `.git/config` は別のユーザ情報にするなど、フォルダ・リポジトリごとにアカウントを切り替えられます。

### 2. カスタム .gitconfig ファイルをマウント

「A というリポジトリはユーザAの設定」「B というリポジトリはユーザBの設定」というように、  
専用の `.gitconfig` ファイルをプロジェクトごとに置いておく方法も有効です。

たとえば、  
- プロジェクトA のルートディレクトリに `.gitconfig_A` を用意  
- プロジェクトB のルートディレクトリに `.gitconfig_B` を用意  

コンテナ実行時に、以下のように該当する設定ファイルを `/root/.gitconfig` としてマウントします。

```bash
docker run --rm -it \
  -v "$PWD:/app" \
  -v "$PWD/.gitconfig_A:/root/.gitconfig" \
  softjpn/git config --list
```

これで、そのコンテナからはユーザA として Git コマンドを実行できます。  
別のプロジェクトでは `.gitconfig_B` をマウントしてユーザB として操作する、というように切り替えられます。

---

## ビルド手順（ローカルでDockerイメージを作る場合）

リポジトリのソースコードをダウンロードして、自分のマシンでビルドしたい場合は以下を実行します。

```bash
git clone https://github.com/softjapan/git.git
cd git
docker build -t softjpn/git .
```

---

## まとめ

- **軽量・最新の Git イメージ**: Alpine Linux ベースでイメージサイズを抑えつつ、最新の Git を使える。  
- **複数アカウント運用**: フォルダごとの `.git/config`、あるいはカスタム `.gitconfig` を使うことで、複数の GitHub アカウント設定を簡単に切り替えられる。  
- **ローカルへのインストール不要**: Docker コンテナ内で Git 操作を行うので、ホスト環境を汚さずに開発を続けられる。

この手法を使えば、チーム内で統一した環境構築を行ったり、個人で複数アカウントを無理なく管理したりと、さまざまなシーンに応用できます。ぜひ活用してみてください。

---  

<div align="center">
  <strong>このコンテナで、複数アカウントの Git 運用を簡単に始めてみましょう！</strong>
</div>