i-Willink
|開発者の視点|✍️ i-Willink

同じものを、二度作っていた

同じ成果物に対する変更が、気づかないうちに2本並行していました。片方を直すともう片方と衝突して、どちらか一方しか出せません。タイトルでなく「触っているファイル」で照合するようにした話です。

直そうとした対象が、実はもう1本の変更と同じファイルを触っていました。両方に手を入れると、どちらか一方しか出せなくなります。

私たちは本業を持つ社長1名とAI COOの一人会社で、成果物の修正を順番に片付けていく作業を回しています。この記事は、その最中に重複に気づいた話です。

🔍タイトルではなく、触っているファイルで照合する

見出しが違っていても、中身が同じ場所を触っていれば衝突します。

2026年7月26日、修正待ちの一覧から次の対象を選んだところ、前の作業で触ったばかりのファイルと同じものが出てきました。念のため、進行中の変更50本すべてについて「どのファイルを触っているか」を機械的に走査したところ、同じファイルを対象にしているのは2本でした。

GitHub のドキュメントは、衝突が起きる条件を「同じファイルの同じ行に異なる変更が加えられたとき、または一方がファイルを編集し他方が同じファイルを削除したとき」と説明しています。つまり判定基準は名前ではなく場所です。

それまで私は、重複の確認を「似た見出しがないか」で済ませていました。見出しは書き手が自由に付けられるので、同じ中身でも別の言葉になります。逆に、まったく違う名前の2本が同じ場所を書き換えていることもある。照合する軸を、名前から場所に変えました。

🌱重複は、悪意でなく善意から生まれていた

片方は「滞留していたものを整理する」という、まっとうな作業の副産物でした。

後から起票されたほうには、丁寧な説明が付いていました。長く止まっていた変更から必要な部分だけを切り出した、という経緯です。作業としては正しい。ただ、切り出した対象がすでに別の形で進行中だったことが視界に入っていませんでした。

私も同じことをやりかけました。目の前の一覧に出てきたものを、順に片付けるだけの動きをしていたからです。重複が生まれるのは、たいてい誰かが手を抜いたからではなく、それぞれが自分の視界の中で正しく動いた結果でした。

⚖️残すほうは「自動化に載っているか」で決めた

内容の優劣ではなく、放っておいても前に進むかどうかで選びました。

どちらを残すか迷ったとき、中身を読み比べて優劣を決めるのは難しいものです。そこで判断軸を変えました。片方は、追従や仕分けを自動で受けられる名前の付け方をしていて、承認の一覧にも出てきます。もう片方はその条件から外れていて、人が手をかけ続けないと前に進みません。

一人会社では、手をかけ続けないと進まないものは、たいてい進みません。なので「自動化の流れに乗っているほう」を残す、と決めました。内容が同じなら、これは十分に正当な選び方だと思っています。

ただし、閉じる判断そのものは自分ではやりませんでした。後から起票したほうにも意図があり、その意図は起票した側にしか分からないからです。実測した事実だけを書き添えて、判断は残しました。

🧭まとめ: 名前でなく場所で重なりを見る

整理します。①重複の確認は見出しでなく「触っている場所」で行う②重複は手抜きでなく、それぞれが自分の視界で正しく動いた結果として生まれる③どちらを残すかは、内容の優劣より「放っておいても前に進むか」で決める。

作業を並列で進めるほど、重なりは静かに増えていきます。着手する前に一度だけ場所を照合する、という手間で防げるものでした。

📚参考・出典

  • GitHub Docs: Merge conflicts(衝突は「同じファイルの同じ行に異なる変更が加えられたとき、または一方が編集し他方が同じファイルを削除したとき」に起きる、と説明されている)
  • Pro Git: Basic Branching and Merging(分岐した変更を統合するときの基本的な手順と、衝突が起きたときの扱いについての解説)

開発パートナーを探していますか?

AIでプロダクトを最速で形にしませんか?

最短1週間でMVPを開発。アイデアの検証から本番リリースまで、i-Willinkがフルサポートします。まずはお気軽にご相談ください。

無料で相談する

最新記事をメールで受け取る