English | 日本語
Swift の環境変数設定を宣言的に扱う。プロパティにキーとデフォルト値を書けば、キー表・デフォルト表・ イニシャライザはマクロが生成する。
Apple の swift-configuration をラップし、設定構造体 から「キー・デフォルト値・代入」の三重の繰り返しを取り除く。
- 宣言的 — 構造体に
@Env、プロパティに@Valueを付けるだけ - 型安全 —
String/Int/Double/BoolとRawRepresentableな enum に対応 - 注入可能 — 生成される
init(config:)がリーダーを受け取るので、テストは自前のものを渡せる - スコープ対応 —
@Env(scope:)が構造体内の全キーにプレフィックスを付ける - コンパイル時生成 — 実行時のリフレクションは使わない
採用前に知っておくべき挙動が 2 つある。値が読まれるのは init(config:) の一度だけで、生成済みの
インスタンスがあとからの環境変数の変更を見ることはない。そして値が未設定の場合も変換できない場合も、
どちらも黙ってデフォルト値になる — PORT=abc はエラーではなくデフォルト値を返す。
また値は secret 扱いされずに読まれるため、@Value で宣言したものは swift-configuration の
アクセスレポーターによって平文で記録されうる。認証情報は swift-configuration から直接読むこと。
import Configuration
import Env
@Env
struct APIConfig {
@Value("api.base.url", default: "https://api.example.com")
var baseURL: String
@Value("api.timeout", default: 30)
var timeoutSeconds: Int
}
let config = ConfigReader(provider: EnvironmentVariablesProvider())
let api = APIConfig(config: config)
print(api.baseURL) // API_BASE_URL、未設定ならデフォルト値import は両方必要。Env がマクロを、Configuration が生成コードの参照するリーダーとプロバイダの型を
提供する。
API リファレンスとガイド — キーの
命名規則、スコープ付き設定、@EnvGroup による複数構造体の合成。
Package.swift に追加する:
dependencies: [
.package(url: "https://github.com/no-problem-dev/swift-env.git", from: "2.0.0")
]ターゲットにプロダクトを追加する:
.target(
name: "YourTarget",
dependencies: [
.product(name: "Env", package: "swift-env")
]
)MIT — LICENSE を参照。