Practical Worktree

git worktree で
並行作業を加速する

worktree を使った実践的な開発フロー。checkout 不要で複数ブランチを同時に作業できる環境を構築します。

// 01 What is Worktree

Worktree とは

📂

同時に複数ブランチ

1つのリポジトリで複数のブランチを別ディレクトリで同時展開。checkout 切り替え不要。

📦

stash 地獄からの解放

ブランチ切り替えのたびに stash / stash pop する必要がなくなる。

ビルド状態を保持

各 worktree は独立したファイルツリー。node_modules やビルド成果物がそのまま残る。

// 02 Recommended Setup

実践構成(2 Worktree)

Directory Layout

project/           ← develop(日常作業)
project/.wt/main/  ← main(安定版・リリース用)
1

develop をメインのディレクトリにする

普段の作業ディレクトリで develop ブランチをチェックアウトします。

terminal
git checkout develop
2

main を worktree として追加

.wt/main ディレクトリに main ブランチのファイルツリーを展開します。

terminal
git worktree add .wt/main main
3

確認

worktree が正しく作成されたか確認します。

terminal
git worktree list
// 03 Daily Workflow

日常の開発フロー

1

develop で feature ブランチ作成 & 作業

メインのディレクトリで feature ブランチを切り、機能を実装します。

terminal
git checkout -b feature/xxx
# ... 作業 & コミット ...
2

develop にマージ

機能が完成したら develop に戻してマージします。

terminal
git checkout develop
git merge feature/xxx
git branch -d feature/xxx
3

リリース時: main worktree でマージ

リリースするときは main の worktree に移動してマージ & push します。checkout の切り替えが不要です。

terminal
cd .wt/main
git merge develop
git push origin main
// 04 Parallel PR Pattern

PR中の並行作業パターン

よくある悩み

PR レビュー待ち中に別 feature を始めたい。でも修正依頼が来たら stash して切り替え... 面倒。

1

PR を出した feature を worktree に分離

レビュー中の feature ブランチを別ディレクトリに切り出します。

terminal
git worktree add .wt/feature/A feature/A
2

develop で次の feature を開始

メインのディレクトリでは新しい機能の開発を始められます。

terminal
git checkout -b feature/B
# ... 作業中 ...
3

PR の修正依頼が来たら → worktree で即対応

stash 不要。worktree のディレクトリに移動するだけで修正に取りかかれます。

terminal
cd .wt/feature/A
# 修正 & コミット & push
4

PR マージ後に worktree を掃除

マージされた feature の worktree とブランチを削除して整理します。

terminal
git worktree remove .wt/feature/A
git branch -d feature/A

Worktree Lifecycle

作る作業PR出すマージ消す
              |              |
              +-- 修正依頼 --+
// 05 Preserving State

変更前の状態を残す

リファクタリングや大きな変更の前に、変更前の状態を残しておきたい場面があります。 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 はファイルの実体があるからビルド・起動・ブラウザ確認ができる。

// 06 Tips

便利Tips

エイリアスで速くする

よく使うコマンドは短縮しておくと日常のオペレーションが格段に楽になります。

.gitconfig
[alias]
  wta = worktree add
  wtl = worktree list
  wtr = worktree remove

ヘルパー関数

worktree の作成・削除をワンコマンドで行うシェル関数です。.env のコピーと npm install も自動で実行します。

~/.zshrc
# 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 が残っていないか定期的にチェックしましょう。両方のリストに出てきたら消して良いサインです。

terminal
git worktree list
git branch --merged develop
# 両方に出てきたら消して良い