By

僕たちの開発フロー

ビジネスバンクグループ CTO の @shoutakenaka です。

ALL-IN の開発プロジェクトを開始した時に GitHub Flow を採用し、エンジニア1人体制で開発を進めていた時から GitHub Flow でずっとやっていましたが、 その後メンバーが増えて規模や開発ステージが変わったので、 それに応じて開発フローも少しずつ調整してきました。

今回は現時点で ALL-IN 開発チームがどのような開発フローを採用しているのかご紹介します。

大まかな流れ

もともと GitHub Flow を採用していましたが、規模に応じて調整してきた結果、 今こんな感じのフローになっています。

Development Flow

通常の開発フロー

  1. まずはプロダクトマネージャが JIRA でチケット登録。
  2. 担当エンジニアは master ブランチから、feature ブランチを作成して開発、テスト。
  3. 開発完了後、Crucible でレビューして、OK になったら master にマージ。
  4. 定期的に master ブランチから deploy/staging ブランチにマージ。 deploy/staging ブランチのコードをステージングサーバーにデプロイ。
  5. ステージングサーバーで QA テスト実施。
  6. QA テストが OK だったら、deploy/staging ブランチを deploy/prerelease ブランチにマージ。 deploy/prerelease ブランチのコードをプレリリースサーバーにデプロイ。
  7. プレリリースサーバーで DB マイグレーションのテストと最終動作確認を実施。
  8. 最終動作確認が OK だったら deploy/prerelease ブランチを deploy/production ブランチにマージ。 deploy/production ブランチのコードをプロダクションサーバーにデプロイ(リリース!)。

こんな感じで、master から feature ブランチを作って開発。 QA テストを経由して、本番にデプロイ、という流れで作業しています。

今のところ僕たちはサーバー環境として

  • ステージングサーバー: QA テストに使っている。
  • プレリリースサーバー: DB マイグレーションのテスト用。デプロイ前にプロダクションサーバーの DB をこちらの DB に複製して、DB マイグレーション (Rails のマイグレーションスクリプトとか 古いデータの調整など) がうまくいくかどうか確認するのに使っている。 また、本番で障害が発生して緊急対応した時の動作確認もこのサーバーで行う。
  • プロダクションサーバー: 本番環境。

を持っていて、それぞれに対応する deploy ブランチを用意し、 deploy ブランチにマージしたら CI から自動デプロイされるようになっています。

バグ対応

  1. QA テストで問題が見つかったら、QA 担当者が JIRA でチケット登録。
  2. 担当エンジニアは deploy/staging ブランチから、bugfix ブランチを作成してバグ対応、テスト。
  3. バグ対応完了後、Crucible でレビューして、OK になったら deploy/staging ブランチにマージ。 ステージングサーバーにデプロイ。
  4. QA 担当者がステージングサーバーでバグ対応の結果を確認。
  5. OK だったら deploy/staging ブランチを master ブランチにマージして、 バグ修正分を master ブランチにも反映。

QA テストでバグが見つかったら、QA 担当者にバグチケットを作ってもらって、 bugfix ブランチを作って対応しています。

QA テスト中も新機能開発分は master にどんどんマージされているので、 bugfix ブランチは deploy/staging をベースに作成します。 ただ、そのままだと master にバグが残ったままになってしまうので、 対応完了後 deploy/staging を master にマージして、バグ対応分を master にも 反映させています。

緊急障害対応

  1. 本番環境で問題が見つかったら、カスタマーサポート担当者が JIRA チケット登録。
  2. 担当エンジニアは deploy/prerelease ブランチから、hotfix ブランチを作成して障害対応、テスト。
  3. 障害対応完了後、Crucible でレビューして、OK になったら deploy/prerelease ブランチにマージ。 プレリリースサーバーにデプロイ。
  4. QA 担当者がプレリリースサーバーで障害対応の結果を確認。
  5. OK だったら deploy/prerelease ブランチを deploy/production ブランチにマージして、 プロダクションサーバーにデプロイ。
  6. さらに、deploy/prerelease ブランチを master ブランチと deploy/staging ブランチにマージして、 障害対応分を各ブランチに反映。

本番環境で障害が発生したら、bugfix ブランチを作って対応しています。

対応完了後、プレリリースサーバーで確認後、プロダクションサーバーにデプロイするという流れです。 障害対応がひと段落したら、master と deploy/staging にも修正を反映させます。


今のところ、こんなフローでうまく回っていますが、 チームの規模や開発のステージに応じて微調整は継続していかないといけないなぁ、と思っています。

エンジニア募集中!

ビジネスバンクグループではエンジニアを募集中しています。

弊社が採用しているテクノロジや開発環境に興味を持った方は、 ここから是非エントリー を!