タイトル: Dotenv values containing spaces must be surrounded by quotes.
SEOタイトル: Laravel「Dotenv values containing spaces must be surrounded
| この記事の要点 |
|
エラー内容
Laravel アプリを起動・実行時(php artisan serve や Web リクエスト時)に以下が発生:
RuntimeException
Dotenv values containing spaces must be surrounded by quotes.
at vendor/vlucas/phpdotenv/src/Loader/Parser.php:nnn
原因
.env ファイルで値にスペースを含むテキストをクォートなしで書いているのが原因:
# ❌ NG: スペースを含むのにクォートが無い
APP_NAME=My Awesome App
MAIL_FROM_NAME=Customer Support
# ❌ NG: クォートのバランスが崩れている
APP_NAME="My App
# ❌ NG: シングルクォートとダブルクォートの混在
APP_NAME='My App"
対処
スペースを含む値はダブルクォートで囲む:
# ✅ OK: ダブルクォートで囲む
APP_NAME="My Awesome App"
MAIL_FROM_NAME="Customer Support"
APP_TIMEZONE="Asia/Tokyo"
APP_DESCRIPTION="サービスの説明文 ← 日本語スペースなくても安全のためクォート推奨"
# ✅ OK: スペースが無い値はクォート不要
APP_ENV=production
APP_DEBUG=false
DB_HOST=127.0.0.1
変更後は config:clear
.env はキャッシュされるため、修正後はキャッシュをクリアします:
php artisan config:clear
# 全部消したいとき
php artisan optimize:clear
# 本番では逆に config:cache でキャッシュを再生成
php artisan config:cache
シングルクォート vs ダブルクォート
| ダブルクォート "" | シングルクォート '' | |
|---|---|---|
| 変数展開 | ○ ${APP_NAME} が展開される | × リテラル文字列 |
| エスケープ | \n や \" が有効 | すべてそのまま |
| 用途 | 動的な値、他の変数を含む | 固定文字列、パスワード等 |
# 変数展開の例
APP_URL=https://example.com
APP_ASSET_URL="${APP_URL}/assets" # → https://example.com/assets
# シングルクォートだと展開されない
APP_BAD='${APP_URL}/assets' # → ${APP_URL}/assets (リテラル)
クォートが必要なケース
- スペース:
APP_NAME="My App" - # (コメント記号):
PASSWORD="abc#123"(クォートなしだとabcまでしか読まれない) - $ (変数展開): 展開させたくない場合は
'を使う - =(イコール):
DB_PASSWORD="a=b=c" - 日本語: 一般的には不要だが、文字化け対策で囲むのが無難
複数行・改行を含めたい場合
.env での改行サポートはバージョン依存。Laravel 8 以降は " 内での改行を改行として扱う:
# Laravel 8+ で動作(.env 内に直接改行)
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIIE...
-----END PRIVATE KEY-----"
# 互換性重視: 改行を \n でエスケープ
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
config('xxx') 経由で取得
.env 値を直接 env('APP_NAME') で取らずに、config/app.php 経由で config('app.name') を使うのが Laravel 流:
// config/app.php
'name' => env('APP_NAME', 'Laravel'), // .env が無いとデフォルト
// 各所で
config('app.name'); // 推奨
env('APP_NAME'); // 非推奨(config 外では空になる場合あり)
本番環境で php artisan config:cache を実行すると env() はconfig 外では null を返すようになります(仕様)。config 経由が安全。
関連エラー
- "Failed to parse dotenv file" — 構文エラー全般。クォートのバランス・改行コードを確認
- "Encryption key (APP_KEY) not specified" —
APP_KEY=が空 →php artisan key:generate - 「設定値が反映されない」 — config キャッシュ →
php artisan config:clear - ".env のキー名に小文字が混在」 — Dotenv は大文字のみを推奨(小文字キーは警告またはエラー)
予防
- .env.example を必ずバージョン管理して、新メンバーがコピー → 設定変更だけで動かせるように
- .env は
.gitignoreに必ず登録(機密情報のため) - 本番デプロイ時は CI/CD で .env を安全に注入(GitHub Actions Secrets / AWS SSM 等)
- パスワードに #(シャープ)を含めないのが安全(バリデーション側に制約をかける)