Docker | 2週間で実務レベルに到達するDocker学習:環境変数と設定管理 - Day9

Docker Docker
スポンサーリンク

Day9:環境変数と設定管理 中盤

テーマ:.env を“実務レベル”で使いこなし、環境差異を完全に吸収できるアプリ構成を作る

中盤では、前半で学んだ
「環境変数とは何か」「.env の役割」
をさらに深掘りし、実務で必須となる

  • .env の正しい作り方
  • .env.example の重要性
  • Docker Compose との連携
  • セキュリティ上の注意点
  • 開発・本番で設定を切り替える方法

を、初心者でも迷わず理解できるように解説します。


.env を“正しく設計する”ことが環境差異吸収の第一歩

.env は「設定の辞書」

アプリが動くために必要な設定を、
すべて .env に集約する のが実務の基本です。

例:

APP_ENV=development
APP_PORT=3000

DB_HOST=db
DB_USER=user
DB_PASSWORD=secret
DB_NAME=myapp

重要ポイント

アプリ本体は 環境変数しか参照しない ようにします。

これにより:

  • 開発 → .env.dev
  • テスト → .env.test
  • 本番 → .env.prod

と切り替えるだけで、
同じアプリがどの環境でも動く ようになります。


.env.example を作る理由を深掘りする

.env は Git に含めてはいけない

理由:パスワードや秘密情報が入るため。

しかし .env がないと、他の開発者は動かせません。

そこで .env.example を作ります。

.env.example の例

APP_ENV=development
APP_PORT=3000

DB_HOST=db
DB_USER=user
DB_PASSWORD=your_password_here
DB_NAME=myapp

これが実務で必須な理由

  • チーム全員が同じ設定項目を共有できる
  • 新メンバーがすぐ環境構築できる
  • 本番の秘密情報は漏れない

.env.exampleプロジェクトの説明書 の一部です。


Docker Compose と .env の連携を深掘りする

Compose は .env を自動で読み込む

docker-compose.yml:

services:
  api:
    image: myapp
    environment:
      APP_ENV: ${APP_ENV}
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_NAME: ${DB_NAME}
YAML

.env:

APP_ENV=development
DB_HOST=db
DB_USER=user
DB_PASSWORD=secret
DB_NAME=myapp

Compose は ${DB_HOST}.env の値で置き換えます。

つまり

docker compose up するだけで、環境変数が自動で注入される。


DB 接続設定を環境変数で管理する“実務例”

Node.js の例:

const config = {
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME
};
JavaScript

Python の例:

import os

config = {
    "host": os.getenv("DB_HOST"),
    "user": os.getenv("DB_USER"),
    "password": os.getenv("DB_PASSWORD"),
    "database": os.getenv("DB_NAME")
}
Python

重要ポイント

アプリは 環境変数しか参照しない
これにより:

  • 開発 → ローカル DB
  • 本番 → クラウド DB
  • テスト → テスト用 DB

と切り替えても、コードは一切変更不要。


.env を使うと「環境差異」が完全に吸収される

例:開発と本番で DB が違う場合

開発(.env.dev):

DB_HOST=localhost
DB_USER=dev
DB_PASSWORD=devpass

本番(.env.prod):

DB_HOST=prod-db.internal
DB_USER=prod
DB_PASSWORD=supersecret

アプリは同じコードで動く。
違うのは .env の中身だけ

これが Docker と .env の最大の強みです。


セキュリティ上の注意点を深掘りする

.env を Git に絶対入れてはいけない

理由:

  • パスワード
  • APIキー
  • DB接続情報
  • 秘密鍵

これらが漏れると 重大なセキュリティ事故 になります。

.env を守る方法

  • .gitignore.env を追加
  • .env.example を共有
  • 本番の .env はサーバー側で管理
  • Docker Secret や AWS Parameter Store を使う(上級編)

中盤まとめ

あなたがここまで理解できていれば、中盤はクリアです。

  • .env は「設定の辞書」であり、アプリ本体は環境変数だけ参照する
  • .env.example はチーム開発で必須
  • Docker Compose は .env を自動で読み込む
  • DB 接続設定は環境変数で完全に管理する
  • 開発・本番で .env を切り替えるだけで環境差異を吸収できる
  • .env は Git に絶対入れない(セキュリティ上の最重要ポイント)
タイトルとURLをコピーしました