メインコンテンツまでスキップ

リリースプロセス

Bazbiiシステムのリリース手順とバージョン管理を説明します。

リリースプロセスの概要

リリースフロー

計画

準備

デプロイ(ステージング)

検証

デプロイ(本番)

監視

完了

リリース計画

リリース計画のタイミング

  • 定例リリース: 週次/月次(計画に基づく)
  • 緊急リリース: 重大なバグ修正、セキュリティパッチ

リリース計画の内容

  1. リリース範囲の決定

    • 含める機能・修正
    • 含めない機能・修正
  2. リリース日時の決定

    • リリース日時
    • デプロイ時間帯(低トラフィック時を推奨)
  3. リリース担当者の決定

    • リリース管理者
    • デプロイ担当者
    • 監視担当者

リリース準備

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)
# - ダウンマイグレーションの準備

マイグレーション実行計画

  1. 事前確認: 本番環境と同一の環境でテスト
  2. 実行タイミング: リリース前 or リリース中
  3. ロールバック計画: 失敗時の対応

ステージング環境へのデプロイ

デプロイ手順

  1. ステージング環境へのデプロイ
# ステージング環境のKubernetes設定
kubectl apply -f infra/k8s/overlays/staging/

# デプロイ状況確認
kubectl rollout status deployment/gateway
kubectl rollout status deployment/api
  1. ヘルスチェック
# ヘルスチェック
curl https://stg-api.bazbii.app/healthz

# レディネスチェック
curl https://stg-api.bazbii.app/ready
  1. スモークテスト
# 主要な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の動作確認
  • エラー率の確認(異常値なし)
  • レスポンスタイムの確認(正常範囲内)
  • データベースマイグレーション成功

本番環境へのデプロイ

デプロイ前の最終確認

  1. チェックリスト
  • ステージング環境での検証完了
  • バックアップの取得
  • ロールバック手順の確認
  • 監視ダッシュボードの準備
  • 緊急連絡体制の確認
  1. デプロイ承認
  • リリース管理者の承認
  • デプロイ実行者の確認

デプロイ手順

  1. データベースマイグレーション(必要に応じて)
# マイグレーション実行
make db/mig-up

# マイグレーション状況確認
make db/mig-ver
  1. アプリケーションデプロイ
# 本番環境の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
  1. ヘルスチェック
# ヘルスチェック
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

ホットフィックス

緊急リリースのフロー

  1. 問題の特定: 本番環境で発生している問題を特定
  2. 緊急修正: 最小限の変更で修正
  3. テスト: 必要最小限のテストを実行
  4. デプロイ: 本番環境に直接デプロイ(必要に応じて)
  5. 事後対応: 正式なリリースプロセスで再リリース

ホットフィックスの例

# 緊急ブランチ作成
git checkout -b hotfix/critical-bug

# 修正
# ...

# 緊急デプロイ
git tag v1.0.1
kubectl set image deployment/api api=registry/bazbii/api:v1.0.1

リリースノート

リリースノートの内容

  1. バージョン情報: バージョン番号、リリース日時
  2. 新機能: 追加された機能
  3. 変更点: 変更された機能
  4. 修正: バグ修正
  5. 破壊的変更: 後方互換性のない変更(ある場合)
  6. アップグレード手順: アップグレード時の注意事項

リリースノートテンプレート

# Release v1.0.0

## リリース日時
2024-XX-XX

## 新機能
- 投稿作成APIの追加
- タイムライン取得APIの追加

## 変更点
- 認証方式の変更(JWT)

## 修正
- メモリリークの修正
- データベース接続エラーの修正

## 破壊的変更
なし

## アップグレード手順
1. データベースマイグレーション実行
2. アプリケーションのデプロイ

リリース後の監視

監視項目

  • エラー率: 異常な値がないか
  • レスポンスタイム: 正常範囲内か
  • リソース使用率: CPU、メモリの使用率
  • ユーザー影響: ユーザーからの問い合わせ

監視期間

  • 即座(5分以内): ヘルスチェック、エラー率
  • 短期(30分〜1時間): メトリクスの推移
  • 中期(24時間): 継続的な監視

ベストプラクティス

1. 段階的デプロイ

  • カナリアデプロイで影響を最小化
  • 問題があればすぐにロールバック

2. デプロイ時間帯

  • 低トラフィック時を選択
  • 平日の深夜や週末を避ける

3. バックアップ

  • デプロイ前のバックアップ取得
  • ロールバック時の復旧準備

4. コミュニケーション

  • リリース計画の共有
  • デプロイ状況の通知
  • 問題発生時の報告

関連ドキュメント