リリースプロセス
Bazbiiシステムのリリース手順とバージョン管理を説明します。
リリースプロセスの概要
リリースフロー
計画
↓
準備
↓
デプロイ(ステージング)
↓
検証
↓
デプロイ(本番)
↓
監視
↓
完了
リリース計画
リリース計画のタイミング
- 定例リリース: 週次/月次(計画に基づく)
- 緊急リリース: 重大なバグ修正、セキュリティパッチ
リリース計画の内容
-
リリース範囲の決定
- 含める機能・修正
- 含めない機能・修正
-
リリース日時の決定
- リリース日時
- デプロイ時間帯(低トラフィック時を推奨)
-
リリース担当者の決定
- リリース管理者
- デプロイ担当者
- 監視担当者
リリース準備
1. コードの準備
マージの確認
# リリースブランチの作成
git checkout -b release/v1.0.0
# マージ予定の変更の確認
git log main..develop
# テストの実行
make go/test
pnpm test
ドキュメントの更新
- CHANGELOG.mdの更新
- APIドキュメントの更新(必要に応じて)
- ユーザー向けドキュメントの更新(必要に応じて)
2. バージョン番号の更新
Semantic Versioning
バージョン番号は MAJOR.MINOR.PATCH 形式:
- MAJOR: 後方互換性のない変更
- MINOR: 後方互換性のある機能追加
- PATCH: バグ修正、後方互換性のある修正
バージョン更新箇所
- Go modules:
go.modのバージョンタグ - npm packages:
package.jsonのバージョン - Docker images: イメージタグ
- Kubernetes manifests: イメージタグ参照
# バージョンタグの作成
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
3. マイグレーションの準備
データベースマイグレーション
# マイグレーションの確認
make db/mig-ver
# マイグレーションファイルの確認
ls -la infra/db/migrations/
# 後方互換性の確認
# - 段階的な変更(expand → migrate → contract)
# - ダウンマイグレーションの準備
マイグレーション実行計画
- 事前確認: 本番環境と同一の環境でテスト
- 実行タイミング: リリース前 or リリース中
- ロールバック計画: 失敗時の対応
ステージング環境へのデプロイ
デプロイ手順
- ステージング環境へのデプロイ
# ステージング環境のKubernetes設定
kubectl apply -f infra/k8s/overlays/staging/
# デプロイ状況確認
kubectl rollout status deployment/gateway
kubectl rollout status deployment/api
- ヘルスチェック
# ヘルスチェック
curl https://stg-api.bazbii.app/healthz
# レディネスチェック
curl https://stg-api.bazbii.app/ready
- スモークテスト
# 主要なAPIの動作確認
curl -X POST https://stg-api.bazbii.app/app/v1/posts \
-H "Authorization: Bearer $TOKEN" \
-d '{"h3_hex": "...", "text": "test"}'
curl https://stg-api.bazbii.app/app/v1/timeline?center_h3=...
検証項目
- ヘルスチェック成功
- 主要なAPIの動作確認
- エラー率の確認(異常値なし)
- レスポンスタイムの確認(正常範囲内)
- データベースマイグレーション成功
本番環境へのデプロイ
デプロイ前の最終確認
- チェックリスト
- ステージング環境での検証完了
- バックアップの取得
- ロールバック手順の確認
- 監視ダッシュボードの準備
- 緊急連絡体制の確認
- デプロイ承認
- リリース管理者の承認
- デプロイ実行者の確認
デプロイ手順
- データベースマイグレーション(必要に応じて)
# マイグレーション実行
make db/mig-up
# マイグレーション状況確認
make db/mig-ver
- アプリケーションデプロイ
# 本番環境のKubernetes設定
kubectl apply -f infra/k8s/overlays/prod/
# 段階的デプロイ(カナリアデプロイ)
kubectl set image deployment/gateway gateway=registry/bazbii/gateway:v1.0.0
kubectl rollout status deployment/gateway
# 問題なければ全体デプロイ
kubectl set image deployment/api api=registry/bazbii/api:v1.0.0
kubectl rollout status deployment/api
- ヘルスチェック
# ヘルスチェック
curl https://api.bazbii.app/healthz
# レディネスチェック
curl https://api.bazbii.app/ready
デプロイ後の確認
即座に確認(5分以内)
- ヘルスチェック成功
- エラー率が正常範囲内
- レスポンスタイムが正常範囲内
継続的確認(30分〜1時間)
- メトリクスの推移確認
- エラーログの確認
- ユーザー影響の確認
ロールバック
ロールバックの判断基準
以下の場合はロールバックを検討:
- エラー率が急増(例: 5%以上)
- レスポンスタイムが大幅に悪化
- サービスが利用不可
- データ不整合が発生
ロールバック手順
# 以前のバージョンに戻す
kubectl rollout undo deployment/gateway
kubectl rollout undo deployment/api
# ロールバック状況確認
kubectl rollout status deployment/gateway
kubectl rollout status deployment/api
# 動作確認
curl https://api.bazbii.app/healthz
データベースロールバック
# マイグレーションロールバック(慎重に)
make db/mig-down
# マイグレーション状況確認
make db/mig-ver
ホットフィックス
緊急リリースのフロー
- 問題の特定: 本番環境で発生している問題を特定
- 緊急修正: 最小限の変更で修正
- テスト: 必要最小限のテストを実行
- デプロイ: 本番環境に直接デプロイ(必要に応じて)
- 事後対応: 正式なリリースプロセスで再リリース
ホットフィックスの例
# 緊急ブランチ作成
git checkout -b hotfix/critical-bug
# 修正
# ...
# 緊急デプロイ
git tag v1.0.1
kubectl set image deployment/api api=registry/bazbii/api:v1.0.1
リリースノート
リリースノートの内容
- バージョン情報: バージョン番号、リリース日時
- 新機能: 追加された機能
- 変更点: 変更された機能
- 修正: バグ修正
- 破壊的変更: 後方互換性のない変更(ある場合)
- アップグレード手順: アップグレード時の注意事項
リリースノートテンプレート
# Release v1.0.0
## リリース日時
2024-XX-XX
## 新機能
- 投稿作成APIの追加
- タイムライン取得APIの追加
## 変更点
- 認証方式の変更(JWT)
## 修正
- メモリリークの修正
- データベース接続エラーの修正
## 破壊的変更
なし
## アップグレード手順
1. データベースマイグレーション実行
2. アプリケーションのデプロイ
リリース後の監視
監視項目
- エラー率: 異常な値がないか
- レスポンスタイム: 正常範囲内か
- リソース使用率: CPU、メモリの使用率
- ユーザー影響: ユーザーからの問い合わせ
監視期間
- 即座(5分以内): ヘルスチェック、エラー率
- 短期(30分〜1時間): メトリクスの推移
- 中期(24時間): 継続的な監視
ベストプラクティス
1. 段階的デプロイ
- カナリアデプロイで影響を最小化
- 問題があればすぐにロールバック
2. デプロイ時間帯
- 低トラフィック時を選択
- 平日の深夜や週末を避ける
3. バックアップ
- デプロイ前のバックアップ取得
- ロールバック時の復旧準備
4. コミュニケーション
- リリース計画の共有
- デプロイ状況の通知
- 問題発生時の報告
関連ドキュメント
- デプロイメント - デプロイ手順の詳細
- 障害対応手順 - 問題発生時の対応
- CI/CDパイプライン - 自動デプロイの設定