[{"data":1,"prerenderedAt":1274},["ShallowReactive",2],{"content-/git-worktree-wtp-guide":3,"all-pages-for-dir":1272,"og-image-/git-worktree-wtp-guide":1273},{"id":4,"title":5,"body":6,"category":1258,"description":1259,"extension":1260,"meta":1261,"navigation":57,"ogImage":1258,"path":1262,"project_name":1258,"published":1263,"publishedAt":1264,"seo":1265,"stem":1266,"tags":1267,"todo":1258,"unpublished":1263,"updatedAt":1264,"__hash__":1271},"pages/2025-12/2025-12-19/git-worktree-wtp-guide.md","git worktree で実現する並行開発 - AI エージェントとの組み合わせ",{"type":7,"value":8,"toc":1228},"minimark",[9,14,18,22,139,146,150,153,161,168,171,175,228,231,245,248,254,257,300,303,322,325,328,332,338,344,348,354,363,367,374,378,381,394,401,404,410,413,576,579,586,592,595,599,603,606,749,752,767,771,988,991,994,1005,1048,1051,1054,1062,1065,1069,1072,1113,1116,1182,1189,1192,1224],[10,11,13],"h1",{"id":12},"git-worktree-で実現する並行開発","git worktree で実現する並行開発",[15,16,17],"h2",{"id":17},"この記事で解決できること",[19,20,21],"p",{},"開発中に「緊急のバグ修正が入った」「レビュー依頼が来た」といった割り込みが発生したとき、こんな経験はないだろうか。",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-bash shiki shiki-themes vitesse-light vitesse-light","# 作業中の変更を一時退避\ngit stash\n\n# ブランチ切り替え\ngit checkout hotfix/urgent-bug\n\n# node_modules がないのでインストール\nnpm install\n\n# 修正完了後、元のブランチに戻る\ngit checkout feature/my-work\ngit stash pop\n\n# あれ、どこまでやってたっけ...\n","bash","",[30,31,32,41,52,59,65,76,81,87,96,101,107,117,128,133],"code",{"__ignoreMap":28},[33,34,37],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sxvE3","# 作業中の変更を一時退避\n",[33,42,44,48],{"class":35,"line":43},2,[33,45,47],{"class":46},"senZ8","git",[33,49,51],{"class":50},"sdGka"," stash\n",[33,53,55],{"class":35,"line":54},3,[33,56,58],{"emptyLinePlaceholder":57},true,"\n",[33,60,62],{"class":35,"line":61},4,[33,63,64],{"class":39},"# ブランチ切り替え\n",[33,66,68,70,73],{"class":35,"line":67},5,[33,69,47],{"class":46},[33,71,72],{"class":50}," checkout",[33,74,75],{"class":50}," hotfix/urgent-bug\n",[33,77,79],{"class":35,"line":78},6,[33,80,58],{"emptyLinePlaceholder":57},[33,82,84],{"class":35,"line":83},7,[33,85,86],{"class":39},"# node_modules がないのでインストール\n",[33,88,90,93],{"class":35,"line":89},8,[33,91,92],{"class":46},"npm",[33,94,95],{"class":50}," install\n",[33,97,99],{"class":35,"line":98},9,[33,100,58],{"emptyLinePlaceholder":57},[33,102,104],{"class":35,"line":103},10,[33,105,106],{"class":39},"# 修正完了後、元のブランチに戻る\n",[33,108,110,112,114],{"class":35,"line":109},11,[33,111,47],{"class":46},[33,113,72],{"class":50},[33,115,116],{"class":50}," feature/my-work\n",[33,118,120,122,125],{"class":35,"line":119},12,[33,121,47],{"class":46},[33,123,124],{"class":50}," stash",[33,126,127],{"class":50}," pop\n",[33,129,131],{"class":35,"line":130},13,[33,132,58],{"emptyLinePlaceholder":57},[33,134,136],{"class":35,"line":135},14,[33,137,138],{"class":39},"# あれ、どこまでやってたっけ...\n",[19,140,141,145],{},[142,143,144],"strong",{},"git worktree","を使えば、複数のブランチを別々のディレクトリで同時に開ける。stash不要で、コンテキストスイッチのストレスから解放される。",[15,147,149],{"id":148},"git-worktree-とは","git worktree とは",[19,151,152],{},"通常、1つのGitリポジトリには1つの作業ディレクトリしかない。git worktreeを使うと、同じリポジトリから複数の作業ディレクトリ（ワークツリー）を作成できる。",[23,154,159],{"className":155,"code":157,"language":158},[156],"language-text","projects/\n├── mdx-playground/           # メインのワークツリー (master)\n└── mdx-playground-worktrees/\n    ├── hotfix-login/         # hotfix/login-validation ブランチ\n    └── feature-auth/         # feature/auth ブランチ\n","text",[30,160,157],{"__ignoreMap":28},[19,162,163,164,167],{},"各ワークツリーは",[30,165,166],{},".git","を共有するためcloneより軽量である。そして完全に独立しているので、stashなしでブランチ間を行き来できる。",[15,169,170],{"id":170},"基本コマンド",[172,173,174],"h3",{"id":174},"ワークツリーの作成",[23,176,178],{"className":25,"code":177,"language":27,"meta":28,"style":28},"# 新規ブランチを作成しつつワークツリーを作る\ngit worktree add ../mdx-playground-worktrees/hotfix-login -b hotfix/login-validation\n\n# 既存ブランチでワークツリーを作る\ngit worktree add ../mdx-playground-worktrees/feature-auth feature/auth\n",[30,179,180,185,205,209,214],{"__ignoreMap":28},[33,181,182],{"class":35,"line":36},[33,183,184],{"class":39},"# 新規ブランチを作成しつつワークツリーを作る\n",[33,186,187,189,192,195,198,202],{"class":35,"line":43},[33,188,47],{"class":46},[33,190,191],{"class":50}," worktree",[33,193,194],{"class":50}," add",[33,196,197],{"class":50}," ../mdx-playground-worktrees/hotfix-login",[33,199,201],{"class":200},"snbK4"," -b",[33,203,204],{"class":50}," hotfix/login-validation\n",[33,206,207],{"class":35,"line":54},[33,208,58],{"emptyLinePlaceholder":57},[33,210,211],{"class":35,"line":61},[33,212,213],{"class":39},"# 既存ブランチでワークツリーを作る\n",[33,215,216,218,220,222,225],{"class":35,"line":67},[33,217,47],{"class":46},[33,219,191],{"class":50},[33,221,194],{"class":50},[33,223,224],{"class":50}," ../mdx-playground-worktrees/feature-auth",[33,226,227],{"class":50}," feature/auth\n",[172,229,230],{"id":230},"一覧表示",[23,232,234],{"className":25,"code":233,"language":27,"meta":28,"style":28},"git worktree list\n",[30,235,236],{"__ignoreMap":28},[33,237,238,240,242],{"class":35,"line":36},[33,239,47],{"class":46},[33,241,191],{"class":50},[33,243,244],{"class":50}," list\n",[19,246,247],{},"出力例:",[23,249,252],{"className":250,"code":251,"language":158},[156],"C:/Users/numbe/Git_repo/mdx-playground                          abc1234 [master]\nC:/Users/numbe/Git_repo/mdx-playground-worktrees/hotfix-login   def5678 [hotfix/login-validation]\n",[30,253,251],{"__ignoreMap":28},[172,255,256],{"id":256},"削除",[23,258,260],{"className":25,"code":259,"language":27,"meta":28,"style":28},"# ワークツリーを削除（ブランチは残る）\ngit worktree remove ../mdx-playground-worktrees/hotfix-login\n\n# ブランチも削除する場合は別途\ngit branch -d hotfix/login-validation\n",[30,261,262,267,279,283,288],{"__ignoreMap":28},[33,263,264],{"class":35,"line":36},[33,265,266],{"class":39},"# ワークツリーを削除（ブランチは残る）\n",[33,268,269,271,273,276],{"class":35,"line":43},[33,270,47],{"class":46},[33,272,191],{"class":50},[33,274,275],{"class":50}," remove",[33,277,278],{"class":50}," ../mdx-playground-worktrees/hotfix-login\n",[33,280,281],{"class":35,"line":54},[33,282,58],{"emptyLinePlaceholder":57},[33,284,285],{"class":35,"line":61},[33,286,287],{"class":39},"# ブランチも削除する場合は別途\n",[33,289,290,292,295,298],{"class":35,"line":67},[33,291,47],{"class":46},[33,293,294],{"class":50}," branch",[33,296,297],{"class":200}," -d",[33,299,204],{"class":50},[172,301,302],{"id":302},"不要なワークツリーの掃除",[23,304,306],{"className":25,"code":305,"language":27,"meta":28,"style":28},"# 手動で削除したディレクトリの参照を掃除\ngit worktree prune\n",[30,307,308,313],{"__ignoreMap":28},[33,309,310],{"class":35,"line":36},[33,311,312],{"class":39},"# 手動で削除したディレクトリの参照を掃除\n",[33,314,315,317,319],{"class":35,"line":43},[33,316,47],{"class":46},[33,318,191],{"class":50},[33,320,321],{"class":50}," prune\n",[15,323,324],{"id":324},"推奨ディレクトリ構成",[19,326,327],{},"ワークツリーをどこに置くかは2つのアプローチがある。",[172,329,331],{"id":330},"パターン1-隣接ディレクトリ推奨","パターン1: 隣接ディレクトリ（推奨）",[23,333,336],{"className":334,"code":335,"language":158},[156],"projects/\n├── mdx-playground/              # メイン\n└── mdx-playground-worktrees/    # ワークツリー置き場\n    ├── hotfix-login/\n    └── feature-quiz/\n",[30,337,335],{"__ignoreMap":28},[19,339,340,343],{},[142,341,342],{},"メリット",": メインリポジトリがすっきり、IDE での混乱がない",[172,345,347],{"id":346},"パターン2-gitworktrees-内","パターン2: .git/worktrees 内",[23,349,352],{"className":350,"code":351,"language":158},[156],"mdx-playground/\n├── .git/\n│   └── worktrees/\n│       ├── hotfix-login/\n│       └── feature-quiz/\n└── (通常のファイル)\n",[30,353,351],{"__ignoreMap":28},[19,355,356,358,359,362],{},[142,357,342],{},": 一箇所にまとまる。ただし ",[30,360,361],{},".gitignore"," への追加不要（.git 内なので）",[15,364,366],{"id":365},"ai-エージェントとの並行開発","AI エージェントとの並行開発",[19,368,369,370,373],{},"git worktreeの真価は、",[142,371,372],{},"AIコーディングツールとの組み合わせ","で発揮される。",[172,375,377],{"id":376},"なぜ-worktree-が必要か","なぜ worktree が必要か",[19,379,380],{},"Claude CodeなどのAIエージェントは、作業ディレクトリを排他的に使う前提で動く。1つのディレクトリで複数のエージェントを走らせると、以下の問題が発生する。",[382,383,384,388,391],"ul",{},[385,386,387],"li",{},"ファイルの競合が発生",[385,389,390],{},"意図しない変更の上書き",[385,392,393],{},"コミット履歴の混乱",[19,395,396,397,400],{},"worktreeを使えば、",[142,398,399],{},"各エージェントに独立した作業空間","を与えられる。",[172,402,403],{"id":403},"並行開発ワークフロー",[23,405,408],{"className":406,"code":407,"language":158},[156],"ターミナル1 (メイン)           ターミナル2 (worktree)\n─────────────────────        ─────────────────────\nmdx-playground/              mdx-playground-worktrees/hotfix/\n> claude                     > claude\n(機能開発を継続)              (緊急バグ修正)\n",[30,409,407],{"__ignoreMap":28},[19,411,412],{},"実際の手順:",[23,414,416],{"className":25,"code":415,"language":27,"meta":28,"style":28},"# 1. 緊急対応用の worktree を作成\ngit worktree add ../mdx-playground-worktrees/hotfix -b hotfix/urgent\n\n# 2. 新しいターミナルで worktree に移動\ncd ../mdx-playground-worktrees/hotfix\n\n# 3. 依存関係をインストール\npnpm install\n\n# 4. Claude Code を起動して修正を依頼\nclaude\n\n# 5. 修正完了後、コミット＆プッシュ\ngit add . && git commit -m \"fix: urgent bug\" && git push\n\n# 6. メインに戻って worktree を削除\ncd ../../mdx-playground\ngit worktree remove ../mdx-playground-worktrees/hotfix\ngit branch -d hotfix/urgent\n",[30,417,418,423,439,443,448,457,461,466,473,477,482,487,491,496,535,540,546,554,565],{"__ignoreMap":28},[33,419,420],{"class":35,"line":36},[33,421,422],{"class":39},"# 1. 緊急対応用の worktree を作成\n",[33,424,425,427,429,431,434,436],{"class":35,"line":43},[33,426,47],{"class":46},[33,428,191],{"class":50},[33,430,194],{"class":50},[33,432,433],{"class":50}," ../mdx-playground-worktrees/hotfix",[33,435,201],{"class":200},[33,437,438],{"class":50}," hotfix/urgent\n",[33,440,441],{"class":35,"line":54},[33,442,58],{"emptyLinePlaceholder":57},[33,444,445],{"class":35,"line":61},[33,446,447],{"class":39},"# 2. 新しいターミナルで worktree に移動\n",[33,449,450,454],{"class":35,"line":67},[33,451,453],{"class":452},"sz8Xr","cd",[33,455,456],{"class":50}," ../mdx-playground-worktrees/hotfix\n",[33,458,459],{"class":35,"line":78},[33,460,58],{"emptyLinePlaceholder":57},[33,462,463],{"class":35,"line":83},[33,464,465],{"class":39},"# 3. 依存関係をインストール\n",[33,467,468,471],{"class":35,"line":89},[33,469,470],{"class":46},"pnpm",[33,472,95],{"class":50},[33,474,475],{"class":35,"line":98},[33,476,58],{"emptyLinePlaceholder":57},[33,478,479],{"class":35,"line":103},[33,480,481],{"class":39},"# 4. Claude Code を起動して修正を依頼\n",[33,483,484],{"class":35,"line":109},[33,485,486],{"class":46},"claude\n",[33,488,489],{"class":35,"line":119},[33,490,58],{"emptyLinePlaceholder":57},[33,492,493],{"class":35,"line":130},[33,494,495],{"class":39},"# 5. 修正完了後、コミット＆プッシュ\n",[33,497,498,500,502,505,509,512,515,518,522,525,528,530,532],{"class":35,"line":135},[33,499,47],{"class":46},[33,501,194],{"class":50},[33,503,504],{"class":50}," .",[33,506,508],{"class":507},"shFtX"," &&",[33,510,511],{"class":46}," git",[33,513,514],{"class":50}," commit",[33,516,517],{"class":200}," -m",[33,519,521],{"class":520},"sMJiu"," \"",[33,523,524],{"class":50},"fix: urgent bug",[33,526,527],{"class":520},"\"",[33,529,508],{"class":507},[33,531,511],{"class":46},[33,533,534],{"class":50}," push\n",[33,536,538],{"class":35,"line":537},15,[33,539,58],{"emptyLinePlaceholder":57},[33,541,543],{"class":35,"line":542},16,[33,544,545],{"class":39},"# 6. メインに戻って worktree を削除\n",[33,547,549,551],{"class":35,"line":548},17,[33,550,453],{"class":452},[33,552,553],{"class":50}," ../../mdx-playground\n",[33,555,557,559,561,563],{"class":35,"line":556},18,[33,558,47],{"class":46},[33,560,191],{"class":50},[33,562,275],{"class":50},[33,564,456],{"class":50},[33,566,568,570,572,574],{"class":35,"line":567},19,[33,569,47],{"class":46},[33,571,294],{"class":50},[33,573,297],{"class":200},[33,575,438],{"class":50},[172,577,578],{"id":578},"複数エージェントの実例",[19,580,581,582,585],{},"incident.io のチームは ",[142,583,584],{},"4〜5 個の Claude エージェント"," を同時に走らせている。",[23,587,590],{"className":588,"code":589,"language":158},[156],"┌─────────────────────────────────────────────────────┐\n│ Terminal 1: feature/quiz-animation                 │\n│ > claude \"クイズのアニメーションを実装して\"          │\n├─────────────────────────────────────────────────────┤\n│ Terminal 2: hotfix/login-bug                       │\n│ > claude \"ログインエラーを修正して\"                  │\n├─────────────────────────────────────────────────────┤\n│ Terminal 3: refactor/api-cleanup                   │\n│ > claude \"API 層をリファクタリングして\"              │\n└─────────────────────────────────────────────────────┘\n",[30,591,589],{"__ignoreMap":28},[19,593,594],{},"各エージェントが独立したブランチで作業するため、競合なく並行開発できる。",[15,596,598],{"id":597},"windows-環境での-tips","Windows 環境での Tips",[172,600,602],{"id":601},"powershell-ヘルパー関数","PowerShell ヘルパー関数",[19,604,605],{},"頻繁に worktree を作る場合、PowerShell プロファイルに関数を追加すると便利。",[23,607,611],{"className":608,"code":609,"language":610,"meta":28,"style":28},"language-powershell shiki shiki-themes vitesse-light vitesse-light","# $PROFILE に追加\nfunction New-Worktree {\n    param(\n        [Parameter(Mandatory=$true)]\n        [string]$BranchName\n    )\n    $worktreeDir = \"../$(Split-Path -Leaf (Get-Location))-worktrees/$BranchName\"\n    git worktree add $worktreeDir -b $BranchName\n    Write-Host \"Created worktree at: $worktreeDir\"\n    Write-Host \"Run: cd $worktreeDir\"\n}\n\nfunction Remove-Worktree {\n    param(\n        [Parameter(Mandatory=$true)]\n        [string]$BranchName,\n        [switch]$WithBranch\n    )\n    $worktreeDir = \"../$(Split-Path -Leaf (Get-Location))-worktrees/$BranchName\"\n    git worktree remove $worktreeDir\n    if ($WithBranch) {\n        git branch -d $BranchName\n    }\n}\n\nSet-Alias nwt New-Worktree\nSet-Alias rwt Remove-Worktree\n","powershell",[30,612,613,618,623,628,633,638,643,648,653,658,663,668,672,677,681,685,690,695,699,703,709,715,721,727,732,737,743],{"__ignoreMap":28},[33,614,615],{"class":35,"line":36},[33,616,617],{},"# $PROFILE に追加\n",[33,619,620],{"class":35,"line":43},[33,621,622],{},"function New-Worktree {\n",[33,624,625],{"class":35,"line":54},[33,626,627],{},"    param(\n",[33,629,630],{"class":35,"line":61},[33,631,632],{},"        [Parameter(Mandatory=$true)]\n",[33,634,635],{"class":35,"line":67},[33,636,637],{},"        [string]$BranchName\n",[33,639,640],{"class":35,"line":78},[33,641,642],{},"    )\n",[33,644,645],{"class":35,"line":83},[33,646,647],{},"    $worktreeDir = \"../$(Split-Path -Leaf (Get-Location))-worktrees/$BranchName\"\n",[33,649,650],{"class":35,"line":89},[33,651,652],{},"    git worktree add $worktreeDir -b $BranchName\n",[33,654,655],{"class":35,"line":98},[33,656,657],{},"    Write-Host \"Created worktree at: $worktreeDir\"\n",[33,659,660],{"class":35,"line":103},[33,661,662],{},"    Write-Host \"Run: cd $worktreeDir\"\n",[33,664,665],{"class":35,"line":109},[33,666,667],{},"}\n",[33,669,670],{"class":35,"line":119},[33,671,58],{"emptyLinePlaceholder":57},[33,673,674],{"class":35,"line":130},[33,675,676],{},"function Remove-Worktree {\n",[33,678,679],{"class":35,"line":135},[33,680,627],{},[33,682,683],{"class":35,"line":537},[33,684,632],{},[33,686,687],{"class":35,"line":542},[33,688,689],{},"        [string]$BranchName,\n",[33,691,692],{"class":35,"line":548},[33,693,694],{},"        [switch]$WithBranch\n",[33,696,697],{"class":35,"line":556},[33,698,642],{},[33,700,701],{"class":35,"line":567},[33,702,647],{},[33,704,706],{"class":35,"line":705},20,[33,707,708],{},"    git worktree remove $worktreeDir\n",[33,710,712],{"class":35,"line":711},21,[33,713,714],{},"    if ($WithBranch) {\n",[33,716,718],{"class":35,"line":717},22,[33,719,720],{},"        git branch -d $BranchName\n",[33,722,724],{"class":35,"line":723},23,[33,725,726],{},"    }\n",[33,728,730],{"class":35,"line":729},24,[33,731,667],{},[33,733,735],{"class":35,"line":734},25,[33,736,58],{"emptyLinePlaceholder":57},[33,738,740],{"class":35,"line":739},26,[33,741,742],{},"Set-Alias nwt New-Worktree\n",[33,744,746],{"class":35,"line":745},27,[33,747,748],{},"Set-Alias rwt Remove-Worktree\n",[19,750,751],{},"使い方:",[23,753,755],{"className":608,"code":754,"language":610,"meta":28,"style":28},"nwt hotfix/urgent      # ワークツリー作成\nrwt hotfix/urgent -WithBranch  # ワークツリーとブランチを削除\n",[30,756,757,762],{"__ignoreMap":28},[33,758,759],{"class":35,"line":36},[33,760,761],{},"nwt hotfix/urgent      # ワークツリー作成\n",[33,763,764],{"class":35,"line":43},[33,765,766],{},"rwt hotfix/urgent -WithBranch  # ワークツリーとブランチを削除\n",[172,768,770],{"id":769},"git-bash-での-alias","Git Bash での alias",[23,772,774],{"className":25,"code":773,"language":27,"meta":28,"style":28},"# ~/.bashrc に追加\nwt-add() {\n    local branch=$1\n    local repo=$(basename $(pwd))\n    git worktree add \"../${repo}-worktrees/${branch}\" -b \"$branch\"\n}\n\nwt-rm() {\n    local branch=$1\n    local repo=$(basename $(pwd))\n    git worktree remove \"../${repo}-worktrees/${branch}\"\n    [ \"$2\" = \"--with-branch\" ] && git branch -d \"$branch\"\n}\n",[30,775,776,781,792,807,829,874,878,882,891,901,917,945,984],{"__ignoreMap":28},[33,777,778],{"class":35,"line":36},[33,779,780],{"class":39},"# ~/.bashrc に追加\n",[33,782,783,786,789],{"class":35,"line":43},[33,784,785],{"class":46},"wt-add",[33,787,788],{"class":507},"()",[33,790,791],{"class":507}," {\n",[33,793,794,798,801,804],{"class":35,"line":54},[33,795,797],{"class":796},"stQ0i","    local",[33,799,294],{"class":800},"s4oTP",[33,802,803],{"class":507},"=",[33,805,806],{"class":800},"$1\n",[33,808,809,811,814,817,820,823,826],{"class":35,"line":61},[33,810,797],{"class":796},[33,812,813],{"class":800}," repo",[33,815,816],{"class":507},"=$(",[33,818,819],{"class":46},"basename",[33,821,822],{"class":507}," $(",[33,824,825],{"class":452},"pwd",[33,827,828],{"class":507},"))\n",[33,830,831,834,836,838,840,843,846,849,852,855,857,860,862,864,866,868,871],{"class":35,"line":67},[33,832,833],{"class":46},"    git",[33,835,191],{"class":50},[33,837,194],{"class":50},[33,839,521],{"class":520},[33,841,842],{"class":50},"../",[33,844,845],{"class":507},"${",[33,847,848],{"class":50},"repo",[33,850,851],{"class":507},"}",[33,853,854],{"class":50},"-worktrees/",[33,856,845],{"class":507},[33,858,859],{"class":50},"branch",[33,861,851],{"class":507},[33,863,527],{"class":520},[33,865,201],{"class":200},[33,867,521],{"class":520},[33,869,870],{"class":50},"$branch",[33,872,873],{"class":520},"\"\n",[33,875,876],{"class":35,"line":78},[33,877,667],{"class":507},[33,879,880],{"class":35,"line":83},[33,881,58],{"emptyLinePlaceholder":57},[33,883,884,887,889],{"class":35,"line":89},[33,885,886],{"class":46},"wt-rm",[33,888,788],{"class":507},[33,890,791],{"class":507},[33,892,893,895,897,899],{"class":35,"line":98},[33,894,797],{"class":796},[33,896,294],{"class":800},[33,898,803],{"class":507},[33,900,806],{"class":800},[33,902,903,905,907,909,911,913,915],{"class":35,"line":103},[33,904,797],{"class":796},[33,906,813],{"class":800},[33,908,816],{"class":507},[33,910,819],{"class":46},[33,912,822],{"class":507},[33,914,825],{"class":452},[33,916,828],{"class":507},[33,918,919,921,923,925,927,929,931,933,935,937,939,941,943],{"class":35,"line":109},[33,920,833],{"class":46},[33,922,191],{"class":50},[33,924,275],{"class":50},[33,926,521],{"class":520},[33,928,842],{"class":50},[33,930,845],{"class":507},[33,932,848],{"class":50},[33,934,851],{"class":507},[33,936,854],{"class":50},[33,938,845],{"class":507},[33,940,859],{"class":50},[33,942,851],{"class":507},[33,944,873],{"class":520},[33,946,947,950,952,955,957,960,962,965,967,970,972,974,976,978,980,982],{"class":35,"line":119},[33,948,949],{"class":507},"    [",[33,951,521],{"class":520},[33,953,954],{"class":50},"$2",[33,956,527],{"class":520},[33,958,959],{"class":796}," =",[33,961,521],{"class":520},[33,963,964],{"class":50},"--with-branch",[33,966,527],{"class":520},[33,968,969],{"class":507}," ]",[33,971,508],{"class":507},[33,973,511],{"class":46},[33,975,294],{"class":50},[33,977,297],{"class":200},[33,979,521],{"class":520},[33,981,870],{"class":50},[33,983,873],{"class":520},[33,985,986],{"class":35,"line":130},[33,987,667],{"class":507},[15,989,990],{"id":990},"注意点",[172,992,993],{"id":993},"環境構築は毎回必要",[19,995,996,997,1000,1001,1004],{},"新しいworktreeには",[30,998,999],{},"node_modules","も",[30,1002,1003],{},".env","もない。",[23,1006,1008],{"className":25,"code":1007,"language":27,"meta":28,"style":28},"# worktree に移動したら\npnpm install\ncp ../\u003Cメインディレクトリ>/.env .env\n",[30,1009,1010,1015,1021],{"__ignoreMap":28},[33,1011,1012],{"class":35,"line":36},[33,1013,1014],{"class":39},"# worktree に移動したら\n",[33,1016,1017,1019],{"class":35,"line":43},[33,1018,470],{"class":46},[33,1020,95],{"class":50},[33,1022,1023,1026,1029,1032,1035,1039,1042,1045],{"class":35,"line":54},[33,1024,1025],{"class":46},"cp",[33,1027,1028],{"class":50}," ../",[33,1030,1031],{"class":796},"\u003C",[33,1033,1034],{"class":50},"メインディレクト",[33,1036,1038],{"class":1037},"sG7-3","リ",[33,1040,1041],{"class":796},">",[33,1043,1044],{"class":50},"/.env",[33,1046,1047],{"class":50}," .env\n",[172,1049,1050],{"id":1050},"リソース消費",[19,1052,1053],{},"複数のClaude Codeセッションを走らせると、以下の問題がある。",[382,1055,1056,1059],{},[385,1057,1058],{},"メモリ使用量が増加",[385,1060,1061],{},"API コスト（トークン）が複数分かかる",[19,1063,1064],{},"3〜5個程度が実用的な上限である。",[172,1066,1068],{"id":1067},"同じブランチは1つの-worktree-のみ","同じブランチは1つの worktree のみ",[19,1070,1071],{},"1つのブランチを複数のworktreeでチェックアウトすることはできない。",[23,1073,1075],{"className":25,"code":1074,"language":27,"meta":28,"style":28},"# これはエラーになる\ngit worktree add ../wt1 feature/x\ngit worktree add ../wt2 feature/x  # fatal: 'feature/x' is already checked out\n",[30,1076,1077,1082,1096],{"__ignoreMap":28},[33,1078,1079],{"class":35,"line":36},[33,1080,1081],{"class":39},"# これはエラーになる\n",[33,1083,1084,1086,1088,1090,1093],{"class":35,"line":43},[33,1085,47],{"class":46},[33,1087,191],{"class":50},[33,1089,194],{"class":50},[33,1091,1092],{"class":50}," ../wt1",[33,1094,1095],{"class":50}," feature/x\n",[33,1097,1098,1100,1102,1104,1107,1110],{"class":35,"line":54},[33,1099,47],{"class":46},[33,1101,191],{"class":50},[33,1103,194],{"class":50},[33,1105,1106],{"class":50}," ../wt2",[33,1108,1109],{"class":50}," feature/x",[33,1111,1112],{"class":39},"  # fatal: 'feature/x' is already checked out\n",[15,1114,1115],{"id":1115},"まとめ",[1117,1118,1119,1134],"table",{},[1120,1121,1122],"thead",{},[1123,1124,1125,1129,1132],"tr",{},[1126,1127,1128],"th",{},"課題",[1126,1130,1131],{},"git stash",[1126,1133,144],{},[1135,1136,1137,1149,1160,1171],"tbody",{},[1123,1138,1139,1143,1146],{},[1140,1141,1142],"td",{},"コンテキストの退避",[1140,1144,1145],{},"手動 stash/pop",[1140,1147,1148],{},"不要",[1123,1150,1151,1154,1157],{},[1140,1152,1153],{},"並行作業",[1140,1155,1156],{},"不可",[1140,1158,1159],{},"複数ブランチを同時に開ける",[1123,1161,1162,1165,1168],{},[1140,1163,1164],{},"AI エージェントとの相性",[1140,1166,1167],{},"競合リスクあり",[1140,1169,1170],{},"独立した作業空間",[1123,1172,1173,1176,1179],{},[1140,1174,1175],{},"環境構築",[1140,1177,1178],{},"毎回（checkout 後）",[1140,1180,1181],{},"毎回（worktree 作成後）",[19,1183,1184,1185,1188],{},"git worktreeは、特に",[142,1186,1187],{},"AIエージェントとの並行開発","で威力を発揮する。stashを卒業して、ストレスフリーな開発を実現しよう。",[15,1190,1191],{"id":1191},"参考",[382,1193,1194,1203,1210,1217],{},[385,1195,1196],{},[1197,1198,1202],"a",{"href":1199,"rel":1200},"https://git-scm.com/docs/git-worktree",[1201],"nofollow","Git worktree 公式ドキュメント",[385,1204,1205],{},[1197,1206,1209],{"href":1207,"rel":1208},"https://incident.io/blog/shipping-faster-with-claude-code-and-git-worktrees",[1201],"How we're shipping faster with Claude Code and Git Worktrees | incident.io",[385,1211,1212],{},[1197,1213,1216],{"href":1214,"rel":1215},"https://medium.com/@mabd.dev/git-worktrees-the-secret-weapon-for-running-multiple-ai-coding-agents-in-parallel-e9046451eb96",[1201],"Git Worktrees: The Secret Weapon for Running Multiple AI Coding Agents in Parallel",[385,1218,1219],{},[1197,1220,1223],{"href":1221,"rel":1222},"https://stevekinney.com/courses/ai-development/git-worktrees",[1201],"Using Git Worktrees for Parallel AI Development | Steve Kinney",[1225,1226,1227],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}",{"title":28,"searchDepth":43,"depth":43,"links":1229},[1230,1231,1232,1238,1242,1247,1251,1256,1257],{"id":17,"depth":43,"text":17},{"id":148,"depth":43,"text":149},{"id":170,"depth":43,"text":170,"children":1233},[1234,1235,1236,1237],{"id":174,"depth":54,"text":174},{"id":230,"depth":54,"text":230},{"id":256,"depth":54,"text":256},{"id":302,"depth":54,"text":302},{"id":324,"depth":43,"text":324,"children":1239},[1240,1241],{"id":330,"depth":54,"text":331},{"id":346,"depth":54,"text":347},{"id":365,"depth":43,"text":366,"children":1243},[1244,1245,1246],{"id":376,"depth":54,"text":377},{"id":403,"depth":54,"text":403},{"id":578,"depth":54,"text":578},{"id":597,"depth":43,"text":598,"children":1248},[1249,1250],{"id":601,"depth":54,"text":602},{"id":769,"depth":54,"text":770},{"id":990,"depth":43,"text":990,"children":1252},[1253,1254,1255],{"id":993,"depth":54,"text":993},{"id":1050,"depth":54,"text":1050},{"id":1067,"depth":54,"text":1068},{"id":1115,"depth":43,"text":1115},{"id":1191,"depth":43,"text":1191},null,"複数ブランチを同時に扱える git worktree の導入ガイド。Claude Code との並行開発ワークフローも解説","md",{},"/git-worktree-wtp-guide",false,"2025-12-19T00:00:00.000Z",{"title":5,"description":1259},"2025-12/2025-12-19/git-worktree-wtp-guide",[47,1268,1269,1270],"worktree","Claude Code","並行開発","vuksrJ2VEyEehEHmIQZzXbchpW--8Wy0YzLLP03gCws",[],"https://log.eurekapu.com/og/blog/git-worktree-wtp-guide.png?v=2025-12-19T00%3A00%3A00.000Z&title=git%20worktree%20%E3%81%A7%E5%AE%9F%E7%8F%BE%E3%81%99%E3%82%8B%E4%B8%A6%E8%A1%8C%E9%96%8B%E7%99%BA%20-%20AI%20%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B&author=Kei%20Komatsu&sig=56399346e3827ce3",1782528771428]