iOSアプリはリリースサイクルが長くなりがちなので、GitHub Flowではなく、git-flowを参考にしたフローを使っている。
仕事もプライベートもこのフローで今のところ問題はない感じ (複数人開発含む)。
各ブランチの役割
基本的に普通の git-flow
と変わらないけれど、AppStore がからむとこを中心に説明します。
- master
- 現在AppStoreで配布中の最新バージョンと常にイコール
- release
- リリース準備ができたら
develop
から分岐する。AppStoreでリリース申請通過後にリリース完了した時点でmaster
とdevelop
にマージする。リリース前にrelease
上で変更があった場合は適宜develop
feature
にマージする。 - リリース後にタグを打つのを忘れずに。
git tag -a v1.0.1 -m 'my version 1.0.1'
- リリース準備ができたら
- develop
- 開発ブランチ。次期バージョンの要件を満たしたら
release
ブランチを作成する。
- 開発ブランチ。次期バージョンの要件を満たしたら
- feature
develop
ブランチから作成して、作業完了したらdevelop
にマージする。
- hotfix
- AppStoreで配布中のバージョンで障害が発生した場合に
master
から作成する。AppStoreでリリース申請通過後にリリース完了した時点でmaster
とdevelop
に(必要であればrelease
feature
にも)マージする。
- AppStoreで配布中のバージョンで障害が発生した場合に
git-flow コマンドについて
git-flow
コマンドは上記のようなフローでの開発を補助するgitのサブコマンドです。
各ブランチの作成やマージが便利になるコマンドが用意されているけど、プルリクエストやGithub上でのマージは考慮されていない。
上記フローを実践するために必ずしもgit-flow
コマンドを使う必要はない。僕は普通のgitコマンドでブランチ切ったり、Github上のプルリクエストからマージしたりしてる。
何がうれしいか
- iTunes Connectで申請中に、次のバージョンの機能を
develop
にさくさくマージできる- GitHub Flow だと
master
とトピックブランチだけなのでシンプルで良いんだけど、iOSアプリはリリース申請期間が長いし、その間も開発はしたいので無理が出てくる - 日次で
develop
とrelease
ブランチをそれぞれ DeployGate 等に配布する仕組みがあれば検証する人も便利
- GitHub Flow だと
- リリース版のアプリで不具合があった時に、常に
master
がリリースされたものと同一だと安心感がある。hotfix
で障害対応が可能 release
ブランチをプルリクエストしておくとWhat's New in this Version
をまとめるときに便利