6-1 リリース管理
Release Management
1. リリース管理の概要
1.1 リリース管理とは
リリース管理とは、ソフトウェアの開発完了からテスト、本番環境への展開までを 計画・管理するプロセスである。ITILでは「リリースおよびデプロイメント管理」 として体系化されており、変更管理や構成管理と密接に連携する。 単にコードをデプロイするだけでなく、関係者への連絡、ドキュメント更新、 トレーニングなども含む包括的な活動である。
リリース管理の主要な活動を以下に示す。各活動は順序立てて実施され、 一つでも欠けると本番障害のリスクが高まる。
| 活動 | 内容 |
|---|---|
| リリース計画 | リリース範囲、スケジュール、リソースの計画 |
| ビルド・パッケージング | リリース対象のソフトウェアを構成 |
| テスト | リリース前の最終検証 |
| デプロイメント | 本番環境への展開 |
| 検証・監視 | リリース後の動作確認 |
1.2 リリースの種類
リリースは変更の規模と影響範囲によって分類される。 セマンティックバージョニングでは、Major.Minor.Patchの形式で バージョン番号を管理する。例えばv2.1.3は、メジャーバージョン2、 マイナーバージョン1、パッチ3を意味する。この規約により、 バージョン番号から変更の影響度を推測できる。
| 種類 | 説明 | 例 |
|---|---|---|
| メジャーリリース | 大規模な機能追加、破壊的変更を含む | v1.0 → v2.0 |
| マイナーリリース | 後方互換性のある機能追加、改善 | v1.0 → v1.1 |
| パッチリリース | バグ修正、セキュリティ対応 | v1.0.0 → v1.0.1 |
| ホットフィックス | 緊急の障害対応、即時デプロイ | 即時デプロイ |
バージョン番号の規約を統一することで、利用者は更新の影響度を判断しやすくなる。 APIを提供するシステムでは特に重要であり、破壊的変更を含むメジャーバージョンアップ時には 十分な移行期間を設けることが推奨される。
2. リリース計画
2.1 リリース計画書の内容
リリース計画書は、リリースを成功させるための青写真である。 関係者全員が同じ情報を共有し、役割と責任を明確にすることで、 リリース当日の混乱を防ぐ。特に大規模リリースでは、 事前に十分なリハーサルを行うことが重要である。
| 項目 | 内容 |
|---|---|
| リリース概要 | リリース名、バージョン、目的 |
| スコープ | 含まれる機能、変更、修正の一覧 |
| スケジュール | リリース日時、作業工程 |
| 環境 | 対象環境、前提条件 |
| リスクと対策 | 想定リスク、ロールバック手順 |
| 体制 | 担当者、連絡先、エスカレーションパス |
| 承認者 | リリース承認の責任者 |
2.2 リリース判定基準
リリースの可否を判断するための基準を事前に定義する。 曖昧な基準では、判断に迷いが生じ、結果として問題のあるリリースを 実施してしまうリスクがある。定量的な基準を設定し、 客観的に判断できるようにすることが重要である。
| カテゴリ | 判定基準例 |
|---|---|
| 品質 | 重大バグゼロ、テストカバレッジ80%以上 |
| テスト | 全テストケース合格、回帰テスト完了 |
| ドキュメント | リリースノート作成済み、手順書更新済み |
| 承認 | 関係者の承認取得 |
3. デプロイメント戦略
3.1 デプロイメント方式の比較
デプロイメント方式は、リスク許容度、ダウンタイム要件、 インフラコストのバランスを考慮して選択する。 24時間稼働が求められるシステムでは、ブルー/グリーンや カナリアデプロイメントが有効である。一方、メンテナンスウィンドウが 確保できるシステムでは、シンプルなビッグバン方式も選択肢となる。
| 方式 | 概要 | メリット | デメリット |
|---|---|---|---|
| ビッグバン | 一度に全て更新 | シンプル | リスク大、ダウンタイム |
| ローリング | 段階的に更新 | ダウンタイム最小 | バージョン混在 |
| ブルー/グリーン | 環境切り替え | 即座にロールバック可 | 環境コスト2倍 |
| カナリア | 一部ユーザーから展開 | 影響範囲を限定 | 複雑な設定 |
ブルー/グリーンデプロイメントでは、本番環境(ブルー)と同一構成の 待機環境(グリーン)を用意する。新バージョンをグリーン環境にデプロイし、 テスト完了後にロードバランサーの向き先を切り替える。 問題発生時は即座にブルー環境に戻せるため、ダウンタイムを最小化できる。
@startuml !theme plain skinparam backgroundColor #FEFEFE skinparam defaultFontName Noto Sans JP title ブルー/グリーン デプロイメント rectangle "ロードバランサー" as LB #E0E7FF rectangle "ブルー環境 (現行版 v1.0)" as Blue #DBEAFE rectangle "グリーン環境 (新版 v2.0)" as Green #D1FAE5 database "データベース" as DB #FEF3C7 LB --> Blue : 1. 現在のトラフィック Blue --> DB Green --> DB note right of Green 2. 新バージョンをデプロイ 3. テスト実施 4. 問題なければLB切り替え end note note bottom of LB 切り替え後、問題発生時は 即座にブルーへ戻す end note @enduml
図1: ブルー/グリーンデプロイメントの流れ
本番環境でのコード修正や設定変更は避けるべきである。 すべての変更はテスト環境で検証し、承認されたリリースパッケージを 本番環境にデプロイする。これは構成管理の基本原則である。
4. ロールバック計画
4.1 ロールバックの準備
どれだけ入念に準備しても、本番リリースで問題が発生する可能性はゼロにはならない。 そのため、ロールバック(切り戻し)計画は必須である。 ロールバック手順は事前にテスト環境で検証し、 本番と同じ条件で動作することを確認しておく必要がある。
| 準備項目 | 内容 |
|---|---|
| 前バージョンの保持 | ロールバック先のバージョンを保管 |
| データベースバックアップ | リリース前のデータを保存 |
| ロールバック手順書 | 具体的な手順を文書化 |
| 判断基準 | ロールバックを決定する条件 |
| 連絡体制 | 関係者への連絡方法 |
4.2 ロールバック判断基準
障害の重大度に応じて、ロールバックの判断基準を事前に定義しておく。 クリティカルな障害では迷わず即座にロールバックする。 一方、軽微な問題であればホットフィックスで対応し、 ロールバックによる影響(再デプロイの工数、データの整合性など)を 避けることも選択肢となる。
| レベル | 状況 | 対応 |
|---|---|---|
| クリティカル | サービス停止、データ損失の恐れ | 即座にロールバック |
| メジャー | 主要機能の障害 | 1時間以内に判断 |
| マイナー | 軽微な不具合 | ホットフィックスで対応 |
ロールバックのテスト
ロールバック手順は、本番リリース前にテスト環境で必ず検証すること。 「ロールバックすればいい」という安易な考えは危険であり、 ロールバック自体が失敗するリスクも考慮すべきである。 特にデータベーススキーマの変更を伴うリリースでは、 データの整合性を保つためのマイグレーション戦略が必要となる。
5. リリース後の活動
5.1 リリース後チェック
リリースが完了しても、作業は終わりではない。 リリース直後は最も障害が発生しやすい時間帯であり、 集中的な監視が必要である。スモークテストで主要機能の動作を確認し、 監視ダッシュボードでエラー率やレスポンスタイムを注視する。
| チェック項目 | 内容 |
|---|---|
| 機能確認 | 主要機能の動作確認(スモークテスト) |
| 性能確認 | レスポンスタイム、リソース使用率 |
| エラー監視 | エラーログ、例外の発生状況 |
| ユーザーフィードバック | 問い合わせ、クレームの有無 |
5.2 リリースレビュー
リリース完了後に振り返りを行い、プロセスの改善につなげる。 うまくいった点、問題が発生した点、改善すべき点を整理し、 次回のリリースに活かす。この継続的な改善活動が、 リリースプロセスの成熟度を高めていく。
[1] ITIL 4 Foundation.
[2] Humble, J. (2010). Continuous Delivery.