章: 第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) を学びます。コードの変更を自動でテスト・検証する仕組みを整理しましょう。