Day9:環境変数と設定管理 前半
テーマ:.env を使って「環境ごとの差」を吸収し、どこでも同じアプリを動かせるようにする
Day9 の前半では、Docker 実務で必須となる
環境変数(Environment Variables)
と
.env ファイルによる設定管理
を、初心者でも迷わず理解できるように丁寧に解説します。
今日のゴールは、
「開発・テスト・本番で設定を変えても、アプリ本体は同じまま動く」
という状態を作れるようになることです。
環境変数とは何か
アプリに“外から設定を渡す”ための仕組み
環境変数は、アプリのコードに直接書かずに
外部から設定値を注入するための仕組み です。
例:
- DB のパスワード
- API の URL
- ポート番号
- 本番か開発かのモード
これらをコードに直書きすると危険で、変更も面倒です。
そこで環境変数を使います。
.env ファイルとは何か
環境変数をまとめて管理する“設定ファイル”
.env は、環境変数を次のように書くファイルです。
DB_HOST=db
DB_USER=user
DB_PASSWORD=secret
DB_NAME=myapp
このファイルを Docker やアプリが読み込むことで、
設定を外部から注入できる ようになります。
なぜ .env が必要なのか(重要ポイント)
コードにパスワードを書かないため
悪い例:
const password = "secret";
JavaScriptこれは GitHub に上げた瞬間に 情報漏洩 です。
開発・本番で設定を変えたいから
開発では:
DB_HOST=localhost
本番では:
DB_HOST=db.internal
でも、アプリのコードは一切変更しない。
これが 環境差異の吸収 です。
チーム全員が同じ設定を再現できる
.env.example を共有すれば、
誰でも同じ環境を作れます。
Docker と環境変数の関係
Docker は環境変数を簡単に扱える
Docker では、次のように環境変数を渡せます。
docker run -e DB_HOST=db -e DB_USER=user myapp
しかし、毎回これを書くのは面倒なので .env を使います。
Docker Compose と .env の組み合わせ
Compose は .env を自動で読み込む
docker-compose.yml:
services:
api:
image: myapp
environment:
DB_HOST: ${DB_HOST}
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
YAML.env:
DB_HOST=db
DB_USER=user
DB_PASSWORD=secret
Compose は ${DB_HOST} の部分を
.env の値で置き換えてくれます。
DB 接続設定を環境変数で管理する例
Node.js の例:
const mysql = require("mysql2");
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
JavaScriptポイント:
- コードにはパスワードを書かない
- すべて process.env から読み込む
- 開発・本番で .env を変えるだけで動く
これが 環境差異を吸収する ということです。
前半まとめ
あなたがここまで理解できていれば、Day9 前半はクリアです。
- 環境変数は「外から設定を渡す仕組み」
- .env は環境変数をまとめて管理するファイル
- DB 接続設定は必ず環境変数で管理する
- コードにパスワードを書かない
- Docker Compose は .env を自動で読み込む
- 開発・本番で設定を変えてもコードは同じまま
