コンフリクトは「悪」ではない。Gitを「同期ツール」から「並列開発の加速器」に変える技術
多くのチームが「コンフリクト=避けるべき障害」と捉えている。だが、それは間違いだ。コンフリクトは、「設計上の境界線が曖昧である」というシステムからの警告に過ぎない。
真のテックリードは、コンフリクトを回避するのではなく、「発生したとしても一瞬で解消し、開発フローを止めない」仕組みを構築する。今日は、Gitを単なる保存場所としてではなく、チームの生産性を極限まで高めるエンジンに変えるための「実戦的規律」を伝授する。
—
1. 衝突を「物理的に」防ぐ開発規律
コンフリクトの9割は、コミュニケーション不足と「大きすぎるプルリクエスト(PR)」から生まれる。
- Atomic Commits(原子的なコミット): 1コミット1機能。複数の修正を混ぜるな。リバートが必要な時、何が原因か特定できなくなる。
- Daily Rebase: 1日の始まりは必ず `git pull –rebase` から。歴史を汚さず、最新のメインラインに自分の作業を乗せる。「マージの海」を避けるための必須ルーチンだ。
- WIP(Work In Progress)の早期共有: 作業途中でもリモートにプッシュせよ。`draft: ` プレフィックスを付けたPRを投げ、チームに「今ここを触っている」と視覚的に共有する。これだけで重複作業は消滅する。
—
2. 開発スピードを加速させる「極上のツールセット」
CLIは最強だが、GUIの視覚化はコンフリクト解消の特効薬だ。
推奨ツール:Lazygit
CLIの速度とGUIの可視性を両立する唯一無二のツール。
- 神ポイント: ステージング、コミット、プッシュ、リベースの操作が数キーで完結する。
- 導入: `brew install lazygit`
- ショートカット:
- `x`: コミットメニューを開く
- `shift + r`: リベースを開始する
- `shift + s`: スタッシュを即座に行う
推奨プラグイン:GitLens (VS Code)
「なぜこの行がこうなったのか?」の犯人探しを一瞬で終わらせる。`Blame` 機能をコードの横にインライン表示させる設定は、チーム全員で標準化すべきだ。
—
3. チームの「設定」をコード化せよ:`.gitconfig` の共有
エンジニアごとに設定がバラバラなチームは、それだけで非効率だ。リポジトリのルートに `.gitconfig` を含めるのは難しいが、`includeIf` を使えば解決できる。
以下は、現場で導入すべき「生産性爆上げ設定」の雛形だ。
~/.gitconfig に記述
[includeIf “gitdir:~/projects/my-company/”]
path = ~/projects/my-company/.gitconfig-local
プロジェクトごとの .gitconfig-local
[core]
# コンフリクト解消ツールをVS Codeに指定
editor = code –wait
[merge]
# コンフリクト時に自動的にマージツールを起動
tool = vscode
[mergetool “vscode”]
cmd = code –wait $MERGED
[pull]
# マージコミットを作らず、常にリベースする
rebase = true
[alias]
# 複雑なログを美しく出力する神エイリアス
lg = log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit
—
4. コンフリクト発生時の「最短解消」プロトコル
コンフリクトが起きた際、焦って手動でファイルを開くのは素人のやることだ。プロは以下の手順を徹底する。
1. 冷静に `git status` を確認: 衝突しているファイルを特定。
2. 専用ツールで開く: `git mergetool` を叩く。VS Codeの3方向マージエディタが立ち上がるはずだ。
3. 「Incoming」と「Current」を精査: 自分のコードと相手のコード、どちらを残すべきか、あるいは統合すべきかを判断する。
4. テストを実行: マージ後、必ず単体テストを走らせる。マージによるロジックの破壊はコンパイルエラーよりも恐ろしい。
—
5. テックリードへの提言:設定の強制ではなく「文化」の共有
最後に、最も重要なことを伝える。ツールやコマンドよりも、「なぜ今、このブランチを切るのか」「なぜ今、リベースが必要なのか」をチームで言語化する文化こそが最強のCI/CDだ。
- 命名規則の徹底: `feature/`、`fix/`、`refactor/`、`docs/` のプレフィックスを必ず守る。
- 自動テストとの連動: GitHub Actionsなどで、PR作成時に自動でコンフリクト検知とテストを実行し、ステータスを可視化せよ。
「Gitのコンフリクトを恐れるな。Gitを使いこなす技術そのものを、チームの共有言語にせよ。」
このフローをチームに導入すれば、開発サイクルは劇的に短縮されるはずだ。明日から早速、チームの `.gitconfig` を統一するところから始めてほしい。君のコードが、世界をより速く動かすことを期待している。