僕たちの開発フロー
ビジネスバンクグループ CTO の @shoutakenaka です。
ALL-IN の開発プロジェクトを開始した時に GitHub Flow を採用し、エンジニア1人体制で開発を進めていた時から GitHub Flow でずっとやっていましたが、 その後メンバーが増えて規模や開発ステージが変わったので、 それに応じて開発フローも少しずつ調整してきました。
今回は現時点で ALL-IN 開発チームがどのような開発フローを採用しているのかご紹介します。
大まかな流れ
もともと GitHub Flow を採用していましたが、規模に応じて調整してきた結果、 今こんな感じのフローになっています。
通常の開発フロー
- まずはプロダクトマネージャが JIRA でチケット登録。
- 担当エンジニアは master ブランチから、feature ブランチを作成して開発、テスト。
- 開発完了後、Crucible でレビューして、OK になったら master にマージ。
- 定期的に master ブランチから deploy/staging ブランチにマージ。 deploy/staging ブランチのコードをステージングサーバーにデプロイ。
- ステージングサーバーで QA テスト実施。
- QA テストが OK だったら、deploy/staging ブランチを deploy/prerelease ブランチにマージ。 deploy/prerelease ブランチのコードをプレリリースサーバーにデプロイ。
- プレリリースサーバーで DB マイグレーションのテストと最終動作確認を実施。
- 最終動作確認が OK だったら deploy/prerelease ブランチを deploy/production ブランチにマージ。 deploy/production ブランチのコードをプロダクションサーバーにデプロイ(リリース!)。
こんな感じで、master から feature ブランチを作って開発。 QA テストを経由して、本番にデプロイ、という流れで作業しています。
今のところ僕たちはサーバー環境として
- ステージングサーバー: QA テストに使っている。
- プレリリースサーバー: DB マイグレーションのテスト用。デプロイ前にプロダクションサーバーの DB をこちらの DB に複製して、DB マイグレーション (Rails のマイグレーションスクリプトとか 古いデータの調整など) がうまくいくかどうか確認するのに使っている。 また、本番で障害が発生して緊急対応した時の動作確認もこのサーバーで行う。
- プロダクションサーバー: 本番環境。
を持っていて、それぞれに対応する deploy ブランチを用意し、 deploy ブランチにマージしたら CI から自動デプロイされるようになっています。
バグ対応
- QA テストで問題が見つかったら、QA 担当者が JIRA でチケット登録。
- 担当エンジニアは deploy/staging ブランチから、bugfix ブランチを作成してバグ対応、テスト。
- バグ対応完了後、Crucible でレビューして、OK になったら deploy/staging ブランチにマージ。 ステージングサーバーにデプロイ。
- QA 担当者がステージングサーバーでバグ対応の結果を確認。
- OK だったら deploy/staging ブランチを master ブランチにマージして、 バグ修正分を master ブランチにも反映。
QA テストでバグが見つかったら、QA 担当者にバグチケットを作ってもらって、 bugfix ブランチを作って対応しています。
QA テスト中も新機能開発分は master にどんどんマージされているので、 bugfix ブランチは deploy/staging をベースに作成します。 ただ、そのままだと master にバグが残ったままになってしまうので、 対応完了後 deploy/staging を master にマージして、バグ対応分を master にも 反映させています。
緊急障害対応
- 本番環境で問題が見つかったら、カスタマーサポート担当者が JIRA チケット登録。
- 担当エンジニアは deploy/prerelease ブランチから、hotfix ブランチを作成して障害対応、テスト。
- 障害対応完了後、Crucible でレビューして、OK になったら deploy/prerelease ブランチにマージ。 プレリリースサーバーにデプロイ。
- QA 担当者がプレリリースサーバーで障害対応の結果を確認。
- OK だったら deploy/prerelease ブランチを deploy/production ブランチにマージして、 プロダクションサーバーにデプロイ。
- さらに、deploy/prerelease ブランチを master ブランチと deploy/staging ブランチにマージして、 障害対応分を各ブランチに反映。
本番環境で障害が発生したら、bugfix ブランチを作って対応しています。
対応完了後、プレリリースサーバーで確認後、プロダクションサーバーにデプロイするという流れです。 障害対応がひと段落したら、master と deploy/staging にも修正を反映させます。
今のところ、こんなフローでうまく回っていますが、 チームの規模や開発のステージに応じて微調整は継続していかないといけないなぁ、と思っています。
エンジニア募集中!
ビジネスバンクグループではエンジニアを募集中しています。
弊社が採用しているテクノロジや開発環境に興味を持った方は、 ここから是非エントリー を!