git worktree で
並行作業を加速する
worktree を使った実践的な開発フロー。checkout 不要で複数ブランチを同時に作業できる環境を構築します。
Worktree とは
同時に複数ブランチ
1つのリポジトリで複数のブランチを別ディレクトリで同時展開。checkout 切り替え不要。
stash 地獄からの解放
ブランチ切り替えのたびに stash / stash pop する必要がなくなる。
ビルド状態を保持
各 worktree は独立したファイルツリー。node_modules やビルド成果物がそのまま残る。
実践構成(2 Worktree)
Directory Layout
project/ ← develop(日常作業) project/.wt/main/ ← main(安定版・リリース用)
develop をメインのディレクトリにする
普段の作業ディレクトリで develop ブランチをチェックアウトします。
git checkout develop
main を worktree として追加
.wt/main ディレクトリに main ブランチのファイルツリーを展開します。
git worktree add .wt/main main
確認
worktree が正しく作成されたか確認します。
git worktree list
日常の開発フロー
develop で feature ブランチ作成 & 作業
メインのディレクトリで feature ブランチを切り、機能を実装します。
git checkout -b feature/xxx
# ... 作業 & コミット ...
develop にマージ
機能が完成したら develop に戻してマージします。
git checkout develop
git merge feature/xxx
git branch -d feature/xxx
リリース時: main worktree でマージ
リリースするときは main の worktree に移動してマージ & push します。checkout の切り替えが不要です。
cd .wt/main
git merge develop
git push origin main
PR中の並行作業パターン
よくある悩み
PR レビュー待ち中に別 feature を始めたい。でも修正依頼が来たら stash して切り替え... 面倒。
PR を出した feature を worktree に分離
レビュー中の feature ブランチを別ディレクトリに切り出します。
git worktree add .wt/feature/A feature/A
develop で次の feature を開始
メインのディレクトリでは新しい機能の開発を始められます。
git checkout -b feature/B
# ... 作業中 ...
PR の修正依頼が来たら → worktree で即対応
stash 不要。worktree のディレクトリに移動するだけで修正に取りかかれます。
cd .wt/feature/A
# 修正 & コミット & push
PR マージ後に worktree を掃除
マージされた feature の worktree とブランチを削除して整理します。
git worktree remove .wt/feature/A
git branch -d feature/A
Worktree Lifecycle
作る → 作業 → PR出す → マージ → 消す | | +-- 修正依頼 --+
変更前の状態を残す
リファクタリングや大きな変更の前に、変更前の状態を残しておきたい場面があります。 tag と worktree を目的に応じて使い分けましょう。
tag vs worktree
| やりたいこと | 方法 | コマンド |
|---|---|---|
| コードを比較 | git tag | git diff before-refactor..HEAD |
| ファイルを見る | git show | git show before-refactor:path/to/file |
| 動かして確認 | worktree | git worktree add .wt/before before-refactor |
使い分けのポイント
見るだけなら tag、動かしたいなら worktree。worktree はファイルの実体があるからビルド・起動・ブラウザ確認ができる。
便利Tips
エイリアスで速くする
よく使うコマンドは短縮しておくと日常のオペレーションが格段に楽になります。
[alias]
wta = worktree add
wtl = worktree list
wtr = worktree remove
ヘルパー関数
worktree の作成・削除をワンコマンドで行うシェル関数です。.env のコピーと npm install も自動で実行します。
# worktree を作って初期化
wt-new() {
git worktree add ".wt/$1" -b "$1"
cp .env ".wt/$1/.env" 2>/dev/null
(cd ".wt/$1" && npm install)
}
# worktree を消してブランチも削除
wt-done() {
git worktree remove ".wt/$1"
git branch -d "$1"
}
よくある失敗
worktree を使い始めたときに陥りやすい罠と対策です。
Pitfalls & Solutions
| 失敗 | 対策 |
|---|---|
| node_modules がない | 作成後に npm install |
| .env がない | コピーまたは symlink |
| worktree が溜まる | PR マージしたら即削除 |
定期掃除
マージ済みの worktree が残っていないか定期的にチェックしましょう。両方のリストに出てきたら消して良いサインです。
git worktree list
git branch --merged develop
# 両方に出てきたら消して良い