第51回: .envによる環境変数管理 — 設定値を「コードの外」に出してセキュアに管理する

章: 第6章: パフォーマンスとインフラ

DBのパスワードやAPIキーをソースコードに直書きしていませんか?

ハードコードされた認証情報がGitにコミットされると、リポジトリが公開された瞬間に漏洩します。.envファイルを使って設定値をコードから切り離すことで、環境ごとに異なる値を安全に管理できます。

設定値をコードに埋め込むと何が起きるか

本番用DBパスワードが開発用リポジトリに含まれていたことで情報漏洩——実際に起きているインシデントです。.env をGitignoreに追加し、.env.example でテンプレートだけ管理するのが標準的なアプローチです。

環境変数管理の比較

方法 セキュリティ チーム共有 環境別管理
ソースコードに直書き 危険(Git漏洩リスク) 不要 困難
.env(.gitignore) 安全 .env.example で共有 環境ごとに別ファイル
シークレット管理サービス(AWS SSM等) 最高 アクセス制御で管理 環境別に厳密管理
Dockerのenv_file 安全 Compose設定で管理 Compose環境別

チェックポイント: .env は必ず .gitignore に追加されているか確認しましょう。また .env.example にはキー名と説明のみを記載し、実際の値は含めないようにします。本番環境では .env より環境変数やシークレット管理サービスの利用を推奨します。

コードサンプル


# .env(.gitignoreに必ず追加)
# APP_ENV=local
# APP_KEY=base64:xxxxx
# DB_HOST=127.0.0.1
# DB_DATABASE=myapp
# DB_USERNAME=root
# DB_PASSWORD=secret
# STRIPE_SECRET=sk_test_xxxx

# .env.example(チームに共有するテンプレート)
# DB_PASSWORD=

<?php
// PHPから読む
$host = $_ENV['DB_HOST'] ?? '127.0.0.1';

まとめ & 次のステップ

  • .env で設定値をコードから切り離し、環境ごとに安全に管理できます
  • .env は必ず .gitignore に追加し、Gitにコミットしないようにしましょう
  • .env.example でキー名のみをバージョン管理し、チームで共有しましょう
  • 本番環境ではAWS SSM / GCP Secret Managerなどのシークレット管理サービスを検討してください
  • Laravelでは config() ヘルパーを介して環境変数を読み込み、直接 $_ENV を使わないようにしましょう

次回は CI/CD入門(GitHub Actions) を学びます。コードの変更を自動でテスト・検証する仕組みを整理しましょう。

Related Articles