.env
ファイルの代わりにJSONを使って環境変数を設定します。
JSON schemaによるバリデーションにより、環境変数の型安全性を確保します。
.env
からJSONフォーマットへの移行ツールcomposer require koriym/env-json
// 環境変数の読み込みとバリデーション
$env = (new EnvJson())->load(__DIR__);
// オブジェクトプロパティとしてアクセス
echo $env->DATABASE_URL;
// または従来のgetenv()を使用
echo getenv('DATABASE_URL');
型、説明、制約条件付きで環境変数を定義します:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [
"DATABASE_URL", "API_KEY"
],
"properties": {
"DATABASE_URL": {
"description": "データベース接続文字列",
"type": "string",
"pattern": "^mysql://.*"
},
"API_KEY": {
"description": "外部APIの認証キー",
"type": "string",
"minLength": 32
},
"DEBUG_MODE": {
"description": "デバッグ出力を有効にする",
"type": "boolean",
"default": false
}
}
}
実際の設定値:
{
"$schema": "./env.schema.json",
"DATABASE_URL": "mysql://user:pass@localhost/mydb",
"API_KEY": "1234567890abcdef1234567890abcdef",
"DEBUG_MODE": true
}
env.schema.json
で定義env.dist.json
に定義(gitリポジトリにコミット可能)env.json
に定義(.gitignore
に追加)env.json
を読み込みenv.json
が存在しない場合、env.dist.json
にフォールバックenv.dist.json
を削除(本番では不要)env.json
は含めない(.gitignore
に追加済み)既存の.env
ファイルをJSON形式に変換:
bin/ini2json .env
これによりenv.schema.json
とenv.dist.json
の両方が生成されます。
envjson
コマンドラインツールは様々な環境との連携をサポートします:
# 現在のシェルに変数を読み込む
source <(bin/envjson)
# カスタムディレクトリを指定
source <(bin/envjson -d ./config)
# PHP-FPM形式で出力: env[FOO] = "foo1"
bin/envjson -d ./config -o fpm > .env.fpm
# INI形式で出力: FOO="foo1"
bin/envjson -d ./config -o ini > env.ini
# シェル形式で出力: export FOO="foo1"
bin/envjson -d ./config -o shell > env.sh
-d --dir=DIR envファイルを含むディレクトリ(デフォルト: カレントディレクトリ)
-f --file=FILE 読み込むJSONファイル名(デフォルト: env.json)
-o --output=FMT 出力形式: shell, fpm, ini(デフォルト: shell)
-v --verbose 詳細メッセージを表示
-q --quiet 警告メッセージを抑制
-h --help ヘルプメッセージを表示