🏄‍♂️

Git Cloneから並列駆動までの一貫したフローを構築しました

に公開

筆者はこれをすべて試して問題なかったことを検証済みです。ただし、記事にするのがめんどくさくなってAIに全てを任せて書かせているのでご了承ください。

現代のソフトウェア開発において、複数の AI コーディングアシスタント(Cursor、Claude Code、Windsurf 等)を並列で活用することが一般的になってきました。しかし、従来の開発環境では複数のブランチを同時に扱う際に様々な課題が発生します。本記事では、Git Worktree を活用してこれらの課題を解決し、効率的な並列開発環境を構築する方法をご紹介します。

解決したい課題

1. AI コーディングアシスタントの並列活用

Cursor や Claude Code などの複数の AI ツールを同時に使用し、異なるブランチで並列開発を行いたい。

2. 直感的なディレクトリ構造の維持

開発者が理解しやすく、管理しやすいディレクトリ構造を保ちながら、複数のワークスペースを運用したい。

3. 設定ファイルの共有問題

Git Worktree で新しいワークツリーを作成した際、.env ファイルや各種設定ファイルが自動的にコピーされない問題を解決したい。

4. ブランチ間の差分による混乱

main ブランチとの差分表示が開発の妨げになることを回避したい。

5. 効率的なターミナル管理

Tmux を活用して、複数のワークスペースを効率的に管理したい。

提案するソリューション構成

本記事で提案する解決策は、Git Worktree とカスタムフックを組み合わせた環境構築です。以下のディレクトリ構造により、設定の一元管理と効率的な並列開発を実現します。

projects/
├── configs/                      # 共通設定ファイル置き場
│   ├── .claude/                  # Claude関連設定
│   ├── CLAUDE.md                 # Claudeプロンプト設定
│   ├── .mcp.json                 # MCP設定
│   ├── .cursor/                  # Cursor設定ディレクトリ
│   ├── .cursorrules              # Cursorルール
│   ├── .windsurf/                # Windsurf設定ディレクトリ
│   ├── .windsurfrules            # Windsurfルール
│   ├── .env                      # 環境変数
│   └── .env.local                # ローカル環境変数
└── repos/                        # リポジトリ管理ディレクトリ
    ├── myproject.git/            # Bareリポジトリ(中央管理)
    │   └── hooks/post-checkout   # 自動設定コピーフック
    ├── myproject-main/           # mainブランチ用ワークツリー
    └── myproject-feature/        # featureブランチ用ワークツリー

構成の特徴

  • 設定の一元管理: configs/ディレクトリで全ての設定ファイルを管理
  • 自動同期: Git フックにより新しいワークツリー作成時に設定を自動コピー
  • 明確な分離: Bare リポジトリとワークツリーを明確に分離し、管理を簡素化

実装手順

以下の手順に従って、並列開発環境を構築します。全てのコマンドは/projectsディレクトリで実行することを前提としています。

ステップ 1: Bare リポジトリのセットアップ

まず、リモートリポジトリを Bare 形式でクローンします。Bare リポジトリは作業ツリーを持たない「中央管理」リポジトリとして機能します。

# GitHubからBareリポジトリをクローン
git clone --bare git@github.com:yourname/myproject.git repos/myproject.git

ステップ 2: 共通設定ファイルの準備

configs/ディレクトリに、全てのワークツリーで共有したい設定ファイルを配置します。

mkdir -p configs
# 必要な設定ファイルをconfigs/に配置
# 例: .env, .env.local, .cursorrules, .windsurfrules など

ステップ 3: 自動設定コピーフックの設置

新しいワークツリー作成時に設定ファイルを自動コピーするため、post-checkoutフックを設置します。

# フックファイルを作成
cat > repos/myproject.git/hooks/post-checkout << 'EOF'
#!/usr/bin/env bash
WORKTREE_DIR="$(git rev-parse --show-toplevel)"
COMMON_DIR="$(git rev-parse --git-common-dir)"
PROJECT_ROOT="$(dirname "$(dirname "$COMMON_DIR")")"
CONFIG_DIR="$PROJECT_ROOT/configs"

if [ -d "$CONFIG_DIR" ]; then
    rsync -a "$CONFIG_DIR"/ "$WORKTREE_DIR"/
    echo "設定ファイルを $WORKTREE_DIR にコピーしました"
fi
EOF

# 実行権限を付与
chmod +x repos/myproject.git/hooks/post-checkout

ステップ 4: ワークツリーの作成

main ブランチ用ワークツリー

git -C repos/myproject.git worktree add ../myproject-main main

新機能開発用ワークツリー

# 新しいブランチを作成しつつワークツリーを追加
git -C repos/myproject.git worktree add -b feature-branch ../myproject-feature

ステップ 5: 動作確認

各ワークツリーで設定ファイルが正しくコピーされていることを確認します。

# 設定ファイルの存在確認
ls -la myproject-main/.env
ls -la myproject-feature/.cursorrules

トラブルシューティング: フック実行権限エラー

git worktree add実行時に以下の警告が表示される場合があります:

hint: The 'hooks/post-checkout' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.

解決方法:

# フックに実行権限を付与
chmod +x repos/myproject.git/hooks/post-checkout

または警告を無効化:

# グローバル設定で警告を無効化
git config --global advice.ignoredHook false

ワークツリー管理コマンド

現在のワークツリー一覧表示

git -C repos/myproject.git worktree list

ワークツリーの削除

# 特定のワークツリーを削除
git -C repos/myproject.git worktree remove ../myproject-feature

# 強制削除(未保存の変更がある場合)
git -C repos/myproject.git worktree remove --force ../myproject-feature

ワークツリーの状態確認

# 各ワークツリーの状態を確認
git -C repos/myproject.git worktree list --porcelain

Cursor や Windsurf であれば、この段階で複数ウィンドウを開けば、それぞれのワークツリーで開発できます。

Tmux を活用した効率的なワークスペース管理

複数のワークツリーを同時に開発する際、Tmux を活用することで効率的にワークスペースを管理できます。

基本的な運用方針

1 プロジェクト = 1 セッション

# プロジェクト専用セッションを作成
tmux new -s myproject -c /path/to/projects/repos/myproject-main

ブランチ/ワークツリーごとにウィンドウを分離

# 新機能開発用ウィンドウを追加
tmux new-window -n feature -c /path/to/projects/repos/myproject-feature

# バグ修正用ウィンドウを追加
tmux new-window -n bugfix -c /path/to/projects/repos/myproject-bugfix

実用的な Tmux コマンド

操作 コマンド 説明
新しいウィンドウ Ctrl+b → c 新しいウィンドウを作成
ウィンドウ切り替え Ctrl+b → n/p 次/前のウィンドウに移動
水平分割 Ctrl+b → % 左右にペインを分割
垂直分割 Ctrl+b → " 上下にペインを分割
ペイン移動 Ctrl+b → 矢印キー ペイン間を移動
セッション終了 Ctrl+b → & 現在のセッションを終了

推奨ワークフロー

  1. メインウィンドウ: エディタ(Cursor/Claude Code)
  2. サブウィンドウ: ターミナル作業(テスト実行、Git 操作)
  3. モニタリングウィンドウ: ログ監視、開発サーバー

関連ツール: Conductor

本記事で紹介した手動での Git Worktree 環境構築に加えて、最近リリースされたConductorというツールも注目に値します。

Conductor とは

Conductor は、複数の Claude Code インスタンスを並列実行するための GUI アプリケーションです。Melty Labs によって開発され、Git Worktree を内部的に活用して各 AI エージェントに独立したワークスペースを提供します。

主な特徴

  • 自動ワークツリー管理: Git Worktree の作成・管理を自動化
  • 視覚的な進捗管理: 各エージェントの作業状況を一目で把握
  • Mac 専用アプリ: ネイティブ macOS アプリケーションとして提供
  • Claude Code 統合: 既存の Claude Code 認証情報を自動利用

本記事のアプローチとの比較

項目 手動構築(本記事) Conductor
柔軟性 高い(カスタマイズ自由) 中程度(GUI 制約あり)
学習コスト 高い(Git 知識必要) 低い(GUI 操作)
対応 AI 全般(Cursor, Windsurf 等) Claude Code のみ
コスト 無料 無料(現在)
カスタマイズ性 高い 限定的

推奨用途

  • Conductor: Claude Code を中心とした開発で、簡単に並列実行を始めたい場合
  • 手動構築: 複数の AI ツールを使用し、細かいカスタマイズが必要な場合

まとめ

本記事では、Git Worktree を活用した AI 駆動並列開発環境の構築方法を詳しく解説しました。この環境により、以下のメリットを享受できます:

  1. 効率的な並列開発: 複数の AI アシスタントを同時活用
  2. 設定の一元管理: 共通設定の自動同期
  3. 明確なワークスペース分離: ブランチごとの独立した作業環境
  4. スケーラブルな構成: プロジェクト規模に応じた柔軟な拡張

モダンなソフトウェア開発において、AI ツールとの協働は必須となっています。本記事で紹介した手法を活用し、より効率的な開発環境を構築してください。

Discussion