Django Settings.pyを分割する方法

Djangoではプロジェクト作成時にsettings.pyという設定ファイルが作成されます。

このファイルを開発環境用、ステージング環境用、プロダクション環境用の様に環境に応じてに使い分けたい場合があります。

今回はファイルを分割してsettings.pyを環境ごとに使い分ける方法を紹介します。

プロジェクト作成

mysiteというプロジェクトを作成します。

django-admin startproject mysite

settingsフォルダをmysite直下に作成します。settings.pyをbase.pyにリネームしてsettingsフォルダに移動します。

同じディレクトリにdevelop.py, staging.py, production.pyも作成します。

この時点でディレクトリ構造は以下の様になります。

各ファイルの用途は以下の通りです。

  • base.py 設定の元となるファイル
  • develop.py 開発環境用
  • staging.py ステージング環境用
  • production.py 本番環境用

ファイル編集

base.py編集

base.pyをsettingsフォルダ内に移動したのでBASE_DIRを変更します。

BASE_DIR = Path(__file__).resolve().parent.parent.parent

develop.py, staging.py, production.py編集

develop.pyやstaging.py、production.pyの編集方法は同じです。

1行目でbase.pyの設定を全て読み込んでいます。以降は環境に応じて追加したい設定や、変更したい設定を追記すれば良いです。

from mysite.settings.base import *

DEBUG = True

環境変数設定

DJANGO_SETTINGS_MODULEという環境変数を設定します。この変数を使って読み込む設定ファイルを指定できます。

manage.pyやwsgi.pyには

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘mysite.settings’)

というコードがあります。このコードでDJANGO_SETTINGS_MODULEを読み込んでいます。

環境変数の設定方法はOSによって異なります。ご利用のOSに応じて設定してください。

例えばlinuxやmacOSの場合はexportコマンドで設定できます。次のコマンドはdevelop環境用の設定ファイルを指定しています。

export DJANGO_SETTINGS_MODULE=mysite.settings.develop

この環境変数が設定されていなかったり、間違っている状態でrunserverを実行するとModuleNotFoundErrorが発生します。

ファイル分割以外の方法

設定ファイルを分ける方法以外にも環境変数を使う方法や、python-decoupleやdjango-environというモジュールを使う方法もあります。私は今回のファイルを分割する方法と、python-decoupleを使って開発した事があります。

セキュリティー上コードに書きたくない設定がある場合はモジュールを使う方法が適しています。

django-environの使い方はDjango python-environ を使って設定を分離する方法で解説しています。

python-decoupleの使い方はDjango python-decoupleを使って設定を分離する方法で解説しています。

どちらモジュールも大差はありませんがgithubのStarの数を比較するとdjango-environの方が人気です。

Star数(2021年8月時点)

python-decouple 1.8k
django-environ 2.3k

まとめ

今回は環境毎に設定ファイルを分ける方法を紹介しました。

DJANGO_SETTINGS_MODULEという環境変数を使って読み込む設定ファイルを指定します。

環境変数は開発現場でよく使われます。使い慣れていない場合はこれを機に覚えましょう。

スポンサーリンク
スポンサーリンク