9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git worktreeとCursorで爆速並列開発!複数ブランチを同時に作業するワークフロー

9
Last updated at Posted at 2026-02-26

はじめに

ソーイ株式会社 村上です。

開発していると同時に機能を実装したいと思うことが多いと思います。

  • featureブランチで開発中に、本番の緊急バグ対応が入った
  • git stash して git checkout して、対応して、また戻る…を繰り返している
  • Cursorで作業中にブランチを切り替えたら、AIのコンテキストがぐちゃぐちゃになった

git worktreeを使うことで解決できるということを知っていたのですが、なかなか触れずにいたので今回初めて勉強してステップバイステップの作業をまとめました。

この記事でできるようになること

  • 1つのリポジトリで複数ブランチを同時に・独立して作業する
  • Cursorのウィンドウを分けることでAIコンテキストを汚さない
  • stash不要のクリーンな並列開発フローを身につける

対象読者

  • AIエージェントを使っている開発者
  • 複数ブランチを同時に触ることが多い方

git worktreeとは?

通常、1つのリポジトリでは1つのブランチしか同時にチェックアウトできません。

myapp/  ← ここでは1ブランチしか作業できない

git worktree を使うと、1つのリポジトリから複数の作業ディレクトリを生やせます。

myapp/          ← main ブランチ(本番対応)
myapp-feature/  ← feature/new-api ブランチ(新機能開発)
myapp-hotfix/   ← hotfix/login-bug ブランチ(緊急対応)

それぞれが独立したディレクトリとして存在するので、ファイルも作業状態も干渉しません。

実案件でのよくあるシーン

よくある具体的なシーンを紹介します。

シーン1:新機能開発中に本番障害の修正が割り込む

Webサービスの新機能をfeatureブランチで実装中、クライアントから「ログインできない」と緊急連絡が入る。

# 従来:開発途中のコードをstashして切り替え
git stash
git checkout main
git checkout -b hotfix/login-bug
# 対応...
git checkout feature/new-dashboard
git stash pop  # 作業再開、でもCursorのAIコンテキストはリセット済み
# worktree:切り替え不要、ウィンドウを開くだけ
myapp-feature/  ← 新機能の実装はそのまま残っている
myapp-hotfix/   ← こちらで障害対応

シーン2:レビュー待ちの間に次のタスクを進める

PRを出してレビュー待ちになった間、次のfeatureブランチの作業を始めるケース。レビュー修正が来たときにすぐ切り替えられます。

myapp/          ← main
myapp-pr123/    ← feature/user-profile(レビュー待ち)
myapp-next/     ← feature/notification(次のタスク)

レビューコメントが来たら myapp-pr123/ のウィンドウに切り替えてすぐ修正できます。

ハンズオン

シンプルなリポジトリを作って実際にworktreeを使ってみましょう。

Step 1: サンプルリポジトリの準備

まず練習用のリポジトリを作ります。

mkdir myapp && cd myapp
git init
echo "# MyApp" > README.md
git add . && git commit -m "initial commit"

Step 2: worktreeを追加する

git worktree add コマンドでブランチと作業ディレクトリを同時に作れます。

# feature開発用のworktreeを作成
git worktree add ../myapp-feature -b feature/new-api

# 緊急対応用のworktreeを作成(既存ブランチから)
git worktree add ../myapp-hotfix -b hotfix/login-bug

ディレクトリ構成を確認してみましょう。

ls ../
# myapp/          ← mainブランチ
# myapp-feature/  ← feature/new-apiブランチ
# myapp-hotfix/   ← hotfix/login-bugブランチ

worktreeの一覧も確認できます。

git worktree list
# /path/to/myapp          abc1234 [main]
# /path/to/myapp-feature  def5678 [feature/new-api]
# /path/to/myapp-hotfix   ghi9012 [hotfix/login-bug]

Step 3: Cursorで各worktreeを別ウィンドウで開く

ここがポイントです。

# それぞれのディレクトリをCursorで開く
cursor ../myapp
cursor ../myapp-feature
cursor ../myapp-hotfix

または、Cursorメニューの File → Open Folder で各ディレクトリを開いてください。

CleanShot 2026-02-24 at 09.38.44@2x.png

workflow別に3つのWindowを開きます。これで3つのブランチを同時に独立した環境で作業できます!

Step 4: 実際に並列作業してみる

それぞれのウィンドウで独立して作業してみましょう。

myapp-feature ウィンドウ(新機能開発):

cd ../myapp-feature
echo "// new API endpoint" > api.js
git add . && git commit -m "feat: add new API endpoint"

myapp-hotfix ウィンドウ(緊急バグ対応):

cd ../myapp-hotfix
echo "// fix login bug" > auth.js
git add . && git commit -m "fix: resolve login authentication bug"

どちらの作業も、もう一方のブランチに一切影響しません。

Step 5: Cursor AIを活用する

各ウィンドウで Cmd + K(または Ctrl + K)でCursor AIに質問すると、そのブランチのコードだけを参照して回答してくれます。

例:feature ウィンドウで

「このAPIエンドポイントにバリデーションを追加して」

例:hotfix ウィンドウで

「このauth.jsの修正でセキュリティ上の問題はある?」

ブランチを切り替えていないので、AIが別ブランチのコードを混同することがありません。これがworktreeを使う強いメリットになります。

Step 6: 作業完了後にmainへマージする

worktreeでの作業が終わったら、mainブランチにマージします。worktreeを使っていても、通常のgit操作と変わりません。

CleanShot 2026-02-24 at 09.44.05@2x.png

mainのディレクトリに移動してマージするだけです。

# mainのディレクトリに移動
cd ../myapp

# hotfixをマージ
git merge hotfix/login-bug

# featureをマージ
git merge feature/new-api

マージ後のクリーンアップ

# worktreeを削除
git worktree remove ../myapp-hotfix
git worktree remove ../myapp-feature

# ブランチも削除
git branch -d hotfix/login-bug
git branch -d feature/new-api

# 残骸のクリーンアップ(念のため)
git worktree prune

よくあるハマりポイントと対処法

node_modulesが重複して容量を食う

worktreeごとに npm install すると、同じ内容の node_modules が増殖します。

対処法:シンボリックリンクで共有する

cd ../myapp-feature
ln -s ../myapp/node_modules ./node_modules

Laravelの場合も同様に vendor ディレクトリをシンボリックリンクできます。

ln -s ../myapp/vendor ./vendor

ただし、ブランチ間でパッケージが異なる場合は使えないので注意。

.envファイルが存在しない

worktreeには .env がコピーされません。

cp ../myapp/.env ../myapp-feature/.env

または .env もシンボリックリンクにする方法もあります(内容が同じ場合のみ)。

同じブランチを2つのworktreeで開こうとするとエラー

# NG: 既にチェックアウト済みのブランチは指定できない
git worktree add ../myapp-main main
# fatal: 'main' is already checked out at '/path/to/myapp'

同じブランチを複数のworktreeで使うことはできません。

まとめ

従来のワークフロー git worktree × Cursor
stash → checkout → 作業 → checkout → stash pop 各ウィンドウでそのまま作業
コンテキストスイッチが多くて疲弊 ウィンドウを見るだけでコンテキスト切り替え完了
Cursor AIが複数ブランチのコードを混同する可能性 AIの参照コードが各ウィンドウで完全に独立

git worktreeは地味なコマンドですが、Cursorと組み合わせることで開発体験が劇的に向上します。まずはhotfix用のworktreeを使って2つを使うところからはじめていきます。

お知らせ

技術ブログを週1〜2本更新中、ソーイをフォローして最新記事をチェック!
https://qiita.com/organizations/sewii

参考

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?