👷

ソフトウェア開発の流れと環境の整備

2024/04/26に公開

概要

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