Git-townでブランチ管理を爆速に:手動コマンド入力の悪夢にさよならを

Git tutorial - IT technology blog
Git tutorial - IT technology blog

毎日数十ものGitブランチを管理するストレス

8人のチームで毎日1リリースというスピード感で働いていた頃、私はひたすらGitコマンドを打ち続けることに嫌気がさしていました。毎朝、機械のように同じ手順を繰り返します:git checkout main、git pull、フィーチャーブランチに戻ってgit merge main。1日に3〜4つのタスクを抱え、この一連の操作を10回も繰り返すのは日常茶飯事でした。

一番面倒なのは作業が終わった後です。コードをプッシュし、PRを作成し、マージを待ち、それからローカルとリモートの両方でブランチをせっせと削除しなければなりません。一歩でも手順を忘れると、PC内は数ヶ月前の「ゴミブランチ」で溢れかえります。大規模なプロジェクト環境では、コマンド入力時の一瞬の油断が古いコードの誤マージを招き、チーム全体のコミット履歴を混乱させる原因にもなりかねません。

なぜ素のGitはこれほど時間を浪費させるのか?

実際、Git自体が悪いわけではありません。Gitはcheckoutmergerebaseといった断片的な「レンガ」を提供する低レイヤー(low-level)なツールです。しかし、それらのレンガを繋ぎ合わせて完成させるための「ワークフローの枠組み」が欠けているのです。

多くの開発者が、以下のような繰り返しの操作に時間を浪費しています:

  • 新機能の開発前にmainから最新コードを更新する。
  • 最後に「巨大な」コンフリクトが発生するのを防ぐため、フィーチャーブランチを常に同期する。
  • コードのシップ(リリース)成功後に残骸をクリーンアップする。

手動での操作はミスが起きやすいものです。以前、ジュニアの開発者がブランチを作成する前にgit pullを忘れたことがありました。結果として、彼は先週の古いコードベース上で開発を進めてしまい、mainにマージする際、チーム全員で午後いっぱいかけて解決しなければならないほどの大量のコンフリクトが発生しました。

よくある「中途半端な」解決策

Git-townを知る前に、私のチームでもあらゆる方法を試しましたが、どれも欠点がありました:

  1. 伝統的なGit Flow: develop、release、hotfixなどブランチの種類が多すぎて煩雑です。継続的なデプロイが必要なWebプロジェクトにおいて、Git Flowはジョギングをするのに重い鉄の鎧を着るようなものです。
  2. 自作のシェルスクリプト: 自動でpullやブランチ削除を行う.shファイルを書いていたこともあります。しかし、コンフリクトが発生したり、チームがメインブランチの名前をmasterからmainに変更したりすると、すぐに使い物にならなくなります。
  3. エイリアスの使用: 入力は速くなりますが、ワークフローのロジック自体を解決するものではありません。

これらはいずれも、ワークフローの現在の状態を理解し、発生する状況を自動的に処理するインテリジェンスに欠けています。

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 mainpullcheckout -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を使うことは、単にコマンド入力を速くするだけではありません。些細な操作から心を解放し、コードを書くことに完全に集中させてくれます。ブランチ管理に疲れを感じているなら、ぜひ今日インストールしてみてください。もう以前のやり方には戻りたくなくなるはずです。

Share: