pydantic-settings
作成日: 2026/06/02
最終更新日: 2026/06/02
動機
公式ドキュメント
どんなものか
環境変数や .env を型安全に扱うためのライブラリ。
環境変数をPythonのオブジェクトとして扱える
環境変数から自動で値を読み込み、型変換・バリデーションをしてくれる
環境変数はファイルから読み込むこともできるし、OSに設定済みの環境変数から読み込むこともできる
読み込みの優先順位は以下
環境変数
.env ファイル
デフォルト値
Django だけではなく FastAPI や通常の Python アプリケーションでも使える
よさみ
定義・設定を一箇所に集約・一覧できる
期待する型、デフォルト値も含め
ここさえ見れば、何を環境変数から読み込むよねー・使ってるよねー・期待する型はこれだよねーがわかる
型変換・バリデーションしてくれる
挙動をSettingsConfigDictで調整できる
env_file はこれだよー
BaseSettingsを継承した構成クラスに未定義の環境変数があったら無視する/エラーにする..
などなど
私の使い方 (ローカル)
ローカル環境では .env に環境変数を定義
AWS環境上ではSecret Manager にすると思う
code:env
POSTGRES_DB=my_db
POSTGRES_SCHEMA=my_schema
POSTGRES_USER=my_user
POSTGRES_PASSWORD=my_user_pass
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_HOST_PORT=5432
Docker Compose 経由でコンテナに環境変数を渡す
code:yaml
# ...
env_file:
- .env
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_SCHEMA: ${POSTGRES_SCHEMA}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
構成クラスを定義
code:python
# backend/config/env.py
from pydantic_settings import BaseSettings, SettingsConfigDict
class EnvSettings(BaseSettings):
# 環境変数は Docker Compose から渡す。
# Django 側で使わない環境変数が混ざっても無視する。
model_config = SettingsConfigDict(extra="ignore")
postgres_db: str
postgres_schema: str
postgres_user: str
postgres_password: str
postgres_host: str
postgres_port: int
env = EnvSettings()
Django の settings で使う
code:python
# backend/config/settings.py
from config.env import env
# ...
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": env.postgres_db,
"USER": env.postgres_user,
"PASSWORD": env.postgres_password,
"HOST": env.postgres_host,
"PORT": env.postgres_port,
"OPTIONS": {
"options": f"-c search_path={env.postgres_schema}",
},
}
}
# ...
感想
まだちょっとしか使っていないけれど、この先も使っていけそう。
Djangoで使っている環境変数と型を一箇所でパッと把握できるのは助かる。