ファイルフォーマット
env ライブラリは複数の設定ファイルフォーマットをサポートしています:.env、JSON、YAML。
.env フォーマット
基本構文
# コメント
KEY=value
# 値の中に等号を含む場合
URL=https://example.com?foo=bar
# 空行は無視される
# 無効:キーに空白を含めることはできない
# MY KEY=value引用符
# ダブルクォート:空白を保持、エスケープをサポート
MESSAGE="Hello World"
PATH="/usr/local/bin"
# シングルクォート:エスケープを処理しない(バックスラッシュ序列をそのまま保持)
# 注意:シングルクォートは変数展開を阻止しない——展開は引用符が剥がれた後に統一的に行われる
LITERAL='no escaping here: \n stays literal'
# 引用符なし
SIMPLE=value
# 空の値
EMPTY=
EMPTY=""
EMPTY=''エスケープ文字
ダブルクォート内でエスケープをサポート:
# 改行
MULTILINE="line1\nline2"
# タブ
TABBED="col1\tcol2"
# 引用符
QUOTED="He said \"Hello\""
# バックスラッシュ
PATH="C:\\Users\\name"
# ドル記号
PRICE="Price: \$100"変数展開
ExpandVariables を有効にするとサポート:
# 他の変数を参照
BASE_URL=https://api.example.com
API_URL=${BASE_URL}/v1
# 簡略構文
URL=$BASE_URL/path
# デフォルト値
HOST=${HOST:-localhost}
PORT=${PORT:-8080}
# ネストされた展開
SERVICE=${CLUSTER:-default}-${REGION:-us-east}export 構文
AllowExportPrefix を有効にするとサポート:
# Bash スタイルのエクスポート
export KEY=value
export ANOTHER="quoted value"YAML スタイル
AllowYamlSyntax を有効にするとサポート:
# YAML スタイルのキーと値のペア
KEY: value
ANOTHER: "quoted value"複数行の値
.env パーサーは行単位でスキャンし、各行を個別に解析します。複数行にまたがる引用符文字列はサポートされていません——ダブルクォート値は 1 行内で閉じる必要があり、そうでない場合は ErrInvalidValue が返されます。改行が必要な場合は \n エスケープを使用してください(ダブルクォート内でのみ有効、シングルクォートはエスケープを処理しません):
# ダブルクォート内の \n は改行文字として解析される
LINES="line1\nline2\nline3"
# 実際の値は 3 行のテキスト: line1 / line2 / line3
# PRIVATE_KEY などの複数行証明書は \n で結合することを推奨
PRIVATE_KEY="-----BEGIN KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n-----END KEY-----"本当にまたがる文字列が必要な場合は、JSON または YAML フォーマットを使用するか、カスタムパーサーで複数行サポートを拡張してください。
JSON フォーマット
基本構造
{
"APP_NAME": "my-app",
"APP_VERSION": "1.0.0",
"DEBUG": true,
"PORT": 8080
}ネストされたオブジェクト
ネストされたオブジェクトはフラット化されます:
{
"database": {
"host": "localhost",
"port": 5432
}
}結果:
DATABASE_HOST=localhost
DATABASE_PORT=5432配列
配列はインデックスキーにフラット化されます:
{
"ALLOWED_HOSTS": ["localhost", "example.com"],
"PORTS": [80, 443, 8080]
}結果:
ALLOWED_HOSTS_0=localhost
ALLOWED_HOSTS_1=example.com
PORTS_0=80
PORTS_1=443
PORTS_2=8080配列要素へのアクセス
GetSlice[T] 関数またはドットパスを使用してインデックスキーにアクセスします:
hosts := env.GetSlice[string]("ALLOWED_HOSTS")
port0 := env.GetInt("PORTS_0") // 80詳細は GetSlice ドキュメントを参照してください。
型変換オプション
cfg := env.DefaultConfig()
// null を空文字列に変換
cfg.JSONNullAsEmpty = true
// 数値を文字列に変換
cfg.JSONNumberAsString = true
// ブール値を文字列に変換
cfg.JSONBoolAsString = true深さ制限
cfg.JSONMaxDepth = 10 // 最大ネスト深度YAML フォーマット
基本構造
APP_NAME: my-app
APP_VERSION: "1.0.0"
DEBUG: true
PORT: 8080ネストされた構造
database:
host: localhost
port: 5432
credentials:
user: admin
password: secretフラット化結果:
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_CREDENTIALS_USER=admin
DATABASE_CREDENTIALS_PASSWORD=secretリスト
リストはインデックスキーにフラット化されます:
allowed_hosts:
- localhost
- example.com
- api.example.com結果:
ALLOWED_HOSTS_0=localhost
ALLOWED_HOSTS_1=example.com
ALLOWED_HOSTS_2=api.example.com複数行文字列
注意
YAML ブロックスカラー(リテラルブロック | とフォールドブロック >)は現在サポートされていません。パーサーは |/> を通常のスカラー文字として保存し、後続のインデント行はキーと値の解析を壊します。
改行を保持する必要がある値は、ダブルクォートと \n エスケープを使用してください:
description: "Line1\nLine2\nLine3"またはカスタムパーサーでブロックスカラーのサポートを拡張してください。
型変換オプション
cfg := env.DefaultConfig()
cfg.YAMLNullAsEmpty = true
cfg.YAMLNumberAsString = true
cfg.YAMLBoolAsString = true
cfg.YAMLMaxDepth = 10フォーマット検出
自動検出
// 拡張子に基づいて検出
format := env.DetectFormat("config.json") // FormatJSON
format = env.DetectFormat("settings.yaml") // FormatYAML
format = env.DetectFormat(".env") // FormatEnv
// 一致する拡張子がない場合は FormatAuto を返す(デフォルトで .env パーサーを使用)
format = env.DetectFormat("config") // FormatAutoフォーマット定数
const (
FormatAuto FileFormat = iota // 自動検出
FormatEnv // .env フォーマット
FormatJSON // JSON フォーマット
FormatYAML // YAML フォーマット
)フォーマット文字列
format := env.FormatJSON
fmt.Println(format.String()) // 出力:jsonベストプラクティス
フォーマットの選択
| シナリオ | 推奨フォーマット |
|---|---|
| シンプルな設定 | .env |
| 複雑なネスト設定 | JSON または YAML |
| 他のツールと共有 | JSON |
| 人間の可読性を優先 | YAML |
| Docker/K8s 環境 | .env |
ファイル命名
.env # デフォルト設定
.env.local # ローカルオーバーライド(コミットしない)
.env.development # 開発環境
.env.staging # ステージング環境
.env.production # 本番環境
.env.test # テスト環境組み合わせて使用
// 異なるフォーマットを混合して使用可能
loader.LoadFiles(
"base.env", // 基本設定
"database.json", // データベース設定
"secrets.yaml", // 機密設定
".env.local", // ローカルオーバーライド
)Git で無視
# 機密設定を無視
.env.local
.env.*.local
.env.production
secrets.yaml
# テンプレートを保持
!.env.example関連ドキュメント
- 多フォーマット設定 - 多フォーマット読み込みガイド
- ComponentFactory API - DetectFormat 関数リファレンス
- Config API - JSON/YAML 解析オプション