環境の種類(dev / prd)
このシステムでは、dev(開発環境) と prd(本番環境) の 2 つの環境を提供しています。適切な環境を選択することでコスト効率とサービス品質のバランスを取ることができます。
dev(開発環境)
用途
インターナル(社内)での開発・検証・テスト目的
- 社内メンバーのみがアクセスする環境
- 新機能の開発やテストに使用
- クライアントには公開しない
特徴
💰 Zero Scaling によるコスト削減
Zero Scaling(ゼロスケーリング)によるコスト最適化が最大の特徴です。
- アクセスがない時間帯: インスタンス数が自動的に 0 にスケールダウンし、コンピュートリソースの課金が発生しない
- アクセスがあるとき: 自動的にスケールアップして稼働開始(コールドスタート)
- 実装: Azure Container Apps の
min_replicas: 0により実現
dev:
frontend:
deploy:
min_replicas: 0 # Zero Scalingを有効化
max_replicas: 1
コスト削減効果: 夜間や週末など、使用していない時間帯の課金がゼロ。開発中のアプリケーションを複数稼働させてもコストを抑制。
注意点: 初回アクセス時にコールドスタートが発生(数秒~数十秒の遅延)。リアルタイム性が求められる用途には不向き。
🌐 ネットワーク構成
現時点では、ネットワーク的には prd 環境と差分はありません。今後、社内ネットワークからのみアクセス可能にする IP 制限や、より緩いセキュリティポリシーを適用する可能性があります。
prd(本番環境)
用途
クライアントに提供するサービス
- クライアントや一般ユーザーがアクセスする環境
- 外部に公開するサービス
- 安定性と可用性が最優先
特徴
🚀 常時稼働による高可用性
常時稼働を基本とし、ダウンタイムを最小化します。
- 常に稼働:
min_replicas: 1以上で設定し、インスタンスが常に起動 - コールドスタートなし: ユーザーは常に即座にアクセス可能
- 高可用性: クライアント要件に応じて複数レプリカで冗長化
prd:
frontend:
deploy:
min_replicas: 1 # 常に1インスタンス以上稼働
max_replicas: 10 # 負荷に応じて自動スケール
本番環境のスケーリング例:
| サービス規模 | min_replicas | max_replicas | 説明 |
|---|---|---|---|
| 小規模(MVP) | 1 | 3 | 基本的な可用性を確保 |
| 中規模 | 2 | 10 | 冗長化とスケーラビリティ |
| 大規模(高トラフィック) | 3 | 30 | 高可用性と大量リクエスト対応 |
🌐 ネットワーク構成
現時点では、ネットワーク的には dev 環境と差分はありません。今後、より厳格なセキュリティポリシー、DDoS 対策やレート制限の強化、監視とアラートの強化を適用する可能性があります。
環境の選択基準
判断フローチャート
選択基準一覧
| 判断基準 | 環境 | 理由 |
|---|---|---|
| クライアント提供のサービス | prd | 可用性とパフォーマンスが必須 |
| 外部ユーザーがアクセスする | prd | コールドスタートは許容できない |
| 社内のみで使用 | dev | コスト削減を優先 |
| 開発・検証・テスト用 | dev | Zero Scaling で効率化 |
| デモ環境(クライアント向け) | prd | クライアントに見せる環境は本番相当 |
| デモ環境(社内検証用) | dev | 社内用途のためコスト削減を優先 |
| MVP(最小実行可能製品) | prd | 一般ユーザーがアクセスする可能性がある |
| 社内ツール・管理画面(社内のみ) | dev | 社内利用のため Zero Scaling で十分 |
⚠️ 重要な原則
クライアントに提供する場合は、たとえデモ環境や検証環境であっても、必ず prd 環境を使用してください。
理由:
- コールドスタートによる遅延はクライアント体験を損なう
- 本番環境相当の安定性が求められる
- Zero Scaling によるサービス停止はプロフェッショナルではない
環境間の違いまとめ
| 項目 | dev(開発環境) | prd(本番環境) |
|---|---|---|
| 用途 | 社内での開発・検証 | クライアント提供 |
| アクセス対象 | 社内メンバーのみ | 外部ユーザー |
| スケーリング | Zero Scaling(min_replicas: 0) | 常時稼働(min_replicas: 1+) |
| コスト | 最小限(未使用時は課金なし) | 常時課金 |
| 起動時間 | コールドスタートあり | 即座にアクセス可能 |
| 可用性 | 開発用途に十分 | 高可用性 |
| ネットワーク | 現時点では prd と同一 | 現時点では dev と同一 |
| 将来の方向性 | 開発効率優先のポリシー | セキュリティ・監視強化 |
実際の設定例
開発環境の設定例
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"
本番環境の設定例
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 秒です。
関連ドキュメント
- infra.config.yml 仕様 - 設定ファイルの完全な仕様