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

環境の種類(dev / prd)

このシステムでは、dev(開発環境)prd(本番環境) の 2 つの環境を提供しています。適切な環境を選択することでコスト効率とサービス品質のバランスを取ることができます。

dev(開発環境)

用途

インターナル(社内)での開発・検証・テスト目的

  • 社内メンバーのみがアクセスする環境
  • 新機能の開発やテストに使用
  • クライアントには公開しない

特徴

💰 Zero Scaling によるコスト削減

Zero Scaling(ゼロスケーリング)によるコスト最適化が最大の特徴です。

  • アクセスがない時間帯: インスタンス数が自動的に 0 にスケールダウンし、コンピュートリソースの課金が発生しない
  • アクセスがあるとき: 自動的にスケールアップして稼働開始(コールドスタート)
  • 実装: Azure Container Apps の min_replicas: 0 により実現
infra.config.yml(開発環境の例)
dev:
frontend:
deploy:
min_replicas: 0 # Zero Scalingを有効化
max_replicas: 1

コスト削減効果: 夜間や週末など、使用していない時間帯の課金がゼロ。開発中のアプリケーションを複数稼働させてもコストを抑制。

注意点: 初回アクセス時にコールドスタートが発生(数秒~数十秒の遅延)。リアルタイム性が求められる用途には不向き。

🌐 ネットワーク構成

現時点では、ネットワーク的には prd 環境と差分はありません。今後、社内ネットワークからのみアクセス可能にする IP 制限や、より緩いセキュリティポリシーを適用する可能性があります。

prd(本番環境)

用途

クライアントに提供するサービス

  • クライアントや一般ユーザーがアクセスする環境
  • 外部に公開するサービス
  • 安定性と可用性が最優先

特徴

🚀 常時稼働による高可用性

常時稼働を基本とし、ダウンタイムを最小化します。

  • 常に稼働: min_replicas: 1 以上で設定し、インスタンスが常に起動
  • コールドスタートなし: ユーザーは常に即座にアクセス可能
  • 高可用性: クライアント要件に応じて複数レプリカで冗長化
infra.config.yml(本番環境の例)
prd:
frontend:
deploy:
min_replicas: 1 # 常に1インスタンス以上稼働
max_replicas: 10 # 負荷に応じて自動スケール

本番環境のスケーリング例:

サービス規模min_replicasmax_replicas説明
小規模(MVP)13基本的な可用性を確保
中規模210冗長化とスケーラビリティ
大規模(高トラフィック)330高可用性と大量リクエスト対応

🌐 ネットワーク構成

現時点では、ネットワーク的には dev 環境と差分はありません。今後、より厳格なセキュリティポリシー、DDoS 対策やレート制限の強化、監視とアラートの強化を適用する可能性があります。

環境の選択基準

判断フローチャート

選択基準一覧

判断基準環境理由
クライアント提供のサービスprd可用性とパフォーマンスが必須
外部ユーザーがアクセスするprdコールドスタートは許容できない
社内のみで使用devコスト削減を優先
開発・検証・テスト用devZero Scaling で効率化
デモ環境(クライアント向け)prdクライアントに見せる環境は本番相当
デモ環境(社内検証用)dev社内用途のためコスト削減を優先
MVP(最小実行可能製品)prd一般ユーザーがアクセスする可能性がある
社内ツール・管理画面(社内のみ)dev社内利用のため Zero Scaling で十分

⚠️ 重要な原則

クライアントに提供する場合は、たとえデモ環境や検証環境であっても、必ず prd 環境を使用してください。

理由:

  • コールドスタートによる遅延はクライアント体験を損なう
  • 本番環境相当の安定性が求められる
  • Zero Scaling によるサービス停止はプロフェッショナルではない

環境間の違いまとめ

項目dev(開発環境)prd(本番環境)
用途社内での開発・検証クライアント提供
アクセス対象社内メンバーのみ外部ユーザー
スケーリングZero Scaling(min_replicas: 0)常時稼働(min_replicas: 1+)
コスト最小限(未使用時は課金なし)常時課金
起動時間コールドスタートあり即座にアクセス可能
可用性開発用途に十分高可用性
ネットワーク現時点では prd と同一現時点では dev と同一
将来の方向性開発効率優先のポリシーセキュリティ・監視強化

実際の設定例

開発環境の設定例

infra.config.yml
dev:
frontend:
target: container_apps
resource_group: rg-myapp-dev
container_app_name: ca-myapp-frontend-dev
dotenv_path: .env.dev
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/frontend
tag_name: "{{ git.sha_short }}"
deploy:
min_replicas: 0 # Zero Scaling
max_replicas: 1
cpu: "0.25"
memory: "0.5Gi"

backend:
target: container_apps
resource_group: rg-myapp-dev
container_app_name: ca-myapp-backend-dev
dotenv_path: .env.dev
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/backend
tag_name: "{{ git.sha_short }}"
deploy:
min_replicas: 0 # Zero Scaling
max_replicas: 1
cpu: "0.5"
memory: "1Gi"

本番環境の設定例

infra.config.yml
prd:
frontend:
target: container_apps
resource_group: rg-myapp-prd
container_app_name: ca-myapp-frontend-prd
dotenv_path: .env.prod
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/frontend
tag_name: "v{{ git.tag_or_sha }}"
deploy:
min_replicas: 2 # 常時2インスタンス(冗長化)
max_replicas: 10 # 高負荷時に自動スケール
cpu: "0.5"
memory: "1Gi"

backend:
target: container_apps
resource_group: rg-myapp-prd
container_app_name: ca-myapp-backend-prd
dotenv_path: .env.prod
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/backend
tag_name: "v{{ git.tag_or_sha }}"
deploy:
min_replicas: 2 # 常時2インスタンス(冗長化)
max_replicas: 20 # API負荷に応じてスケール
cpu: "1.0"
memory: "2Gi"

※ 本番環境であってもミッションクリティカル出ない場合は min_replicas を 1 にしてコストを抑えてください。

よくある質問

  • Q1. 社内向けの管理画面はどちらの環境を使うべきですか?
    A: 社内メンバーのみがアクセスする場合は dev 環境を推奨します。Zero Scaling によりコストを削減できます。ただし、常時監視が必要なダッシュボードなどは prd 環境を検討してください。

  • Q2. デモ環境は dev と prd のどちらを使うべきですか?
    A: デモの対象者で判断してください。クライアント向けデモは prd 環境(コールドスタートは避けるべき)、社内向けデモは dev 環境(コスト削減優先)。

  • Q3. MVP(最小実行可能製品)は dev 環境でも良いですか?
    A: MVP であっても、外部ユーザーがアクセスする場合は prd 環境を使用してください。ユーザー体験を損なうコールドスタートは、初期ユーザーの離脱につながります。

  • Q4. dev 環境のコールドスタートはどのくらい時間がかかりますか?
    A: アプリケーションの規模によりますが、一般的に小規模アプリは 5 ~ 15 秒、中規模アプリは 15 ~ 30 秒、大規模アプリは 30 ~ 60 秒です。

関連ドキュメント