🔀

tmux, gwq, fzfでworktreeをサクサク切り替えてAIコーディングを並列する

に公開

TL;DR

git worktreeを使う機会が増えてきたので、さっと切り替えられるようにしました。

fzfでブランチ選択→gwqでworktree作成→tmuxでセッション作成/スイッチ
↑を行うスクリプトをtmuxのpopup windowで実行してます

gif
(ちょっと現実味がないぐらい忙しないですが、greet.sh, fizzbuzz.shをClaude Codeを用いて並行で開発するようなシナリオで撮ってみたデモです)

gwqとは

git worktreeって作るときも消すときもパスちゃんと指定しないといけないんですね。これが結構面倒です。
リポジトリ名やブランチ名から一意な命名規則で作れば良い話なんですが、ブランチ名には/が入っていたりしてなかなか一筋縄では行きません。
ところがgwqなら、gwq add <branch name>だけでよしなにworktreeを作ってくれます。gwq listで一覧取ったりgwq removeで消したりも、パスを意識せずにできます。
最高

popup windowとは、tmuxでpaneの上に矩形のウィンドウを表示できる機能です。
windowを何分割していようが、いつでもその上に大きいウィンドウを出せるのでとても便利です。
lazygitなんかをこれで呼び出せるようにしておくと最高。
popup

やってること

何をしているかというと↓だけです。worktreeやセッションがすでにあればそのステップはスキップされます。

  1. fzfでブランチ選択
  2. gwqでworktreeをadd
  3. tmuxセッション作成してswitch

工夫したのはfzfに渡すリストです。↓の順番で表示されてます。

  • 既存worktreeのブランチ
  • ローカルブランチ
  • リモートブランチ

list

ソースコード

人によって環境が違うので、前項の仕様をAIに伝えて各々作ってもらったほうが多分良いです。

スクリプト本体
https://github.com/ymat19/dotfiles/blob/main/scripts/tmux-worktree-switcher.sh

キーバインド

bind w popup -d '#{pane_current_path}' -w90% -h90% -E zsh -c "source ~/.zshrc && ~/scripts/tmux-worktree-switcher.sh"

感想など

記事本編が薄い分はここで内容を**稼ぎ**ます

VS Codeでは

https://marketplace.visualstudio.com/items?itemName=jackiotyu.git-worktree-manager

こういう拡張機能があってワンクリックでworktreeを切り替えられるらしいです。
上司が感動してたので多分体験が良い。

gwqについて

今回はディレクトリを意識せずにworktreeを扱えるラッパーのような感じで活用してますが、gwq自体は結構リッチです。なんならこれ自体にもtmux統合があります。
もっと活用していきたいですね。

ターミナルエミュレータでのセッション切り替え

ここ最近はターミナルエミュレータ(特にGhostty)で画面分割やタブ切り替えをするという話をよく見かけますが、tmuxの方が完全にCLIの世界にある分、こういう統合では小回りが効いて楽なんじゃない?と思ってます。どうなんですかね?

そういうlazyclaudeみたいのが、欲しい

今回作ったのはworktreeをスイッチするだけのミニマルなツールでしたが、各セッションでclaude codeが応答待ちなのか作業中なのかとかが俯瞰できるような、管理コンソールみたいなのがあったら最高だなと思います。そこからスイッチでもkillでもなんでもできて、全部それで良いやつ。

GitHubで編集を提案

Discussion