Worktrunkの使い方|git worktreeをブランチ感覚で扱う、Windowsでの注意点

git-wt list の出力を背景にした Worktrunk のアイキャッチ ローカルLLM

この記事について(広告・アフィリエイトリンクはありません)

紹介しているソフトは無料で入手できます。

Worktrunk は、Git の worktree を「ブランチ名だけ」で扱えるようにするコマンドです。AI エージェントを何体も同時に動かすとき、作業フォルダーを分ける手間を減らします。

Windows 11 の使い捨てのリポジトリで、作成から合流までを試しました。流れは動きましたが、Windows では wt の名前の衝突、署名なしの配布、.env のコピー、PowerShell のプロファイルの場所を押さえておく必要があります。

先に結論(今回のテスト条件で)

確かめたこと結果
作成、一覧、合流、削除動いた。日本語とスペースを含むパスでも動いた
3つの worktree で同時に作業互いのファイルは混ざらなかった
同じファイルを変更して合流競合で止まる。解決は自分で行う
変更が残っている worktree の削除拒否された(安全側)
フック動いた。初回は承認が必要
.gitignore のファイルのコピー動いた。ただし .env もコピーされた
Claude Code との組み合わせ未確認(後述)
  • 向いているのは、同時に複数の変更を走らせる人です。1本ずつ作業するなら、普通のブランチで足ります。
  • worktree の作成は、素の git worktree add より約0.6秒遅くなります。手で打つなら気にならない差です。
  • Windows では wt が Windows Terminal と衝突するので、git-wt で呼びます。

配布の Windows 版にはコード署名がなく、Windows Defender が誤検知するという報告もあります。

git-wt list の出力。main と p1、p2、p3 などのブランチが、変更の状態とパスとともに表で並んでいる
git-wt list の出力。main と p1、p2、p3 などのブランチが、変更の状態とパスとともに表で並んでいる

worktree は何のためにある?

Git の worktree は、1つのリポジトリから作業フォルダーを複数作る機能です。ブランチを切り替えなくても、フォルダーごとに別のブランチを開けます。

エージェントを2体、同じフォルダーで動かすと、ファイルを取り合います。フォルダーを分けるのは、この衝突を避けるためです。

素の Git でもできることですが、ブランチ名とパスを毎回指定する手間があります。

やることWorktrunk素の Git
作成して移動git-wt switch -c featgit worktree add -b feat ../repo.feat と cd ../repo.feat
一覧git-wt listgit worktree list
片付けgit-wt removegit worktree remove ../repo.feat と git branch -d feat

試した環境

項目内容
OSWindows 11
Worktrunkv0.81.0(2026-10-20)の zip を使い捨てのフォルダーに展開
Git2.52.0(Git for Windows)
シェルPowerShell 7
リポジトリ検証用に新しく作ったもの。普段のリポジトリは使っていません
検証日2026年11月4日

入れ方

Windows の公式の手順は winget です。

winget install max-sixty.worktrunk

wt という名前は、Windows Terminal がすでに使っています。そのため winget 版は git-wt という名前でも入ります。この記事の例も git-wt で統一しました。

私は PC の環境を変えないように、winget は実行せず、同じ zip を展開して試しました。winget show が示す zip の SHA-256 は、リリースの .sha256 および手元のファイルと一致しています。

確かめておきたい署名

確認結果
zip の SHA-256389b595cb67482085419968939e329d61901cca9e959e4b6c288f01387b768b8(公式の値と一致)
git-wt.exe の署名なし(Authenticode: NotSigned)

README には SignPath による署名の案内があります。ただし Issue #3355 の作者の説明によると、v0.78.0 以降は署名なしに戻っていて、本番の証明書を待っている状態です。

この Issue には、Windows Defender が Trojan:Win32/Wacatac.B!ml と判定して入らないという報告もあり、開発側は誤検知としています。今回の PC では止まりませんでした。

移動を効かせる設定

git-wt は別のプログラムなので、そのままでは今のシェルの場所を変えられません。何もしないと、次のように表示されます。

Cannot change directory — shell integration not installed

公式の手順は git-wt config shell install です。これは PowerShell のプロファイルを書き換えます。先に --dry-run で書き込み先を確かめてください。

git-wt config shell install powershell --dry-run

私の環境では、書き込み先は WindowsPowerShell の側でした。ところが PowerShell 7 の $PROFILE は PowerShell の側を指しています。PowerShell 7 を使う人は、別の場所を指していないか確かめてください。 実際のプロファイルは書き換えていません。

代わりに、そのセッションだけで次を実行して確かめました。作成後に、新しいフォルダーへ移動しました。

Invoke-Expression (& git-wt config shell init powershell | Out-String)

毎回使うなら、自分で $PROFILE にこの行を足します(足した状態は試していません)。

基本の使い方

git-wt switch -c feat-a          # 作って移動
git-wt list                      # 一覧
git-wt merge main                # main へ合流して片付け
git-wt remove feat-b             # 消す

既定の場所はリポジトリの隣で、repo.feat-a のような名前です。

merge がしてくれること

git-wt merge main の1回で、次の順に処理されました。

  1. 複数のコミットを1つにまとめる(squash)
  2. main へ取り込む
  3. worktree とブランチをバックグラウンドで消す

まとめるのをやめるときは --no-squash を付けます。LLM の設定がないと、コミットメッセージは Squash commits from feat-a という定型文になりました。

コミットしていない変更があると消せない

状態git-wt remove の結果
コミットしていない変更がある拒否。--force が必要
合流していないworktree は消え、ブランチは残る。-D でブランチも消える
合流済み両方消える

3つ同時に動かしてみた

エージェントの代わりに、別々のフォルダーでファイルを書いてコミットする処理を、3つ同時に動かしました。

確認結果
コミット先それぞれ自分のブランチ(p1、p2、p3)
作業後の未コミット0件
別のフォルダーのファイル混ざらなかった

ただし 全員が同じ shared.txt を変更すると、合流のときに競合します。1本目は通り、2本目は次のように止まりました。

Rebase onto main incomplete
CONFLICT (add/add): Merge conflict in shared.txt

自動では解決しません。ファイルを直して git add、git rebase --continue のあと、もう一度 git-wt merge main で通りました。worktree はフォルダーの衝突を防ぐものです。変更の内容がぶつかるのは防げません。 エージェントに渡す仕事は、触るファイルが重ならないように分けておくと安全です。

Claude Code は試せていない

-x で作成後にプログラムを起動できます。公式の例は -x claude です。今回の PC には claude のコマンドが PATH になかったので、代わりに cmd、git、npm で起動を確かめました。

Claude Code そのものを Worktrunk から動かす確認は、していません。 使い勝手は、実際に試した人の評価を参考にしてください。

-x の書き方でつまずいた

引数はまとめて書けません。-- のあとに分けます。

書き方結果
-x 'cmd /c cd'失敗(パスが見つからない)
-x cmd -- /c cd成功

最初はパスの日本語が原因かと思いました。英数字だけのパスでも同じだったので、書き方の問題でした。

フックは動くが、初回は承認が要る

.config/wt.toml に書くと、作成や合流のときにコマンドを動かせます。

[pre-start]
stamp = "echo pre-start $(pwd) > .wt-pre-start.txt"

[post-start]
stamp = "sleep 1; echo post-start {{ branch }} port {{ branch | hash_port }} > .wt-post-start.txt"

[pre-merge]
check = "test -f must_exist.txt"
確認結果
初回実行前に承認を求められた。プロンプトが出せない環境では --yes がないと失敗
pre-start、post-start動いた。ブランチごとのポート番号も作られた
pre-merge が失敗合流が止まった

公開の説明では、フックは Windows でも Git Bash で動きます。PowerShell で使う場合も Git for Windows が必要です。 .wt-pre-start.txt のパスも /l/... のような形でした。

承認の仕組みは、他の人のリポジトリのコマンドが勝手に動くのを防いでくれます。ただし --yes はこれを飛ばすので、知らないリポジトリでは使わないでください。

キャッシュのコピーは SSD で1.2秒、NTFS では容量を節約しない

git-wt step copy-ignored は、.gitignore の対象のファイルを新しい worktree にコピーします。node_modules などの作り直しを省くためのものです。

小さなファイル2,000個で測りました。

場所と方法時間
SSD、git-wt step copy-ignored1.2秒
SSD、robocopy0.2秒
USB の HDD、git-wt step copy-ignored80秒〜493秒
USB の HDD、robocopy114秒

HDD の値は、別のダウンロードが動いていた間のものなので、参考程度に見てください。

README の「コピーせずに共有」は、APFS、btrfs、XFS などの話です。NTFS では実際にファイルをコピーします。 出力にも (full copy) と出ました。ディスクの節約にはなりません。

.env もコピーされる

既定では、.gitignore の対象のファイルが広くコピーされます。今回も .env がコピーされました。秘密の情報を別の場所に増やしたくないときは、.worktreeinclude で対象を絞ります。

node_modules/

このファイルを置くと、--dry-run の表示は node_modules だけになりました。

作成は素の Git より約0.6秒遅い

SSD の上で5回ずつ測りました。

操作Worktrunk素の Git
worktree の作成約0.7秒約0.07秒
一覧(11個)0.48秒0.05秒

一覧のほうは状態も調べるので、単純には比べられません。

ライセンスは MIT か Apache-2.0 の選択式

GitHub の表示は「NOASSERTION」ですが、LICENSE の原文は MIT と Apache-2.0 のどちらかを選べるデュアルライセンスです。Cargo.toml も MIT OR Apache-2.0 です。

確認時点でスターは 10,458、フォークは 375。README の「最も人気のある worktree マネージャー」は作者自身の説明で、私は比べていません。スターは品質の保証ではありません。

よくある質問(FAQ)

Q. 無料ですか?

Worktrunk は無料です。LLM のコミットメッセージなどで有料の API を使う設定にすると、その料金がかかります。

Q. Windows Terminal の wt と衝突しませんか?

衝突します。git-wt で呼ぶか、Windows の設定の「アプリ実行エイリアス」で Terminal 側を切ります。

Q. worktree を増やすとディスクを食いますか?

作業ファイルの分だけ増えます。Windows の NTFS では、キャッシュのコピーも実際の容量を使います。

Q. エージェントが同じファイルを触ったらどうなりますか?

合流のときに競合で止まります。自動では解決しません。

Q. Defender に止められました。

誤検知の報告が Issue #3355 にあります。入手元とハッシュを確かめ、不安なら無理に入れないでください。

まとめ

  • 作成から合流までの流れは、Windows でも動きました。
  • フォルダーは分かれますが、変更のぶつかりは防げません。
  • git-wt の呼び方、署名なし、.env のコピー、PowerShell のプロファイルの場所に注意が必要です。

この記事の検証環境

Windows 11 / Worktrunk v0.81.0 / Git 2.52.0 / 使い捨てのリポジトリ / 2026年11月4日
これまでの検証の一覧はこちら

検証メモ

エージェントの代役:並行のテストは、ファイルを書いてコミットするだけのスクリプトです。AI エージェントの動きそのものではありません。

計測:作成の時間は5回で、ファイルの少ない小さなリポジトリの値です。大きなリポジトリでは変わります。

Defender:止まらなかったのは今回の PC での結果で、環境によって変わります。誤検知かどうかを私が確かめたわけではありません。

隔離:USERPROFILE などを検証用のフォルダーに向けて実行しました。ただし --dry-run の書き込み先は本物のプロファイルを指していたので、実際の書き込みはしていません。

未確認のこと:winget の実行、Claude Code や Codex との組み合わせ、対話のピッカー、LLM のコミットメッセージ、CI の表示、pr: の切り替え、Git Bash でのシェル連携、ReFS、大きなリポジトリ。

参考リンク

この記事を書いた人
こまたろ

画像生成 AI に興味を持ったのがきっかけで、3年ほど前から ComfyUI を触っています。始めたころは今ほど情報がそろっておらず、何時間もかけて整えた環境が翌日のアップデートで動かなくなったこともありました。

KOBO Lab は、自分の学び直しと、これから ComfyUI を始める人が同じところでつまずかないようにと思って始めたサイトです。初心者も中級者も、迷ったときに開くサイトを目指しています。

検証は、RTX 5090 を積んだ自作 PC 1台で、実際に動かして確かめています。作業を楽にするための自作ツールも作っています。

記事は、運営者自身の経験と検証をもとに、Claudeで下書きを作り、GrokボットとMuseでも添削や確認をして仕上げています。

KOBO Lab の新しい記事を受け取る
ローカルLLM
KOBO Lab の新しい記事を受け取る
タイトルとURLをコピーしました