PR

【ドラレコ風解説】Git Worktreeの使い方完全ガイド – 複数ブランチを同時作業で開発効率UP!

今回の収録内容:Git Worktreeマスター編

こんにちは!今日は開発作業でよくある「複数のブランチを同時に触りたい」問題を、Git Worktreeで解決する様子をドラレコ風にお届けします。実際の操作を一からお見せするので、一緒に手を動かしてみてください!

録画開始:現在の状況確認

タイムスタンプ [00:00:10]
まずは現在の作業環境を確認しましょう。ターミナルを開いて、現在のリポジトリ状況をチェックします。

# 現在の場所と状況を確認
pwd
# /Users/developer/my-project

git status
# On branch main
# Your branch is up to date with 'origin/main'.
# nothing to commit, working tree clean

git branch -a
# * main
#   remotes/origin/main
#   remotes/origin/feature/new-login
#   remotes/origin/hotfix/critical-bug

現在の状況: メインブランチにいて、リモートには feature/new-login と hotfix/critical-bug ブランチがある状態です。

シーン1:既存ブランチでworktree作成

タイムスタンプ [00:01:20]
まずは既存のリモートブランチ feature/new-login を worktree として作成してみます。

実行前の準備

現在のディレクトリ構造:

my-project/
├── .git/
├── src/
├── package.json
└── README.md

コマンド実行

# 既存ブランチ用のworktreeを作成
git worktree add ../feature-login-work feature/new-login

実行結果:

Preparing worktree (checking out 'feature/new-login')
Branch 'feature/new-login' set up to track remote branch 'feature/new-login' from 'origin'.
HEAD is now at a1b2c3d Add login form validation

実行後の変化をチェック

タイムスタンプ [00:02:30]

# ディレクトリ構造を確認
ls -la ../
# drwxr-xr-x   8 developer  staff   256 Jun 17 14:30 feature-login-work
# drwxr-xr-x  10 developer  staff   320 Jun 17 14:25 my-project

# worktreeの状況確認
git worktree list
# /Users/developer/my-project              a1b2c3d [main]
# /Users/developer/feature-login-work      b2c3d4e [feature/new-login]

現在の状況: 新しいディレクトリ「feature-login-work」が作成され、feature/new-login ブランチがチェックアウトされました!

シーン2:新しいブランチでworktree作成

タイムスタンプ [00:03:45]
今度は全く新しいブランチを作成しながら worktree を作ってみます。

パターン1:新しいブランチ(current branchから分岐)

# 新しいブランチ用のworktreeを作成
git worktree add ../hotfix-work hotfix/session-fix

実行結果:

Preparing worktree (new branch 'hotfix/session-fix')
HEAD is now at a1b2c3d Initial commit for hotfix

パターン2:-bオプションで明示的にブランチ作成

# より明示的にブランチを作成
git worktree add -b feature/user-dashboard ../dashboard-work

実行結果:

Preparing worktree (new branch 'feature/user-dashboard')
HEAD is now at a1b2c3d Ready for dashboard development

現在の全体状況確認

タイムスタンプ [00:05:00]

git worktree list
# /Users/developer/my-project              a1b2c3d [main]
# /Users/developer/feature-login-work      b2c3d4e [feature/new-login]
# /Users/developer/hotfix-work             a1b2c3d [hotfix/session-fix]
# /Users/developer/dashboard-work          a1b2c3d [feature/user-dashboard]

ディレクトリ構造の全体像:

parent-directory/
├── my-project/           (メインリポジトリ - main branch)
├── feature-login-work/   (ログイン機能開発)
├── hotfix-work/          (セッション修正)
└── dashboard-work/       (ダッシュボード新機能)

シーン3:実際の同時作業デモンストレーション

タイムスタンプ [00:06:30]
それでは実際に複数のブランチで同時作業する様子をお見せします。

ターミナル分割での同時作業

ターミナル1(ログイン機能):

cd ../feature-login-work
echo "console.log('Login validation added');" >> src/login.js
git add .
git commit -m "Add client-side validation"

ターミナル2(緊急修正):

cd ../hotfix-work
echo "// Fix session timeout issue" >> src/session.js
git add .
git commit -m "Fix session timeout bug"

ターミナル3(新機能):

cd ../dashboard-work
mkdir src/components
echo "// Dashboard component" > src/components/Dashboard.js
git add .
git commit -m "Add dashboard component skeleton"

各worktreeの状況確認

タイムスタンプ [00:08:15]

# メインディレクトリから全体状況確認
cd my-project
git worktree list
# /Users/developer/my-project              a1b2c3d [main]
# /Users/developer/feature-login-work      c3d4e5f [feature/new-login] +1 commits
# /Users/developer/hotfix-work             d4e5f6g [hotfix/session-fix] +1 commits  
# /Users/developer/dashboard-work          e5f6g7h [feature/user-dashboard] +1 commits

よくあるトラブルと対処法

トラブル1:「cannot lock ref」エラー

タイムスタンプ [00:09:30]

# このエラーが出た場合
git worktree add ../test-work existing-branch
# fatal: cannot lock ref 'refs/heads/existing-branch': 
# ref 'refs/heads/existing-branch' is checking out

対処法:

# 既存のworktreeでそのブランチが使われていないか確認
git worktree list
# 使われている場合は、別のworktreeで別のブランチに切り替えるか
# そのworktreeを削除してから再実行

トラブル2:worktreeが削除できない

タイムスタンプ [00:10:45]

# ディレクトリを手動削除した後のエラー
git worktree remove ../deleted-directory
# fatal: validation failed, cannot remove working tree

対処法:

# prune コマンドでクリーンアップ
git worktree prune
# その後、必要に応じて残ったものを削除
git worktree remove ../directory-name --force

シーン4:後片付けの様子

タイムスタンプ [00:12:00]
作業が終わったら、worktreeをきれいに片付けましょう。

安全な削除手順

# 1. まず作業をコミット・プッシュ
cd ../hotfix-work
git push origin hotfix/session-fix

# 2. メインディレクトリに戻る
cd ../my-project

# 3. worktreeを削除
git worktree remove ../hotfix-work

# 4. 不要になったブランチの削除(オプション)
git branch -d hotfix/session-fix

# 5. 現在の状況確認
git worktree list
# /Users/developer/my-project              a1b2c3d [main]
# /Users/developer/feature-login-work      c3d4e5f [feature/new-login]
# /Users/developer/dashboard-work          e5f6g7h [feature/user-dashboard]

ドラレコ風チートシート

基本コマンド(録画ポイント付き)

操作 コマンド チェックポイント
既存ブランチ worktree git worktree add ../path existing-branch リモートブランチの存在確認
新規ブランチ worktree git worktree add -b new-branch ../path ブランチ名の重複確認
状況確認 git worktree list 全worktreeのステータス
削除 git worktree remove ../path 未コミット作業の確認
クリーンアップ git worktree prune 孤立したworktreeの整理

実践前チェックリスト

  • 作業ディレクトリの準備: 親ディレクトリに十分な空きがあるか
  • ブランチ確認: git branch -a でリモートブランチを確認
  • 現在の作業保存: 未コミットの変更がないか確認
  • 権限確認: ディレクトリ作成権限があるか

まとめ:Git Worktreeマスターへの道

今回のドラレコ風解説で、Git Worktreeの基本的な使い方から、実際の同時作業、トラブルシューティングまでを一通り体験していただきました。

開発効率UP のポイント:

  • 複数の機能開発を同時進行できる
  • 緊急修正対応中でも他の作業が止まらない
  • ブランチ切り替えのコストが0に
  • 各作業で異なる環境設定も可能

次回は「Git Worktree + VSCode マルチウィンドウ活用術」をお届け予定です。チャンネル登録(ブックマーク)をお忘れなく!

この記事が役に立ったら、実際に手を動かしてみてください。きっと開発効率が格段にアップするはずです!

タイトルとURLをコピーしました