Flask の設定管理と環境変数

Flask アプリケーションの設定は app.config オブジェクトで管理する。開発・本番・テストなど環境ごとに異なる設定を使い分けるには、環境変数や設定ファイルを活用する。

直接設定する

最もシンプルな方法は、app.config に直接値を設定することである。

from flask import Flask

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'my-secret-key'

辞書のように扱えるが、キーはすべて大文字にする慣習がある。

設定ファイルから読み込む

Python ファイルを設定ファイルとして読み込める。

# config.py
DEBUG = True
SECRET_KEY = 'my-secret-key'
DATABASE_URI = 'sqlite:///app.db'
app.config.from_pyfile('config.py')

クラスベースの設定

環境ごとの設定をクラスで管理すると、継承により共通設定を再利用できる。

# config.py
class Config:
    SECRET_KEY = 'default-secret'

class DevelopmentConfig(Config):
    DEBUG = True
    DATABASE_URI = 'sqlite:///dev.db'

class ProductionConfig(Config):
    DEBUG = False
    DATABASE_URI = 'postgresql://...'
app.config.from_object('config.DevelopmentConfig')

環境変数からの読み込み

機密情報は環境変数から取得するのが安全である。

import os

app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'fallback-key')
app.config['DATABASE_URI'] = os.environ.get('DATABASE_URI')

.env ファイルを使う場合は python-dotenv パッケージを利用する。

from dotenv import load_dotenv
load_dotenv()

主要な設定項目

DEBUGデバッグモードの有効化
SECRET_KEYセッションや署名に使う秘密鍵
TESTINGテストモードの有効化
SERVER_NAMEサーバーのホスト名とポート

SECRET_KEY は本番環境では十分にランダムで長い値を設定すること。Git リポジトリにはコミットせず、環境変数で管理するのが安全である。