はじめに
この記事では、AI に既存ブランチ feature/paneA の実装を参照させながら、元のリポジトリで feature/paneB だけを開発させるための git worktree の使い方を整理します。
AI に既存実装の設計、命名、テストを見本として読ませたい一方で、変更は新しいブランチだけに限定したい場面を想定しています。
想定する状況
次の状態を想定します。
- 共通の開始地点として
feature/internetがある -
feature/paneAはすでに作成済みで、レビュー中またはマージ待ちである - 次の作業として
feature/paneBをfeature/internetから作りたい - AI に
feature/paneAを見本として参照させたい - AI が変更する場所は
feature/paneBに限定したい - エディタ設定やローカルサーバーのため、元のリポジトリのパスは開発用に維持したい
この場合は、元のリポジトリを feature/paneB の編集場所にして、feature/paneA だけを別 worktree に追加します。
先に結論
元のリポジトリで feature/paneB を作成してから、feature/paneA を AI の参照先として追加します。
git switch -c feature/paneB feature/internet
git worktree add ../repo-feature-paneA feature/paneA
これで役割が分かれます。
元のリポジトリ AI が feature/paneB を編集する
../repo-feature-paneA AI が feature/paneA を参照する
feature/paneB は feature/internet から作られるため、feature/paneA の子ブランチにはなりません。
AIに参照先と編集先を明示する
worktree を追加しただけでは、AI が自動的に feature/paneA を見本として使うわけではありません。依頼時に、参照先と編集先を明示します。
`../repo-feature-paneA` は feature/paneA の参照用 worktree です。
既存実装の設計、命名、テストを確認するときだけ参照してください。
変更、テスト、commit は元のリポジトリの feature/paneB にだけ加えてください。
AI の実行環境が別 worktree を読み取れる場合、paneA の複数ファイルを通常のディレクトリとして参照できます。AI が元のリポジトリだけにアクセスできる設定では、参照用 worktree のパスも読み取り可能な範囲に追加します。
worktreeが必要なケースと不要なケース
AI は worktree がなくても、Git の参照を使って別ブランチの内容を確認できます。
git diff feature/paneB...feature/paneA
git show feature/paneA:src/example.ts
特定の差分やファイルを一度だけ確認するなら、この方法で十分です。
一方で、既存実装の複数ファイル、テスト、設定を継続して見本にする場合は、worktree を置く方が扱いやすくなります。AI がファイル検索や内容確認を繰り返すときに、参照先を通常のディレクトリとして扱えるためです。
- 差分や特定ファイルをたまに確認するだけ: worktree は不要
-
paneAを見本にしてpaneBを継続的に実装する: worktree が便利 -
paneAも必要に応じて修正する: worktree を置く価値が高い
実際の手順
1. 元のリポジトリを feature/paneB へ切り替える
元のリポジトリで feature/paneA を開いている場合は、先に feature/paneB を作成して切り替えます。
git status -sb
git switch -c feature/paneB feature/internet
feature/paneB がすでにある場合は、次だけで十分です。
git switch feature/paneB
未コミット変更があるとブランチを切り替えられない場合があります。必要な変更を commit または stash してから進めます。
2. feature/paneA を参照用 worktree に追加する
元のリポジトリのルートで実行します。
git worktree add ../repo-feature-paneA feature/paneA
このコマンドは、../repo-feature-paneA を作成し、そこで feature/paneA を checkout します。
git worktree list
同じローカルブランチを複数の worktree で同時に checkout することはできません。元のリポジトリを feature/paneB へ切り替えてから feature/paneA を追加するのは、この制約を避けるためです。
3. AIに実装を依頼する
AI には、元のリポジトリの feature/paneB だけを編集対象として渡します。../repo-feature-paneA は、実装パターンや命名、テストを確認するための参照先です。
feature/paneA の修正自体が必要になった場合は、参照用 worktree 側で別の作業として扱います。paneA のコミットは paneB には自動で入りません。
固定パスが必要な場合
この手順は、元のリポジトリのパスで feature/paneB を動かしたい場合に向いています。
反対に、feature/paneA を元の固定パスで動かす必要があるなら、元のリポジトリは paneA のままにして、paneB を worktree に追加します。
両方が同じ固定パスを必要とする場合、worktree だけで同時に開発することはできません。ブランチを切り替えるか、自動生成や実行設定をパス非依存にする必要があります。
片付ける
参照用 worktree が不要になったら削除します。
git worktree remove ../repo-feature-paneA
この操作で削除されるのは worktree だけです。feature/paneA ブランチは残ります。
まとめ
AI に既存実装を見本として参照させ、変更を feature/paneB に限定するなら、次を実行します。
git switch -c feature/paneB feature/internet
git worktree add ../repo-feature-paneA feature/paneA
AI への依頼では、paneA を参照先、paneB を編集先として明示します。既存実装を継続して見本にする場合だけ worktree を使うと、記事の目的に合った運用になります。