Git Conflictという悪夢
チーム開発を経験したことがあれば、git pullのたびに現れる「真っ赤な」エラーメッセージにはすっかり慣れてしまったことでしょう。「Automatic merge failed; fix conflicts and then commit the result.」——このたった一行が、開発者の午前中をまるごと奪っていくことも珍しくありません。
エンジニアになりたての頃、私はよく「職人技の手動対応」を選んでいました。コンフリクトしたファイルを開き、<<<<<<< HEADや=======といった記号を目で探して手作業で削除していたのです。ある夜遅くバグを修正しているとき、誤ってチームメンバーのロジックを消してしまい、そのままgit push --forceを実行してしまいました。翌朝には、チーム全体の決済機能が完全に壊れていました。その教訓:数百行にも及ぶコンフリクトファイルを、目視だけで対処するのは絶対にやめましょう。
Conflictに直面したときの3つのアプローチ
ソースコードの競合に直面したとき、主に3つの選択肢があります:
1. 手動編集(Manual Edit)
自分でファイルを開き、自分のコード(Ours)か相手のコード(Theirs)かを選んで残す方法です。ごく小さな変更、たとえば1〜2行程度のシンプルな修正にのみ適しています。
2. IDEの組み込みマージ機能を使う
VS CodeやIntelliJといったツールはマージをそれなりにサポートしていますが、UIに機能を詰め込みすぎています。数十ファイルのコンフリクトを同時に処理する場合、IDEは2〜3GBものRAMを消費することがあり、マシンの動作が重くなります。
3. 専用の外部Mergetoolを使う
最もプロフェッショナルなソリューションです。Meldのようなツールはファイルの比較と統合だけを目的として設計されています。Meldは完全無料でオープンソース、そして非常に軽量です。最大の強みは、3ペインのUI(3-way merge)によってすべての変更を一目で把握できる点です。
なぜMeldが開発者の「救世主」なのか?
Meldが通常のdiffビューアより優れているのは、3-wayマージの仕組みによるものです。同一ファイルの3つのバージョンを同時に表示します:
- LOCAL(左側):自分のマシン上のコード。
- BASE(中央):双方が変更する前の元のバージョン。最終的な結果を決定するうえで最も重要な列です。
- REMOTE(右側):サーバーまたは同僚のブランチからのコード。
コピー&ペーストをする代わりに、矢印ボタンをクリックするだけで左右のコードを中央の列へ「送り込む」ことができます。この操作により、手動編集と比べてコードを誤って削除するリスクを90%削減できます。
MeldをGit Mergetoolに設定する手順
まずは、お使いのOSに合ったMeldをダウンロードしてインストールしましょう。
ステップ1:インストール
- Ubuntu/Debian:
sudo apt install meld - macOS:
brew install meld - Windows: インストーラー(.msi形式)をmeldmerge.orgからダウンロードしてください。
ステップ2:GitとMeldを連携する
コンフリクトが発生した際にGitが自動的にMeldを起動するよう設定します。ターミナルを開き、以下のコマンドを実行してください:
# デフォルトのマージツールとしてmeldを設定する
git config --global merge.tool meld
# 実行ファイルのパスを指定する(Linux/macOS用)
git config --global mergetool.meld.path "meld"
# 終了コードの検証を有効にする
git config --global mergetool.meld.trustExitCode false
Windowsユーザーの場合は、.exeファイルへの正確なパスを指定する必要があります:
git config --global mergetool.meld.path "C:/Program Files/Meld/Meld.exe"
ステップ3:不要ファイル(.orig)の削除設定
デフォルトでは、マージのたびにGitがバックアップ用の.origファイルを作成します。プロジェクトのファイル一覧を散らかさないよう、この機能を無効化しておきましょう:
git config --global mergetool.keepBackup false
実際の使い方
コンフリクトが発生したときは、ファイルを探し回る必要はありません。以下のコマンドを実行するだけです:
git mergetool
Meldが自動的に起動します。左右を比較しながら矢印ボタンで中央の列にコードを取り込んでいくだけです。完了したらCtrl + Sで保存してウィンドウを閉じましょう。Gitは自動的にそのファイルをresolved(解決済み)としてマークし、そのままgit commitできる状態になります。
実戦経験からのアドバイス
どれだけ優れたツールを使っていても、盲目的にマージボタンを押してはいけません。行レベルでは競合していなくても、ロジックレベルで競合するケースがあります。たとえば、あなたがファイルAで関数名を変更したのに、同僚がファイルBでその古い関数名を呼び出している場合がそれにあたります。MeldはファイルBでエラーを報告しませんが、実行時にコードがクラッシュします。
マージ後は必ず30秒ほど時間を取ってロジックを見直しましょう。ツールは作業を速くしてくれますが、プロダクトの品質を守る最後の砦はあなた自身の頭脳です。
この方法が、複雑なマージに直面したときの自信につながれば幸いです。インストール中に問題が発生した場合は、コメント欄に質問を残してください!

