GitFlowを採用している理由について
コードを継続的かつ安定した運用を叶えるために必要なブランチ運用。環境に合わせた方法を選択することが必要ですが、基本的にはGitFlowを採用しています。その理由について紹介します。
前提
ブランチ戦略はその目的をしっかりと明確にしておく必要があります。このブランチ戦略は自身の環境や開発方針に合わせた形で決定するべきです。
以下で紹介するブランチ運用は、個人的な理解の結果であり、安定運用を保証するものではありません。あくまで、参考にしていただければと思います。
チーム開発で生まれる課題
チーム運用で私が重視している点は、開発チケットの解消のしやすさです。どのようなイシューも取り掛かりやすいかつ、プルリクエストのコード課題以外でマージの妨げがない状態です。
チームでプロダクトの開発を進めていると、様々なイシューが上がってきます。イシューの優先度や工数によって事業者やエンジニアリングマネージャーによってイシューの着手順が管理されると思いますが、チーム規模が大きくなればなるにつれ、並行して開発されるイシューの数は必然的に増えていきます。
エンジニアが2名くらいの小規模なプロダクトでは、mainブランチとdevelopブランチの2本で運用されるケースが多いと思います。(機能開発用のブランチはdevelopブランチから切られるfeatureブランチを利用)
開発メンバーが少なければ、タスク進行の分担も進めやすく、コンフリクトも起きにくいので、課題になることは少なくても、開発メンバーが多ければ、パッチバージョンに向けた修正を行うメンバー、メジャーバージョンに向けた開発を行うメンバーと、リリースタイミングが異なる機能開発やバグが並行して行われることを考慮したブランチ運用を構築する必要があります。
スプリント開発を行っている場合、優先対応したいイシューをリリースバージョンごとに計画を立てて開発を進行しますが、工数が大きめの開発の場合は、着手からリリースまでに複数のバージョンを挟むということもあるでしょう。
並行開発に最適なGitFlow
GitFlowの詳細については「A successful Git branching model」をご覧ください。
GitFlowが優れていると感じる点は、releaseブランチを採用している点です。
developブランチ一本で運用していると、リリースタイミングでmainにマージすることになると思いますが、リリース前の検証段階で、他のイシューが対応されたとしてもリリースまでプルリクエストのマージを待つ必要が出てきます。
最悪の場合では、間違ってマージされると、検証完了時との差分が生まれた状態で、リリースを迎えてしまいます。
GitFlowでは、developブランチからreleaseブランチに分岐させることで、コードブロックを可能にしています。対応が完了したら気軽にdevelopにマージしつつ、検証はreleaseブランチでしっかり行うことができるます。
前の章であげた、計画的なスプリント運用で発生する、リリースバージョンをまたいだ開発を可能にするのには、GitFlowでも明確な言及はありませんでした。
デプロイ頻度を改善するために、最低でも週に2、3回デプロイを行うとすると、基本的な開発期間はそのデプロイ頻度とイコールになると思います。その前提で考えると、1週間や2週間かかるイシューはなるべくデプロイ頻度に合わせたチケットに分解するべきなのかもしれません。
GitFlowはあくまでミニマムに、完了した修正は最短でデプロイをお行うそんな背景から設計されたブランチ運用なのかもしれません。
ブランチが複数運用されたとしても、長時間差分が埋まらない状態は健全ではないという前提も含まれているような感じがします。
さいごに
ブランチ運用は一見シンプルで、簡単なような印象を受けがちですが、意外に様々なエンジニアと会話をしていると、それぞれ見解が違います。
これも理解や目的による違いがあるのだと思っています。そのため、チームで目的を明確にした上で、しっかりディスカッションする必要があるというわけです。正解があるわけではないブランチ運用について、一度ご自身の環境に合った運用フローを再検討してみてはいかがでしょうか。
参考
https://nvie.com/posts/a-successful-git-branching-model/
Editor’s diary
最近、すっかり忙しくさせていただいておりました。年内の内に長期で休みをとってゆっくり読書でもしたいところです。最近の積読を並べておきますね。
皆さんのおすすめも知りたい。
少し落ち着いてきましたので、知人の副業なども少しだけお手伝いをしておりました。何かWeb開発に関してお困りごとがございましたら、相談ございましたらご相談ください。