開発/本番一致

Twelve-Factor App の原則で、開発・ステージング・本番環境の差異を最小化する

Twelve-FactorDevOps

開発/本番一致とは

開発/本番一致 (Dev/Prod Parity) は、Twelve-Factor App の第 10 原則で、開発・ステージング・本番環境の差異を最小化し、「開発環境では動くが本番では動かない」問題を防ぐ。

3 つのギャップ

ギャップ 従来 Twelve-Factor
時間 開発からデプロイまで数週間 数時間〜数日
開発者が書き、運用者がデプロイ 開発者がデプロイ
ツール 開発は SQLite、本番は PostgreSQL 同じツールを使う

環境差異の例

❌ 開発と本番で異なるサービス:
  開発: SQLite, ローカルファイル, メール出力
  本番: PostgreSQL, S3, SES

✅ 同じサービスを使う:
  開発: PostgreSQL (Docker), S3 (LocalStack), SES (MailHog)
  本番: PostgreSQL (RDS), S3, SES

Docker Compose で本番に近い開発環境

services:
  app:
    build: .
    environment:
      DATABASE_URL: postgresql://admin:secret@db:5432/myapp
      AWS_ENDPOINT: http://localstack:4566
  db:
    image: postgres:16
  localstack:
    image: localstack/localstack
    environment:
      SERVICES: s3,dynamodb,sqs

SAM Local

# Lambda をローカルで実行 (本番と同じランタイム)
sam local invoke MyFunction --event event.json

# API Gateway をローカルで起動
sam local start-api

環境変数で差異を吸収

// 環境変数で接続先を切り替え (コードは同一)
const endpoint = process.env.DYNAMODB_ENDPOINT; // ローカル: http://localhost:8000
const client = new DynamoDBClient(endpoint ? { endpoint } : {});

環境ごとの設定

設定 dev prod
ログレベル DEBUG WARN
キャッシュ 無効 有効
DynamoDB オンデマンド オンデマンド
CloudFront キャッシュ 無効 有効

コードは同一、設定のみ環境変数で切り替える。

開発/本番一致の関連書籍も参考になる。

関連用語