Re:mercurialでチケット駆動開発

default・confirm・topic*いっぱいというbranchの使い方の懸念点

リリース順≠開発完了順(チケットAは開発完了しているが優先してチケットBだけを今すぐリリースしなければいけない という状況がありえる

ということで気になったのは、あるtopic branchでの変更について、
confirm branchにmergeして動作を確認しても、
そのtopic branchをdefault branchにmergeして正しく動作する事を保証しない、
ということ。


例えば開発完了したtopic branchがb1〜b5の5個あったとして、
b2,b4のみリリース予定は他より後になっているとする。
この時、confirm branchにb1,b2…という順番でmergeされているとして、
b5の正常動作がb2やb4での変更に依存しているとすると、
default branchにb1,b3,b5とmergeしたときに正常に動作しない。

このやり方が有効な状況

Python忘年会の時にid:feizにこの点について聞いてみたところ、
有効に機能している理由が何となく分かった。
話によるとリリースが非常に頻繁なプロジェクトなのだそうだ。
リリースが頻繁という事はつまり、
default・confirm間の差異はあまり広がらないのだろう。
後は完全な想像だが、各topic branchでの作業の独立性が高いのだと思う。


まとめるとこんな感じだろうか

  • default・confirm間の差異が開きすぎないように運用出来る
    • 頻繁にリリースしている
  • 各topic branchでの作業の独立性が高い
    • 共通的なところは固まっていて、アプリケーションコードの新規実装や改修をモリモリやる場合とか?

懸念点の解消法法

defaultの前にRCブランチが必要かも

多分これで解消すると思う。

  1. defaultからtopic branchを切る
  2. 以下のサイクルを繰り返す
    • topic branchで開発
    • 確認用捨てbranchであるconfirmにmergeして動作確認
    • defaultからtopic branchにmerge(rebase)
  3. 次のリリース対象topic branch群をRC branchにmerge
  4. RC branchで動作確認
  5. ↑で出てきたバグはRC branch上で潰す
    • 場合によってはRC branchからバグ対応topic branchを切ってもいいかも?
  6. RC branchがきれいになったら、RC branchからdefaultにmerge

3から先をやるのと同時に別ticketの1,2をやるのも問題ない。

まあ、どっちにしてもrebaseで取り込む共有成果が
リリース済み成果のみである以上、
リリースが高頻度のときに有効という点は変わらないと思うが、
topic branch間の依存によって困る事は減るのではないかと。