1
/
5

Git Feature Flowはじめました

Tutorial Advent Calendar 2020 4日目になります。
この記事は田尻が書いています。1回保存してなくて、書き直しております。死に体。
ここ数ヶ月、gitの運用方法を2回ほど変更しました。
今週からGit Feature Flowで運用をはじめています。
弊社がどんなgitの運用をしてきたのか、遍歴をお伝えしたいと思います。

1, Github Flow?

私が入社した時はGithub Flowに近い形でした。
masterブランチからfeatureブランチを作成し、レビューが完了したら、masterブランチにマージしていました。
当時はビルドまで自動で行い、デプロイは手動で行っていました。ビルドの時に一緒に自動テストは流れるようになっています。
masterブランチにマージがあると、コンテナイメージが作成され、そのイメージをステージングにデプロイして手動でテストをしていました。
いつステージングにデプロイするかも決まっていないので、デプロイできる人の手が空いたタイミングで行っていました。
なので、複数の機能がmasterブランチに入ってから検証環境でテストすることが多かったです。
ステージングでの手動テストでバグが発覚する場合も多く、そうなるとrevertするか、修正を待たないとリリースできません。
一緒に入っている機能はテストOKなのにバグがある機能も一緒に入っていることでリリースできないことがよくありました。
手動のテストでバグが見つかることもよくあるので、毎回revertになるとかなり面倒なので、修正を待つことが多かったです。



メリット
・シンプルでわかりやすい
デメリット
・同時にmasterブランチにマージされている機能にバグあった時にリリースできなくなる
参考
・[GitHub Flow 図解](https://qiita.com/tbpgr/items/4ff76ef35c4ff0ec8314)

2, Git Flow

masterブランチに手動テスト前の機能が入らないようにしたい、自動のデプロイを実現したいという思いから、Git Flowを採用しました。
1日に1回developブランチに差分があるときは、releaseブランチを作成して、ステージング環境での手動テストが完了したら、masterブランチにreleaseブランチをマージする流れでした。
ステージング環境はreleaseブランチにpushがあったら、デプロイされるようになっています。
プロダクション環境はmasterブランチにpushがあったら、デプロイされるようになっています。
自動でデプロイまでされるようにしたので、
メリット
・リリースタイミングをコントロールできる
・hotfixブランチがあるので、本当に急ぎの時はreleaseブランチとは関係なくプロダクションに変更を入れることができる
デメリット
・ステージング環境での手動テストでバグがあった場合に、修正を待つ間、一緒に入っている機能はリリースできない
・フローが複雑
・リリースブランチを切った直後にdevelopブランチにマージされた機能は、一日経たないとステージング環境に入らない

3, Git Feature Flow

より早くデリバリーしたい、他の機能に影響されずにリリースしたいという思いから、Git Feature Flowに変更しました。
masterブランチからfeatureブランチを作成し、レビューが通ったら、masterブランチにマージする流れになっています。
しかし、レビュー通過後、masterブランチにマージする前にステージング環境で手動テストを行ってから、masterにマージする流れにしています。
PullRequestの向き先はmasterに向けて、テストが完了するまでマージボタンを押さないという運用にしました。




メリット
・他の機能に影響を受けずに、早くリリースできる
・stagingブランチにマージすれば、いつでもテストができる

デメリット
・機能単位でテストやリリースが行われるので、それぞれの機能がどの状態なのか把握するのが大変
・stagingブランチに入っている機能同士に依存関係やconflictがあった場合、masterブランチに別々に違うタイミング入れるので、テスト時と同じ挙動をしなくなる可能性がある
・パイプラインの完了までに若干時間がかかることもあり、後に動いたパイプラインが先に動いていたパイプラインよりも先に完了する可能性がある
参考
・[GitFlowは使わない!シンプルな「GitFeatureFlow」を紹介します](https://developers.gnavi.co.jp/entry/GitFeatureFlow/koyama)


Git Feature Flowでの工夫

Git Feature Flowで運用するにあたり、いくつか決まり事を決めたり、工夫をしています。


・レビューが通過したら(弊社は2名のapproveでOKとしている)stagingブランチへのマージはPullRequestを出している人が行う
・レビューを通過して、PullRequest上はマージ可能な状態になるが、手動テストが終わるまでマージしないようにする
・間違ってmasterブランチにマージされることを防ぐため、masterブランチへのマージは権限を絞る
・リリースノートは1日1回まとめて記載する
・リリースタグはmasterブランチに変更があるたびに付与する

まとめ

gitの運用はチームによって何を重要視するかで変わってくると思います。
私たちのチームはより早いデリバリーを目指して、Git Feature Flowを今は採用しています。
まだまだ課題はありますが、今のところ、Git Feature Flowがしっくりきています。

オートロ株式会社では一緒に働く仲間を募集しています
9 いいね!
9 いいね!
今週のランキング
オートロ株式会社からお誘い
この話題に共感したら、メンバーと話してみませんか?