AI時代に必須の「並列開発スキル」を完全理解する
「AIにコードを書かせている生成待ちの間に、別のタスクを進めたい」
「しかし、ブランチを切り替えるとエディタの状態がリセットされ、AIのコンテキスト(文脈)が失われてしまう」
もしあなたが、CursorやGitHub CopilotなどのAIツールを使っているにもかかわらず、頻繁に git stash や git switch を繰り返しているなら、AIのパフォーマンスを著しく低下させています。
この記事では、AI駆動開発に不可欠な 「Git worktree」 について解説します。
【Why】なぜ、AI開発に worktree が必須なのか?
結論から言えば、**「AIのエディタセッション(コンテキスト)を維持したまま、物理的に別の作業環境を確保するため」**です。
従来のフロー vs AI開発のフロー
-
AIは「開いている状態」に依存する
現在のAIエディタは、開いているタブ、直前のチャット履歴、ターミナルのログなどを「コンテキスト」として読み取り、推論の精度を高めています。 -
git switch はコンテキストを破壊する
通常のブランチ切り替えを行うと、ファイルの中身が書き換わり、エディタのタブ構成が変わり、プロセスを再起動する必要があります。これはAIにとって「文脈の喪失」を意味します。 -
再開コストの増大
元のブランチに戻った際、AIに再度「先ほどのタスクの続きですが...」と指示し直すのは非効率です。
「タスクごとに独立したディレクトリ(作業ツリー)を保持し、コンテキストを永続化させる」
これを実現するのが Git worktree です。
【What】Git worktree とは何か?
技術的に定義すると、**「単一のローカルリポジトリ(.git)に対して、複数のワーキングツリー(作業ディレクトリ)を関連付ける機能」**です。
仕組みの根本理解
通常、Gitリポジトリは以下の1対1の関係で成り立っています。
- リポジトリデータベース (.git): コミット履歴やブランチ情報を管理。
- ワーキングツリー: 現在チェックアウトされているファイル群。
Git worktreeを使用すると、1つのリポジトリデータベースに対し、複数のワーキングツリーを同時にチェックアウトできます。
-
ディレクトリA:
mainブランチを展開中(緊急バグ修正用) -
ディレクトリB:
feature/new-apiブランチを展開中(AIによる実装用)
これらは物理的に別のフォルダとして存在するため、エディタを別ウィンドウで開けば、互いに干渉することなく並列作業が可能です。もちろん、コミット履歴やオブジェクトデータベースは共有されています。
【How】実践的な使い方
最も運用トラブルが少ない、推奨されるワークフローとコマンドを紹介します。
1. ディレクトリ構成のベストプラクティス
worktreeを作成する際は、リポジトリの中に作るのではなく、リポジトリの「隣」(並列な階層)に作成することを強く推奨します。これにより、.gitignore の設定漏れによるトラブルを防げます。
推奨構成:
/Projects
├── my-app/ <-- [Main] いつものリポジトリ
└── my-app-feature/ <-- [Worktree] 新しく作成する作業ディレクトリ
2. worktree の作成 (add)
メインのディレクトリにいる状態で、以下のコマンドを実行します。
# git worktree add -b <新ブランチ名> <作成するディレクトリパス>
git worktree add -b feature/ai-refactor ../my-app-feature
-
-b <ブランチ名>: 新しいブランチを作成してチェックアウトします。 -
../<フォルダ名>: 一つ上の階層に新しいディレクトリを作成します。
3. 作業の開始
作成されたディレクトリ(../my-app-feature)を、エディタの 「新しいウィンドウ」 として開きます。これで、既存の作業状態を保持したまま、完全に独立した環境でAIを利用できます。
4. worktree の削除 (remove)
作業が完了し、マージが済んだらディレクトリを削除します。(メインのディレクトリに戻ってから実行してください)
# git worktree remove <ディレクトリパス>
git worktree remove ../my-app-feature
これにより、ディレクトリの実体削除と、Git内部の管理情報の削除が同時に行われます。
【Warning】注意点とやってはいけないこと
Git worktreeは強力ですが、運用上の制約があります。以下の4点は必ず押さえてください。
🚫 禁止1:同一ブランチの多重チェックアウト
「メインのディレクトリで main を開いている状態で、worktreeでも main をチェックアウトする」ことはできません。Gitは整合性を保つため、同一ブランチが複数の場所で更新されることを防ぎます。
🚫 禁止2:ディレクトリの手動削除
不要になったworktreeディレクトリを、rm コマンドやファイラーで直接削除しないでください。.git 内に「worktreeが存在する」という管理情報(メタデータ)が残り続け、エラーの原因になります。必ず git worktree remove を使用してください。
万が一手動で消してしまった場合:
以下のコマンドで整合性を修復(不要なメタデータを削除)できます。
git worktree prune
⚠️ 注意1:依存ライブラリのインストール (npm install)
新しく作成されたworktreeは、Git管理下のファイルのみが展開された状態です。Git管理外のファイル(Ignored files)は存在しません。したがって、node_modules は空の状態です。
作成後は必ずパッケージのインストールを実行してください。
npm install
# または yarn install / pnpm install
⚠️ 注意2:環境変数のコピー (.env)
同様に、APIキーなどを管理する .env ファイルもGit管理外であることが一般的です。これらは自動でコピーされないため、メインのディレクトリから手動でコピーする必要があります。
まとめ
- Why: AIのコンテキスト(記憶)を維持し、並列処理を可能にするため。
- What: 1つのリポジトリ(履歴)に対し、複数の作業ディレクトリ(実体)を持つ機能。
-
How:
git worktree add ../<path>でリポジトリの隣に作成する。 -
Caution:
node_modulesと.envは毎回用意する。同じブランチは同時に開かない。
AI開発において、人間は「コードを書く」役割から「複数のAIエージェントを統括する」役割へと変化しています。Git worktreeを使いこなし、開発スピードを最大化してください。