並行開発におけるブランチ運用について

本稿はJCB Advent Calendar 2024の12月17日の記事です。

こんにちは。デジタルソリューション開発部の永沢です。
担当プロジェクトでは、メジャーバージョンのアップデートが必要な規模の開発を並行して実施しています。
今回は、そのブランチ運用の方式と、発生した運用ミスの改善について記します。

前提

現状は以下のような開発を並行実施しています。

  • 運用中バージョンの保守開発(バージョンX)
  • 次回メジャーバージョン開発(バージョンX+1)
  • 次々回メジャーバージョン開発(バージョンX+2)

現在のブランチ運用

ブランチ 概要
master 次回リリース予定の資材が格納されているブランチ
developV1 運用中バージョンの保守開発ブランチ
developV2 次回メジャーバージョンの開発ブランチ
developV3 次々回メジャーバージョン開発ブランチ
featureブランチ 作業用ブランチ
release-x.y リリースブランチ
(対象バージョン毎にブランチ作成)

開発の流れ

■タスク着手

  1. develop(開発の対象ブランチ)からfeatureブランチを切り作業する
    (例) マイナーバージョンアップの開発をする場合、developV1から作成
  2. featureブランチで開発する
  3. featureブランチからdevelop(作成元ブランチ)にマージする

■Sprintの終了

  1. developV1 → master にマージ
  2. developV1 → developV2 → developV3 の順にマージ

※私の担当システムではアジャイル開発をしています

運用で発生したミスと対策

<発生事象>

マージの向き先ミスにより、次回メジャーバージョンのブランチを誤って、masterブランチにマージしてしまいました。
これにより、次回メジャーバージョンは開発中の段階のため、masterに入れてしまうと検証されていないシステムがリリースされてしまうことになります。
また、利用しているソースコードのバージョン管理システムでは、revertしたコミット履歴は差分として反映されないです。
そのため、メジャーバージョンのリリースタイミングで適切な修正が反映されなくなります。

■許容されるパターン
・developV1 → master
・developV1 → developV2 → developV3 
  ※バージョン番号が高いものは、低いものを全て含んでいる状態にする

■今回の事例
・developV2 → master

<対策>

CIの中で、ターゲットブランチが正しいかチェックする仕組みを入れました。
今回発生したのは、masterブランチに向けたミスでしたが、featureブランチを開発ブランチにマージする際にも同様のことが起きうるため、その対策も同時に実施しています。
具体的な仕組みとしては、以下のようになっています。
■前提ルール

  • featureブランチの名称を開発コード+対象バージョンとする
    (例) MAD-0001V1, MAD-0002V2

■CIでのチェック

  • ソースブランチとターゲットブランチを比較して問題なければJOBを成功にする
    • masterブランチへのマージの場合
      • マージ元がdevelopV1であるかチェック
    • 開発ブランチへのマージの場合
      • featureブランチ名のバージョン(例: MAD-0001V1)とターゲットブランチ名のバージョン(例: developV1)が合っているかチェック
    • 次回移行のメジャーバージョンへのマージの場合
      • developV1 → developV2 or developV2 → developV3かチェック

※担当プロジェクトでは実施していないが、CIツールの設定で「パイプラインが完了している」場合のみマージリクエストのマージを許可にすることで物理的にマージを制御することも可能

終わりに

同じJCB内でもプロジェクトによってブランチ運用が異なるので、改善点を見つけて、試行錯誤していければと感じています。最後になりますが、ブランチ運用を検討している方の参考になれば幸いです。

JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページをご覧ください。


本文および図表中では、「™」、「®」を明記しておりません。 記載されているロゴ、製品名は各社及び商標権者の登録商標あるいは商標です。

©JCB Co., Ltd. 20︎21