水底

ScalaとかC#とかk8sとか

git repository と worktree が散乱して辛かったのでいい加減なんとかするツール baretree を作ってしまった

何ができたのか

git repository と worktree をいい感じに整理した形で作成・削除・移動などができるツールです。x-motemen/ghqsatococoa/wtp を足したようなイメージです。

github.com

既存ツールで困っていたこと

最近は雨後の竹の子のように worktree 管理ツールが表れていますが、「結局 worktree どこおきゃええねん」、「working directory と worktree の非対称性の気持ち悪さ」と「worktree と branch がごちゃごちゃでわけわかんなくなる」をまとめて解消できるものを見つけられませんでした。

baretree のコンセプト

ツール名からもわかるように、git repository を bare repository で管理することを根幹においています。これでまずは「working directory と worktree の非対称性の気持ち悪さ」をクリア。また、各リポジトリディレクトリ構成を以下のように統一することで、リポジトリごとの worktree 置き場を明確にしました。

my-app/                          # One repository
├── .git/                        # Bare git repository
├── .shared/                     # Shared across all worktrees (.env, etc.)
├── main/                        # main branch
├── feature/
│   ├── api/                     # feature/api branch
│   └── auth/                    # feature/auth branch
└── fix/
    └── ui/                      # fix/ui branch

worktree や branch 作成をコマンド経由でブランチ名・ディレクトリ名・worktree 名を一致させることで「worktree と branch がごちゃごちゃでわけわかんなくなる」問題が解決できました。 そしてこれにより worktree を置くディレクトリが一意に決まり「結局 worktree どこおきゃええねん」問題も解決できましたとさ。

さて、git の汎用的な機能のみを使うとはいえ、既存のリポジトリ、worktree が山ほどある状態から手作業で移行することなんて考えたくもありません。なので移行や修復を自動で行うコマンドも用意しました。1 コマンドで working directory や index、submodule の状態などをいい感じに保って乗り換えられるようになりました。わーい。

ついでにリポジトリ置き場が気になり、ghq のような複数リポジトリを集中管理することもできるようにしました。これによりリポジトリ間の移動が楽にできたのが個人的に嬉しいポイント。bt go <repo name> で行き来できるようになりました。

~/baretree/                              # All repositories organized
├── github.com/
│   └── user/
│       ├── my-app/                      # One repository
│       │   ├── .git/                    # Bare repository
│       │   ├── .shared/                 # Shared across all worktrees (.env, etc.)
│       │   ├── main/                    # worktree ← main branch
│       │   └── feature/
│       │       ├── auth/                # worktree ← feature/auth branch
│       │       └── api/                 # worktree ← feature/api branch
│       └── another-project/
└── gitlab.com/
    └── ...

余談

今回は TDD 的なノリでほぼ Claude Code に書かせました。こういう独立性の高いツールは特に相性がいいですね。

以前から Claude Pro Plan がコスパいいなーと個人的に使っていたのですが、やっぱりある程度一気に使おうとすると足りないですね。baretree を作る過程で 5h ごとに枠を使い切って待つを繰り返したせいで思うように進まず、次に weekly も使い切って Extra Usage を少しだけ買って一瞬でなくなってたけーーとなっていました。比べると Claude Pro はコスパ良いなと再認したり。結局もろもろ考えて 1 ヶ月だけ Claude Max Plan にしました💸