ソフトウェア開発の流れと環境の整備
概要
この記事ではソフトウェア開発の各フェーズからテスト、そしてリリースに至るまでのプロセスについて過去の経験をもとに書きます。
具体的には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