ソフトウェア開発の流れと環境の整備
概要
この記事ではソフトウェア開発の各フェーズからテスト、そしてリリースに至るまでのプロセスについて過去の経験をもとに書きます。
具体的にはGitブランチの管理、開発ステータスの分類、それぞれの開発環境の役割に焦点を当てます。
ブランチの種類
main
デフォルトブランチ
唯一継続的に維持されるブランチ
QAが完了したコードまたはQAの必要がないと判断されたコードがこのブランチにマージされる。
常にリリース可能なコードのみで保たれる。
通常このブランチからProductionへのリリースが行われる。
scope/*
特定の機能群をリリース可能な単位でまとめたブランチ
このブランチに対してQAを行いmainブランチへマージされる。
feature/*, chore/*
各タスク用のブランチ
QAが必要なものは scope/* 、QAが必要ないと判断されたものは main ブランチから生成しそのブランチへマージされる。
hotfix/*
hotfix用ブランチ
リリースタグから生成される。
hotfix時にこのブランチに対してQAを行い、リリースする。
リリース後 main ブランチへマージされる。
開発ステータス
Developing
開発途中段階
開発が完了したら test ステータスへ移行する。
QAの必要がないと判断されたものは release ready ステータスへ移行する。
Testing
QA環境が作成されテスト中またはテストを開始できる状態
テストを完了したら release ready ステータスへ移行する。
Release ready
リリース可能な状態
リリース直前に production preview ステータスへ移行する。
Production preview
最終確認状態
最終確認が完了したら released ステータスへ移行する。
Released
リリース完了状態
データベース環境
Test
テスト用DB
テスト開始時に作成され、完了時に破棄される。
Staging
開発時やStaging環境においての動作確認用DB
Production
Production用DB
デプロイ環境
Test
QA環境
scope/* または hotfix/* ブランチがテスト可能な状態になった際に生成され、テスト完了後破棄される。
専用の環境を毎回作成し、任意のデータを簡単に挿入できるようにする。
APIは Test DB へ接続される。
フロントエンドは認証で保護される。
Staging
mainブランチ を常にデプロイする。
APIは Staging DB へ接続される。
APIはローカルのフロントエンドから接続可能な設定とする。
フロントエンドは認証で保護される。
Production preview
リリース直前の確認環境
リリース直前に生成され、確認完了後破棄される。
APIは Production DB へ接続される。
フロントエンドは認証で保護される。
Production
Production環境
運用
1. ちょっとした修正など
- Status: Developing
-
mainブランチからfeature,choreなどのブランチを作成- 実装
- 開発者がテスト
-
- Status: Release Ready
-
mainブランチへマージ- Staging環境へ自動デプロイ
-
- Status: Production Preview
-
mainブランチをProduction Preview環境へデプロイ- 最終確認
-
- Status: Released
-
mainブランチにリリースタグを切る-
Production環境へ自動デプロイ/リリース
-
-
2. 大きめの機能開発
- Status: Developing
-
mainブランチからscopeブランチを作成 -
scopeブランチからfeature,choreなどのブランチを作成- 実装
-
scopeブランチへマージ -
scopeブランチからブランチ作成、マージを繰り返す
-
- Status: Testing
-
scopeブランチをTest環境へデプロイ- テスト
-
- Status: Release Ready
-
scopeブランチをmainブランチへマージ- Staging環境へ自動デプロイ
-
- Status: Production Preview
-
mainブランチをProduction Preview環境へデプロイ - 最終確認
-
- Status: Released
-
mainブランチにリリースタグを切る -
Production環境へ自動デプロイ/リリース
-
3. Hotfix
- Status: Developing
-
前回のリリースタグからhotfixブランチを作成- 実装
-
- Status: Testing
-
hotfixブランチをTest環境へデプロイ- テスト
-
- Status: Production Preview
-
hotfixブランチをProduction Preview環境へデプロイ - 最終確認
-
- Status: Released
-
hotfixブランチにリリースタグを切る -
Production環境へ自動デプロイ/リリース -
hotfixブランチをmainブランチへマージ
-
あとがき
このブランチ運用には問題もあります。
scopeブランチの存続期間が長くなるほど、コンフリクトが起きやすくなったり、scopeブランチのコードに依存した他のコードリリースがしづらくなります。
mainブランチにどんどんマージしてしまう運用もありますが、mainブランチがリリース可能な状態ではなくなるのでそれも考えものです。
featureフラグを使った運用などうまく構築できるとよいですが、、
Discussion