背景
この記事を書いた理由は2つあります。
1. ブランチを跨いだ修正が面倒だった
ブランチBで作業中に、急遽ブランチAの修正が必要になることがあります。そのままブランチを切り替えたいのに、ブランチBの変更をいったんコミットするか git stash で退避しないといけない。この手間が地味にストレスでした。
2. Claude Codeの待機時間を有効活用したかった
業務でClaude Codeを使うようになり、AIが作業している間の「待ち時間」が増えました。この待機時間に別ブランチで並列作業できれば、開発効率が上がるはず。。。
そこで git worktree を学んでみました。
git worktreeとは?
一言でいうと、1つのリポジトリを複数のディレクトリで同時に開ける仕組みです。
通常のgitでは、ブランチを切り替えるたびにファイルが書き換わります。worktreeを使うと、同じ .git を共有しながら複数のディレクトリをそれぞれ別のブランチで同時に開けます。
stashも不要、ファイルの上書きもなし。それぞれのディレクトリで独立して作業できます。
環境
- エディタ:VSCode
- 開発環境:WSL環境
基本コマンド(Claude Codeに教えてもらいながら使いました)
自分で検証したわけではないので、公式ドキュメントも合わせて参照してください。
今後、自力で検証を行い、ナレッジとして追記していく予定です。
# worktreeを追加する(既存ブランチ)
git worktree add ../my-project-fix fix/bug
# 新しいブランチを作りながら追加する
git worktree add -b feature/new-ui ../my-project-feature
# 一覧を確認する
git worktree list
# worktreeを削除する
git worktree remove ../my-project-fix
# 不要な参照を掃除する
git worktree prune
実際に使ってみた
Claude Codeに使い方を教えてもらいながら、実際に以下のシチュエーションで実践しました。
シチュエーション
- WBS上、2つのタスクを本日中にこなす必要がある
- 1つ目のタスクは調査系であり、多少時間がかかる
- 2つ目のタスクは不具合修正であり、Claudeの自走が可能
やったこと
1つ目のタスクをClaudeと対話しながら調査している裏で、worktreeで別ブランチを展開し、2つ目のタスクを並列で進めました。
結果
1つ目のタスク報告の直後、2つ目のプルリクをそのまま提出でき、作業をスムーズに終えることができました。
注意点
-
どのブランチのソースを見ているか分かりにくい
VSCode上で複数のworktreeを開いていると、今どのブランチのファイルを見ているのか判断しづらい場面がありました。
→ 現状うまい解決策が見つかっていないので、引き続き模索中です。
-
並列数が増えると混乱する
「この修正、どのブランチのものだっけ?」と混乱してしまいました。最初は2つまでに抑えておくのが無難かもしれません。
結論
「ブランチを跨いだ修正が面倒」という課題については、マージ前で修正の可能性があるブランチをworktreeとして残しておけば、要修正となった際に今の作業を中断せず即座に該当ブランチへ移動できます。
「Claude Codeの待機時間を有効活用したい」という課題については、直列作業であれば「タスク1がやっと終わった。夕方になってしまった、これからタスク2に取り掛からなくては」となるところを、「タスク1が終わった。お、並列で進めていたタスク2もすでに終わっているぞ。そのままプルリク出して定時前に全タスク完了!」という体験ができ、明らかに生産性が上がりました。
ただ、注意点にも書いたとおり課題も残っており、なにより慣れが必要です。精進します。
