Swift Digest
Blog | Swift.org Blog

Swift Configuration 1.0 リリース

Swift Configuration 1.0 released

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

何が発表されたのか

あらゆるアプリケーションは設定を持ちます。環境変数、設定ファイル、リモートサービスから取得する値、コマンドラインフラグ、API キーのようなシークレットを保管するストアなど、その供給元はさまざまです。これまで Swift では、こうした供給元を個別に手で結線し、パース処理が散在し、アプリケーションコードが特定の設定供給元と密結合してしまいがちでした。

Swift Configuration は、この問題に統一的で型安全なアプローチを持ち込みます。単に設定ファイルを読めるだけでなく、コードが設定にアクセスする方法と、その設定がどこから来るかを切り離す点が特徴です。この分離によって、ライブラリは供給元を指定せずに設定を受け取れるようになり、デプロイ環境をまたいで真に組み合わせ可能になります。

1.0 では API が安定し、今後は後方互換性を保つ形で進化していくことが期待できます。これにより、ライブラリやツールが Swift Configuration を「設定を読むための共通の統合ポイント」として安心して依存できるようになりました。

設定管理が特に複雑になりやすいのはサーバーサイド Swift のエコシステムで、複数のシステムやツールから設定を読み込む場面が多くあります。Swift Configuration はそうした用途で特に力を発揮しますが、コマンドラインツール・GUI アプリケーション・ライブラリなど、柔軟な設定管理が必要なあらゆる場面でも同様に役立ちます。

何に使えるのか

パッケージ依存を追加したあとは、数行のコードで設定値を読み取れます。ConfigReader にプロバイダを渡し、キーと型を指定して値を取得します。

import Configuration

let config = ConfigReader(provider: EnvironmentVariablesProvider())
let timeout = config.int(forKey: "http.timeout", default: 60)

ただし、Swift Configuration の本当の強みは、複数のプロバイダを明確で予測可能な階層に組み合わせられる点にあります。これにより、妥当なデフォルト値を用意しつつ、デプロイのシナリオごとにきれいにオーバーライドできます。

たとえば、デフォルトの設定を JSON ファイルで持っておきます。

{
  "http": {
    "timeout": 30
  }
}

そのうえで、環境変数によるオーバーライドを許したいとします。

# Environment variables:
HTTP_TIMEOUT=15

これら 2 つを「プロバイダ」として重ねます。プロバイダは指定した順にチェックされ、先に書いたプロバイダが後のものをオーバーライドし、最後にフォールバックのデフォルト値が使われます。

let config = ConfigReader(providers: [
    EnvironmentVariablesProvider(),
    try await FileProvider<JSONSnapshot>(filePath: "/etc/config.json")
])
let timeout = config.int(forKey: "http.timeout", default: 60)
print(timeout) // 15

この例では、環境変数プロバイダが JSON ファイルプロバイダより優先されるため、timeout は環境変数の 15 になります。どの設定供給元が実際に使われているのかが曖昧にならない点が利点です。

本番環境向けの機能

基本的な値の読み取りに加えて、本番環境を想定した機能も備えています。

ライブラリやアプリケーションでの利用

Swift Configuration は、利用する側の立場に応じて次のような使い方ができます。

1.0 のリリース以前から、VaporHummingbird などのフレームワーク、Temporal Swift SDK などのプロジェクトが Swift Configuration の採用や実験を始めており、TOML・Vault・AWS 向けのカスタムプロバイダも実験的に登場しています。

導入・今後の位置づけ

API が安定したことで、ライブラリやアプリケーションは Swift Configuration を基盤として、自分自身の設定統合を仕上げ、API 安定版をリリースしていけるようになりました。

導入を始めるには、プロジェクトのドキュメントが参考になります。ハードコードされた値から柔軟なプロバイダ階層へとサンプルサービスを段階的に発展させていく解説として、ServerSide.swift カンファレンス(ロンドン)での講演動画も公開されています。

フィードバックは GitHub リポジトリの issue やプルリクエスト、あるいは Swift Forums を通じて受け付けられています。

関連リンク