プロダクション環境は、アプリケーションが実際のユーザーやデータと連携する場所です。開発環境やステージングとは異なり、プロダクションでは安定性、パフォーマンス、耐障害性により一層の注意が必要です。DORA(2024)によると、DevOps成熟度の高いチームは、低成熟度のチームに比べて200倍頻繁にプロダクションにデプロイしています。CI/CDパイプラインはこのプロセスを自動化し、人為的ミスのリスクを低減して、ユーザーへの変更提供を迅速化します。
主要ポイント
CI/CDのコンテキストにおけるプロダクションは、アプリケーションライフサイクルの最終段階であり、ビルドとテストの全段階を通過したコードがエンドユーザーに対して利用可能になる場所です。開発環境やステージングとは異なり、プロダクション環境は実際のデータと負荷を扱うため、信頼性とパフォーマンスに特別な要件が課されます。
プロダクション環境は単なるサーバーではなく、ロードバランサー、データベース、キャッシュ層、CDN、監視システムを含むインフラストラクチャ全体です。各コンポーネントは耐障害性とスケーラビリティを備える必要があります。モバイル開発では、プロダクションにはバックエンドサービス、APIゲートウェイ、クライアントアプリケーションをサポートするプッシュインフラストラクチャも含まれます。
プロダクション環境は厳格な基準を満たす必要があります:可用性99.9%以上、API応答時間200 ms以内、災害復旧サポート(SLA内のRTOおよびRPO)。モバイルアプリケーションの場合、クラッシュレポート、使用状況分析、実験用のA/Bプラットフォームが追加で必要です。CI/CDパイプラインは、各デプロイ前の自動チェックを通じてこれらの要件への準拠を保証します。
プロダクションへのデプロイは、CI/CDパイプラインを通じて自動化された複数段階のプロセスです。各段階には、欠陥のあるコードがプロダクションに到達するのを防ぐチェックが含まれています。典型的なモバイルアプリケーションパイプラインの例を使用して、主要な段階を確認しましょう。
パイプラインはリポジトリのメインブランチへのコミットから始まります。プッシュ後、自動ビルドとユニットテストが起動され、続いて統合テストとコード品質チェックが実行されます。すべての段階が正常に完了すると、アーティファクトはビルドレジストリに公開され、最終確認のためにステージングにデプロイされます。ステージングでの確認後にのみ、パイプラインはプロダクションデプロイに進みます。
@Library("shared-lib") _
pipeline {
agent any
stages {
stage("Build") {
steps {
sh "cd app && ./gradlew assembleRelease"
}
}
stage("Test") {
steps {
sh "cd app && ./gradlew testRelease"
}
}
stage("Deploy to Staging") {
steps {
sh "deploy-staging.sh"
}
}
stage("Deploy to Production") {
input "Deploy to production?"
steps {
sh "deploy-production.sh"
}
}
}
}
プロダクションへの自動デプロイでは、ゼロダウンタイムデプロイ戦略(ローリングアップデート、ブルーグリーンデプロイ、カナリーリリース)が使用されます。ローリングアップデートでは、新しいアプリケーションインスタンスがサービスを停止することなく徐々に古いインスタンスを置き換えます。ブルーグリーンデプロイでは、2つの同一環境を維持し、トラフィックを即座に切り替えるため、問題発生時に迅速なロールバックが可能です。戦略の選択は、サービスの重要度と許容されるダウンタイムに依存します。モバイルアプリケーションの場合、プロダクションへのデプロイには、段階的なロールアウトを伴うアプリストア(App Store Connect、Google Play Console)への公開が含まれ、バイナリのアップロード、メタデータの入力、レビュー提出を含む公開プロセスを自動化するために、ストアAPIとの追加のCI/CD統合が必要です。
プロダクションへのデプロイ成功後、CI/CDパイプラインは一連のスモークテストを起動し、基本的なサービス機能(エンドポイントの可用性、API応答の正確性、通常範囲内の応答時間)を確認します。モバイルアプリケーションの場合、認証機能、データ同期、決済統合の正しい動作も追加で確認されます。スモークテストが失敗した場合、パイプラインは自動的に以前の安定バージョンへのロールバックを開始し、チームに通知を送信します。デプロイ後の監視は、30〜60分間、アラートレベルを上げて継続されます。これは自動テストでカバーされていない問題を検出するためのウィンドウです。
| 戦略 | ダウンタイム | ロールバック速度 | 複雑さ |
|---|---|---|---|
| ローリングアップデート | 最小限 | 段階的 | 低い |
| ブルーグリーン | ゼロ | 即時 | 中程度 |
| カナリー | ゼロ | 段階的 | 高い |
プロダクションとより厳格でない環境の主な違いは、実際のユーザーデータと負荷を扱うことです。ステージング環境はリリース前の最終テスト用に設計されていますが、合成データまたは匿名化データを使用します。一方、プロダクションはライブのトランザクション、個人データ、および極めて重要な操作を処理するため、管理に根本的に異なるアプローチが必要です。
プロダクション環境の構成は、他の環境から厳密に分離する必要があります。これは、環境変数、データベース接続文字列、APIキー、証明書に適用されます。プロダクションインフラストラクチャは通常、耐障害性を確保するために複数のアベイラビリティゾーンにわたって複製されます。モバイルアプリケーションの場合、プロダクションにはテストビルドにはないApple App StoreおよびGoogle Playの構成も含まれます。
プロダクションでは、テストに実際のデータを使用することは固く禁止されています。この目的のためにステージング環境と開発環境が存在します。データベース構造のすべての変更は、CI/CDパイプラインが自動的に適用するマイグレーションを通過する必要があります。プロダクションデータのバックアップは、自動整合性検証とともにスケジュールに従って実行されます。保持ポリシーは、GDPR要件およびその他の規制に従ってバックアップの保存期間を決定します。
プロダクション監視は、メトリクス、ログ、トレースを収集および分析する継続的なプロセスです。包括的な監視なしでは、SLAを保証し、インシデントをタイムリーに検出することは不可能です。最新の監視アプローチは、メトリクス(数値指標)、ログ(構造化イベント記録)、トレース(リクエスト追跡)の3つの柱に基づいています。
プロダクション環境の主要メトリクスには、アップタイム(サービス可用性)、レイテンシ(応答遅延)、エラー率(エラーの割合)、スループット(帯域幅)、飽和度(リソース負荷レベル)が含まれます。モバイルアプリケーションの場合、起動時間メトリクス、クラッシュフリー率、データ同期時間が重要です。アラートはSLO(サービスレベル目標)に基づいて設定され、SLA違反前にチームが通知を受け取れるようにします。
プロダクションインフラストラクチャの監視には、専門のプラットフォームが使用されます:メトリクス収集用のDatadog、New Relic、Grafana + Prometheus、モバイルアプリケーションのエラー追跡用のSentryとCrashlytics。ログはELKスタック(Elasticsearch、Logstash、Kibana)またはSplunkを通じて集中管理されます。リクエストトレースはJaegerまたはZipkinを使用して実装されます。すべてのツールは、新しいサービスをデプロイする際の自動ダッシュボード作成のためにCI/CDパイプラインと統合されます。インシデント対応システム(PagerDuty、Opsgenie)はすべての監視ツールからアラートを受信し、ローテーションとエスカレーションルールに基づいてオンコール担当者を自動的に割り当てます。各インシデントタイプのランブックはリポジトリに保存され、コードとともにバージョン管理され、復旧手順の最新性を保証します。
プロダクション環境のセキュリティは、インフラストラクチャ、データ、アクセス、デプロイプロセスをカバーする多層防御システムです。各層は、1つの層が侵害されてもシステム全体が侵害されないように構成する必要があります。CI/CDパイプラインは、各パイプライン段階での自動チェック、脆弱性スキャン、コンプライアンス管理を通じてセキュリティ確保において重要な役割を果たします。
プロダクション環境へのアクセスは、最小権限の原則によって厳しく制限されています。開発者はプロダクションサーバーに直接アクセスできません。すべての変更は、承認メカニズムを備えたCI/CDパイプラインを通じて行われます。緊急アクセスには、自動ローテーションと完全なアクションログを備えた一時的な認証情報が使用されます。フォーアイズ原則(任意の操作には2人の承認が必要)は、プロダクション運用の標準です。
プロダクションでのすべての変更は監査システムに記録されます:誰がデプロイを開始したか、どのコミットがデプロイされたか、どのチェックに合格したか、デプロイにかかった時間。CI/CDとインシデント管理システム(PagerDuty、Opsgenie)の統合により、デプロイ失敗時やSLO違反時に自動的にチケットを作成できます。すべてのプロダクションログは、SOC2およびISO 27001の要件に従って、少なくとも90日間の保持期間を持つ不変のリポジトリに保存されます。
よくある質問
ステージングは、合成データまたは匿名化データを使用するリリース前の最終テスト用の環境です。プロダクションは実際のユーザー、負荷、機密データを扱うため、プロダクションのセキュリティと耐障害性の要件は大幅に高くなります。ステージングとプロダクションは構成を可能な限り同一にする必要がありますが、完全に分離する必要があります。
デプロイ頻度はCI/CDプロセスの成熟度とアプリケーションの種類によって異なります。DORA(2024)によると、高性能チームは毎日、または1日に複数回デプロイします。モバイルアプリケーションの場合、頻度はApp StoreとGoogle Playのレビューサイクルによって制限されますが、バックエンドサービスは包括的な自動テストにより1日に複数回デプロイできます。
デプロイが失敗した場合、直ちにロールバック手順が開始され、以前の安定バージョンに戻します。CI/CDパイプラインは、主要メトリクス(エラー率、レイテンシ)が低下した場合に自動ロールバックをサポートする必要があります。安定化後、ポストモーテム分析が実施されます:根本原因を特定し、修正タスクを作成し、インシデントの再発を防ぐための自動チェックを追加します。
重要なメトリクス:アップタイム(サービスの可用性)、レイテンシ(p95およびp99応答時間)、エラー率(HTTP 5xxおよび例外の割合)、飽和度(CPU、メモリ、ディスク、ネットワーク)、スループット(RPS)。モバイルアプリケーションの場合、クラッシュフリー率、コールドスタート時間、ANR(アプリケーション未応答)の頻度も重要です。各メトリクスにはSLOと対応するアラートが必要です。
主な保護方法は、CI/CDパイプラインを通じた自動化です。すべての変更は、必須チェックとレビューメカニズムを備えたパイプラインを通過します。さらに、フォーアイズ原則(2人のシニア開発者による承認)、段階的な機能ロールアウトのためのフィーチャーフラグ、リスク低減のためのカナリーデプロイ、重要なシナリオをカバーする自動テストが適用されます。プロダクションへの直接アクセスは、承認されたDevOps手順を通じてのみ許可されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。