Galapagos Tech Blog

株式会社ガラパゴスのメンバーによる技術ブログです。

Gitブランチモデルのおはなし

ご機嫌よう、ガラパゴスのおとめです。

突然ですが皆さまGitをお使いですね? どんなブランチモデルを採用されているのかしらん? 特に意識されていない? Git Flow? GitHub Flow? GitLab Flow? MyGreat Flow? どれにも一長一短あって、何かしら工夫されているかと思います。

そこで今日は、ガラパゴスのサーバーサイド開発の一例を紹介をしてみましょう(全社的にそうしているわけではありません)。

この記事はガラパゴスアドベントカレンダーの15日目の記事です

ブランチモデルって必要?

まず、どうしてブランチモデルが必要なのか例え話をしましょう。何も考えずにブランチを分けていったとします。そしてあるブランチの変更が別のブランチで必要になったとして……

f:id:glpgsinc:20171213164411p:plain

そうやってできたブランチ同士でcherry-pickとかしていたらどうなるでしょう? いかにも衝突しそうですね?

f:id:glpgsinc:20171213172121p:plain

あるいは、それぞれで別個に同じマイグレーションをしていたら? デプロイするときに発覚しそうですね?

f:id:glpgsinc:20171213172925p:plain

こうしてオフィスに呪いが撒き散らされました。

〜完〜

……。

GitLab Flowのおはなし

もちろん実際にオフィスに呪いが撒き散らされるようなことは避けたいです。というわけで、ここしばらく、GitLab Flowをもとにしたブランチモデルを使っていて、ガラパゴスのおとめは「やりやすい」と思っていました。GitLab Flowそのものは次のような紹介記事を読めば良いかしらん?

読んでいただいた前提でお話を進めますね。

GitLab Flowのつらいところ

中には、変更はmasterや本番ブランチにcherry-pickするような説明があったかと思います。でも、変更をいちいちcherry-pickするのは面倒じゃなくてですか? 複数のコミットに別れていたりして、一部だけ反映するのを忘れたりするような事故がいかにも起こりそうに思えます。

それに、ガラパゴスではアプリ開発をしていますが、アプリは開発時にサーバーサイドのどのブランチを参照すれば良いのでしょう。

ガラパゴスでは、以下のようなブランチ構成になっています。

  • feature:開発・ホットフィックス(実際のブランチ名は内容を表すものにします)。
  • master:幹。開発中の最新版。unstable。
  • integration:開発中のアプリ向け。masterよりはstableに近い。
  • staging:QA用(pre-productionと同義)。integrationよりはstableに近い。
  • production:本番。stable。

Galapagos Flow

基本的な運用はこうなりました。

まず、新しい機能ブランチは、masterから分岐して作ります。また、それぞれのトピックブランチに何かをマージする時には、親ブランチからしかマージしないことにします。

f:id:glpgsinc:20171213213844p:plain

そして、親ブランチにマージするときも、cherry-pickではなくマージします。このとき(特に理由がなければ)トピックブランチは削除します(図は単純化しています)。

f:id:glpgsinc:20171213175242p:plain

最終的に変更はmasterまでマージされましたね?

ガラパゴスのGitブランチモデルでは、基本的にmasterブランチはunstableです。ところでmasterブランチがunstableなら、どうやって品質を確認するのかしらん? ガラパゴスではGitLabを使っていますので、ちょっとした設定でGitLab CIも使うことができます。はい、ご想像の通り、CIが通らなければマージできないし、テストがなければマージしません。

そして、integrationではアプリの王子様からのフィードバックがあり、stagingでは検証の姫君からのフィードバックがあります。これらのフィードバックは、masterから分岐したブランチで修正します。

そこで、masterブランチがstableに近い瞬間が生まれると想像してください。チケットを消化した状態。そう、この瞬間です。これがGitLab FlowでいうPre releaseブランチにcherry-pickする瞬間です。でも、先にもお話したように、ここで行われるのは、merge masterです。

f:id:glpgsinc:20171213185909p:plain

一方で本番環境でHotFixを当てることもあります。こちらはproductionブランチから分岐します。

f:id:glpgsinc:20171213190938p:plain

さいごに

プロジェクトの大きさなどによっても適したブランチモデルは変わると思います。今回お話したモデルは、あんまり大規模な開発には向いていないかもしれません。でも、安全で適切なやり方ができるといいですね。

さて、次回はガラパゴスの女神様によるProtoPie第2回の予定です。ぜひご覧ください。

ところで

MacBook Pro Late 2016のTouchBarモデルを使っていて、TouchBarが消えてしまうことがありませんか? 復活方法を調べても、掲載されている方法で復活したことがありません。特に困るのはvimで何かしらのモードに入っている時で、escキーが押せないのでモードから抜けられません……。

そんな時、実はescにはショートカットがあります。^[ でescキーと同じ効果が得られますのでお試しあれ。


ガラパゴスでは、安全な運用を考えたり、Macを再起動せずにTouchBarを復活できるエンジニアを募集しています。皆様のご応募お待ちしています。

では、ご機嫌よう。

この記事は業務の一環として業務時間中に書きました