home wiki.fukuchiharuki.me
Menu

ブランチ作戦

主だった作戦は次の3つ。

  1. すべての集約先 trunk
  2. リリースに向けたリリースブランチ
  3. 開発初動に向けたタスクブランチ

1. すべての集約先 trunk

すべてのコードは最終的に trunk に集約させます。すべてのブランチは trunk からコピーし trunk に還ります。基本的にはブランチからブランチをコピーすることはしません。このこと、つまりすべての変更を必ず trunk にマージすることをルール化することで、バグフィックスやテーマ開発の適用漏れを防ぎます。

  • すべてのブランチのコピー元
  • すべてのブランチのマージ先
  • trunk は永続する
                 +--[branche]--+
                 |             |
--[trunk]--+-----+-------+-----+-->
           |             |
           +--[branche]--+

2. リリースに向けたリリースブランチ

リリースに向けたコードは リリースブランチ で安定化させます。およそ ST または UAT のフェーズ開始時点でそのリリースに対応するリリースブランチを trunk からコピーします。このリリースブランチからビルドするパッケージで ST や UAT を経て、このリリースブランチが安定したと言います。リリースはこのままこのリリースブランチからビルドします。リリース後、軽微なバグフィックスを入れたい場合はリリースブランチに変更を入れてこのリリースブランチからビルドして再リリースします。

ST や UAT で生じた変更とリリース後のバグフィックスはすべて trunk にマージしなければなりません。従って、次のテーマが待っているのでなければリリースブランチをコピ-するタイミングは遅いほどよいです。コピー後の変更を trunk にマージする手間が省けます。

  • (ST, UAT, )リリースのためのブランチ
  • リリース後すべての変更を trunk にマージ(少ない想定)
  • 次のリリース後破棄
!: bug fix
x: end point
                         release  release                 release
                            ^        ^                       ^
                            |        |                       |
           +--[release]--!--++---!---++-------------------->x|
           |                 |        |        +--[release]--++-->
           |                 |        |        |              |
--[trunk]--+-----------------+--------+--------+--------------+-->

3. 開発初動に向けたタスクブランチ

UT までの各テーマ開発は タスクブランチ で安定化させます。開発開始時点でそのテーマに対応するタスクブランチを turnk からコピーします。このタスクブランチからビルドするパッケージで UT を経て、このタスクブランチが安定したと言います。IT はこのタスクブランチの変更分を trunk にマージした後 trunk からビルドするパッケージで実施します。これは、複数テーマを並行して開発する際に、各テーマごとのコードラインではなく、合わさったコードライン(つまりマージ先の turnk)が安定していると言うためです。IT 以降リリースブランチがコピーされるまでの変更は trunk に入れます。

  • 各テーマ開発のためのブランチ
  • 開発・UT後すべての変更を trunk にマージ
  • trunk にマージ後破棄
                                  +--[release]-->
                                  |
--[trunk]--+--+----------++-------+------------->
           |  |          ||      ^
           |  +--[task]--+|  end of IT
           |              |
           +--[task]------+
                         ^
                     end of UT

この作戦における各テストフェーズの意義

この作戦を採り各テストフェーズ(UT, IT, ST+UAT)に次の意義をもたせます。

UT
各開発テーマで満たすべき機能の実装が完了したことを検証する
IT
(次のリリースに向けて)各開発テーマで満たすべき機能が他の開発テーマの機能やバグフィックスと同時に正しく*1動作することを検証する
ST+UAT
次のリリースに至るコードライン(からビルドするパッケージ)が満たすべき機能を備えていることを検証する
                                 +===(ST+UAT)===>
                                 |            
--[trunk]--+----------+===(IT)===+-------------->
           |          |
           +===(UT)===+

*1 「同時に正しく」とは、こちらで作成したデータがあちらの場面でというようなシナリオテストにおいて正しく、のこと