Djangoで各環境ごとの設定を行う

背景

Djangoでアプリケーションを開発するための準備として情報をいろいろ集めています。

アプリケーションを稼働させる環境として、ローカルの開発環境(development)とステージング環境(staging)と本番環境(production)があります。

Djangoではどのように環境ごとの設定をするのだろう?と思ったので調べてみることにしました。

Railsの場合

RailsではRAILS_ENVという環境変数があり、RAILS_ENVに環境名を設定します。また、設定ファイルはRAILS_ENVで設定した環境名により、設定値が変えられるようになっています。また、そういった環境ごとで設定を分けるのをサポートしてくれるgemもあります。アプリケーションもサポートしてくれていますし、それをサポートするgemもあるのはすばらしいですね。

Djangoの場合

調べてみてもあまり情報は出てきませんでした。Railsよりは情報量が多くなかったです。

困っていたところ、この前購入した実践Django Pythonによる本格Webアプリケーション開発9.9 設定ファイルの分割にその方法が載っていることに気づきました。

DjangoではDJANGO_SETTGINS_MODULEという環境変数に、設定ファイル(デフォルトでsettings.py)を指定することで、環境ごとの設定を行うことができそうです。

以下のような感じで行います。

1
$ DJANGO_SETTING_MODULE=project.production_settings python manage.py runserver

Railsでは環境名でしたが、Djangoでは設定ファイル自体を指定するようですね。環境名ではなく設定ファイルなので、設定をそのファイルにすべて記載しないといけなさそうで、だいぶ大きくなってしまうイメージがありますが、実際に実装していってからその問題にあたったら考えたいと思います。

ちなみに、--settingsオプションでも指定できるようです。

1
$ python manage.py runserver --settings=project.production_settings

コンテナの利用の際などは環境変数を渡すことが多いと思いますので、環境変数の方を利用するということで大丈夫かと思います。

まとめ

Webアプリケーションフレームワークでは環境ごとの設定をサポートしているものがほとんどだと思います。Djangoでのサポート方法を調べてみました。

実際に設定ファイルを書いてみて問題が出てきたらまた共有したいと思います。

参考図書