YAML配列・リストのENV形式への変換
YAML配列を環境変数に変換するさまざまな戦略を学びます。インデックス付きキー、カンマ区切り値、JSONエンコード配列パターンを解説します。
YAML to ENV
詳細な説明
YAML配列は、ENV形式に変換する際に特有の課題があります。環境変数は順序付きリストの概念を持たないシンプルなキーバリュー文字列だからです。いくつかの戦略があり、それぞれにトレードオフがあります。
配列を含むYAMLファイル:
app:
name: MyService
ports:
- 3000
- 3001
- 3002
allowed_hosts:
- localhost
- example.com
- "*.staging.example.com"
cors:
origins:
- https://app.example.com
- https://admin.example.com
methods:
- GET
- POST
- PUT
- DELETE
戦略1:インデックス付きキー
APP_NAME=MyService
APP_PORTS_0=3000
APP_PORTS_1=3001
APP_PORTS_2=3002
APP_ALLOWED_HOSTS_0=localhost
APP_ALLOWED_HOSTS_1=example.com
APP_ALLOWED_HOSTS_2=*.staging.example.com
APP_CORS_ORIGINS_0=https://app.example.com
APP_CORS_ORIGINS_1=https://admin.example.com
APP_CORS_METHODS_0=GET
APP_CORS_METHODS_1=POST
APP_CORS_METHODS_2=PUT
APP_CORS_METHODS_3=DELETE
戦略2:カンマ区切り値
APP_NAME=MyService
APP_PORTS=3000,3001,3002
APP_ALLOWED_HOSTS=localhost,example.com,*.staging.example.com
APP_CORS_ORIGINS=https://app.example.com,https://admin.example.com
APP_CORS_METHODS=GET,POST,PUT,DELETE
戦略3:JSONエンコード値
APP_NAME=MyService
APP_PORTS='[3000,3001,3002]'
APP_ALLOWED_HOSTS='["localhost","example.com","*.staging.example.com"]'
APP_CORS_ORIGINS='["https://app.example.com","https://admin.example.com"]'
APP_CORS_METHODS='["GET","POST","PUT","DELETE"]'
戦略の比較:
| 戦略 | 利点 | 欠点 |
|---|---|---|
| インデックス付きキー | 曖昧さがなく、要素の追加が容易 | 冗長で、要素数を知る必要がある |
| カンマ区切り | コンパクトで、広くサポートされている | 値にカンマを含められない |
| JSONエンコード | あらゆる値に対応、型安全 | JSONパースが必要、可読性が低い |
どれを選ぶか:
- 使用するフレームワークがサポートしている場合はインデックス付きキーを使用(例:Spring Boot、ASP.NET Core)。
- 値にカンマが含まれない単純な文字列リストにはカンマ区切りを使用。
- 値が複雑な場合や型保持が必要な場合はJSONエンコードを使用。
ほとんどのYAML-to-ENVコンバーターはシンプルさからカンマ区切りをデフォルトにしていますが、ターゲットランタイムとの互換性を確認すべきです。
ユースケース
複数のCORSオリジン、許可IPアドレス、フィーチャーフラグを含むYAML設定を、起動時にそれらをパースするNode.jsアプリケーション向けの環境変数に変換する場合。