日曜日, 8月 17, 2025
日曜日, 8月 17, 2025
- Advertisment -
ホームニューステックニュースGit Worktree を使いやすくする gw コマンドを作った

Git Worktree を使いやすくする gw コマンドを作った


作りました。

https://github.com/sotarok/gw

発音は特になくてジーダブリューでもいいんだけど、脳内ではぐゅ〜と読んでます🧠

モチベーション

  • Git Worktree って便利だよね
  • でもなんかコマンド覚えられない
  • 本質的にやりたいことは、やるよ、終わったよ、で worktree を始めたり終わらせたりしたい
  • あとそれに伴う結構面倒なことがちょこちょこある (npm install 叩いたりとか)

ので、それをサポートしてほしい、という気持ち。

類似

作り始めてから、ccmanager というよりイケてる統合管理ツールを作っている方がいるのを知りました。

https://github.com/kbwo/ccmanager

これでいいんじゃない、と思ったんですが、gw はもう少し、プリミティブな、git worktree だけをいい感じにやってくれるだけのやつって感じです。
あとまあ、こんな時代なので、車輪を再発明しまくっても良いかな〜と思ってとりあえず自分なりに使いやすいやつを作ることにしました。

機能

機能は至ってシンプルで、git worktree の追加、削除を以下のような issue number ベースでやってくれるだけです。

worktree を作る

issue #123 に対する worktree を作るイメージです。
そうすると、

sotarok
├── gw
├── gw-123
...

のように gw-{issueNumber} でよしなな worktree directory を作ってくれます。

base branch を指定する場合は、後ろにくっつければOK。

# 122/impl branch から派生した 123 をやる
gw start 123 122/impl

おわる

です。123 を付けなければ interactive mode で選択できるようになっています。

checkout する

レビューする時などに、手元のリポジトリを汚さずに他人の branch を手元に持ってきて色々確認したい時ありますよね。

そんな時は

という感じでブランチ名を直接指定すると、それ用の worktree を作ってくれる感じになっています、

余計な機能

こういうの色々付けてるとキリがないんだけど結局作りたくなるのでどんどん付けてしまっています。

セットアップ系のスクリプトを自動で叩く

npm install とか pnpm install とかを、gw start/checkout した時に自動でやってほしいなーと思っていたのでやってくれるようにしました。

npm, yarn, pnpm, cargo, go, pip, bundler に対応してます。

copy env

.env とか .env.local とかを worktree 内に自動でコピーしてほしいんです。
ので、コピーしてくれます。

を付けて start/checkout するか、指定がなかったら聞いてくれます。

この2つの挙動ができてれば、なんか gw start するだけでとりあえずすぐ作業に取り掛かれる、という感じになります。

auto cd

gw start/checkout した時に自動的にそのディレクトリに移動します。
shell の integration が必要です。configで挙動制御可能です。

.zshrc とかに↓みたいな感じにしておくと良いです。bash/zsh/fish に対応してる。(多分。動作は zsh でしか確認してない)

eval "$(gw shell-integration --show-script --shell=zsh)"

iTerm2 integration

並行作業しまくっていると iTerm2 のタブがたくさんできてしまって、どこで何をしているか忘れちゃうので、iTerm2 のタブ名を repositoryName {issueNumber} で update してくれるようになります。configで挙動制御可能です。
mac だけです。

worktree 終了時に head branch を自動削除する

worktree remove した時に、local branch が残っちゃうのが気になってたんです。自動削除するようになります。
configで挙動制御可能です。

gw コマンド自体の作り

  • go で作りました
  • でも自分で1行も書いてないです… hehe … (作りました、というか作らせました… か)
  • 仕事の隙間、何か思いついた時に機能追加していってます

実際のワークフロー(ユースケース)

  • 何かやりたい issue を見つける
  • iTerm2 の新しいタブを開く
  • リポジトリに移動する
  • gw start する
  • tmux で画面分割して claude などで作業する
  • 諸々仕事終わって merge まで言ったら、end する

ま〜みたいな感じです。

個人的に好きなところは、gw がとても打ちやすい、というところです。

よかったら使ってみてください。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -