毎日数十ものGitブランチを管理するストレス
8人のチームで毎日1リリースというスピード感で働いていた頃、私はひたすらGitコマンドを打ち続けることに嫌気がさしていました。毎朝、機械のように同じ手順を繰り返します:git checkout main、git pull、フィーチャーブランチに戻ってgit merge main。1日に3〜4つのタスクを抱え、この一連の操作を10回も繰り返すのは日常茶飯事でした。
一番面倒なのは作業が終わった後です。コードをプッシュし、PRを作成し、マージを待ち、それからローカルとリモートの両方でブランチをせっせと削除しなければなりません。一歩でも手順を忘れると、PC内は数ヶ月前の「ゴミブランチ」で溢れかえります。大規模なプロジェクト環境では、コマンド入力時の一瞬の油断が古いコードの誤マージを招き、チーム全体のコミット履歴を混乱させる原因にもなりかねません。
なぜ素のGitはこれほど時間を浪費させるのか?
実際、Git自体が悪いわけではありません。Gitはcheckout、merge、rebaseといった断片的な「レンガ」を提供する低レイヤー(low-level)なツールです。しかし、それらのレンガを繋ぎ合わせて完成させるための「ワークフローの枠組み」が欠けているのです。
多くの開発者が、以下のような繰り返しの操作に時間を浪費しています:
- 新機能の開発前にmainから最新コードを更新する。
- 最後に「巨大な」コンフリクトが発生するのを防ぐため、フィーチャーブランチを常に同期する。
- コードのシップ(リリース)成功後に残骸をクリーンアップする。
手動での操作はミスが起きやすいものです。以前、ジュニアの開発者がブランチを作成する前にgit pullを忘れたことがありました。結果として、彼は先週の古いコードベース上で開発を進めてしまい、mainにマージする際、チーム全員で午後いっぱいかけて解決しなければならないほどの大量のコンフリクトが発生しました。
よくある「中途半端な」解決策
Git-townを知る前に、私のチームでもあらゆる方法を試しましたが、どれも欠点がありました:
- 伝統的なGit Flow: develop、release、hotfixなどブランチの種類が多すぎて煩雑です。継続的なデプロイが必要なWebプロジェクトにおいて、Git Flowはジョギングをするのに重い鉄の鎧を着るようなものです。
- 自作のシェルスクリプト: 自動でpullやブランチ削除を行う
.shファイルを書いていたこともあります。しかし、コンフリクトが発生したり、チームがメインブランチの名前をmasterからmainに変更したりすると、すぐに使い物にならなくなります。 - エイリアスの使用: 入力は速くなりますが、ワークフローのロジック自体を解決するものではありません。
これらはいずれも、ワークフローの現在の状態を理解し、発生する状況を自動的に処理するインテリジェンスに欠けています。
Git-town:Gitのためのスマートな抽象化レイヤー
実務で6ヶ月間使用した結果、Git-townはGitの作業体験を別次元に引き上げるツールだと確信しています。これはGitを置き換えるものではなく、Gitの上で動作し、複雑なコマンドシーケンスをあなたの代わりに実行してくれるものです。
30秒で完了するインストールと設定
macOSを使用している場合は、コマンド一つで完了します:
brew install git-town
次に、プロジェクトに移動して設定を実行します:
git town config
Git-townは、メインブランチ(main)と補助ブランチ(staging、productionなど)がどれかを尋ねてきます。プロジェクトごとに一度設定するだけです。
生産性を「ハック」する4つのGit-townコマンド
数十のコマンドを覚える代わりに、日常業務の90%をカバーする以下の4つのコアコマンドだけを使っています:
1. 新規ブランチ作成:git town hack
checkout main、pull、checkout -bの3つのコマンドを打つ代わりに、これだけで済みます:
git town hack feature-xyz
このコマンドは自動的にmainに戻り、最新コードを取得し、新しいブランチを作成して、トラッキングの設定まで一気に行います。
2. コードの同期:git town sync
これは私の一番のお気に入りです。作業中のフィーチャーブランチにmainの最新コードを取り込みたいとき:
git town sync
自動的にmainのコードをプルし、現在のブランチにマージして、リモートにプッシュします。コンフリクトが発生した場合は停止して修正を待ち、その後自動プロセスを再開します。
3. きれいにコードをシップする:git town ship
PRが承認されたら、手動でブランチを削除しないでください。これを実行しましょう:
git town ship
Git-townはマージ状態を確認し、必要に応じてコミットをスカッシュ(集約)し、mainにプッシュして、ローカルとサーバーの両方からブランチを完全に削除します。すべてが一瞬で片付きます。
4. 不要なブランチの破棄:git town kill
開発中の機能がキャンセルになった場合、このコマンドはシステム上のそのブランチの痕跡をすべてクリーンアップし、ゴミを残しません。
導入6ヶ月後の実際の効果
Git-townを使い始めてから、チーム内のコンフリクトの数は劇的に減少しました。git town syncが非常に便利なため、皆が以前より頻繁に最新コードをプルするようになったからです。この習慣により、スプリントの最後に問題が山積みになるのを防ぎ、早期に衝突を発見できるようになりました。
特に、Git-townはStacked Changes(積み上げられた変更)の処理が秀逸です。ブランチ A から作成されたブランチ B がある場合、ブランチ B を同期すると、Git-townは自動的に Main -> A -> B の順に変更を取り込みます。これは手動で行うとベテラン開発者でも間違えやすい高度なテクニックです。
個人的な経験からの注意点:
- まずは個人で使い始めてみてください。同僚があなたの操作の速さと正確さに気づけば、向こうからやり方を聞いてくるはずです。
- 同期する前に、編集途中のファイルがないか必ず
git statusで確認してください。 - コンフリクトが起きても慌てないでください。修正して
git town continueを実行するだけで、プロセスがスムーズに再開されます。
Git-townを使うことは、単にコマンド入力を速くするだけではありません。些細な操作から心を解放し、コードを書くことに完全に集中させてくれます。ブランチ管理に疲れを感じているなら、ぜひ今日インストールしてみてください。もう以前のやり方には戻りたくなくなるはずです。

