FastAPI アプリケーションは pydantic-settings (BaseSettings) を使用して設定を管理します。これは 環境変数 (および .env ファイル) から設定を読み込むクラスで、検証と型変換 を行い、シークレットをコードの外に保ち、起動時に設定が正しいことを保証します。
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
app_name: str = "My API"
database_url: str # required — must be provided
secret_key: str # required (a secret)
debug: bool = False
max_connections: int = 10
class Config:
env_file = ".env" # also read from a .env file
settings = Settings() # reads & VALIDATES env vars at startup
BaseSettings は各フィールドを対応する 環境変数 (例えば DATABASE_URL) から自動的に読み込み、型を変換し ("true" → bool、"10" → int)、検証 します。必須値が不足していたり型が間違っていたりすると、起動時に即座に失敗し、明確なエラーが表示されます (fail-fast)。
from functools import lru_cache
from fastapi import Depends
@lru_cache # create the Settings once (cached)
def get_settings():
return Settings()
@app.get("/info")
def info(settings: Settings = Depends(get_settings)):
return {"app": settings.app_name, "debug": settings.debug}
キャッシュされた依存性経由で設定を注入すると、テスト可能 (テストでオーバーライド可能) になり、単一インスタンスが保証されます。
# .env — local config, GITIGNORED (never commit secrets)
DATABASE_URL=postgresql://localhost/mydb
SECRET_KEY=dev-secret
DEBUG=true
✓ Keep secrets in env vars / .env (gitignored); commit a .env.example documenting keys
✓ In production, inject config via the platform's environment / secret manager
✓ Validation at startup catches misconfiguration immediately (not deep in a request)
適切な設定管理は 運用上の必要性 (アプリケーションは開発/ステージング/本番環境で異なる設定が必要) であり、同時に セキュリティ要件 (データベース URL やキーなどのシークレットをソースコントロールにハードコードしてはいけません。これは一般的で深刻な侵害です) です。
Pydantic の BaseSettings は FastAPI の慣用的なソリューションを提供し、これを理解することは毎日の重要な知識です。
主な利点: 環境変数 から設定を読み込む (シークレットをコードの外に保つ、twelve-factor アプローチ) こと、自動的な 型変換と検証 により、設定ミスが起動時に素早く失敗し、実行時の困惑するような障害ではなく明確なエラーが表示されることです。
依存性注入 (設定をテスト可能でシングルトンにする) とローカル開発用の .env ファイルを git で無視する慣行と組み合わせることで、安全で検証された環境に適した設定が実現します。
設定を定義し、依存性注入経由で使用し、シークレットを安全に処理する方法を理解することは、本番環境に対応した FastAPI アプリケーションを構築するための基本です。