【Django】django-environで環境変数を扱う

DjangoでWebアプリケーションを作成し、いざ本番環境に上げる際に設定は重要な要素です。
開発環境とは違い、重要な情報はなるべく秘匿したいですよね。

今回はそれに便利なDjangoパッケージであるdjango-environについて解説していきます。

【Django】django-environで環境変数を扱う

django-environは何をしてくれるのか

このパッケージの利点は大きく2つだと考えています。

  1. 環境変数を導入できる
  2. 開発と本番で設定の切り替えが容易になる

①環境変数を導入できる

Djangoの設定情報であるsettings.pyファイルの中身を、
環境変数として別ファイルで扱うことができます。

上記画像のように「.env」ファイルを参照してくれます。
settings.pyに重要な情報をハードコーディングする必要がなく、セキュリティが向上します。

②開発と本番で設定の切り替えが容易になる

Webアプリケーションを本番にアップロードする場合、Gitのような同期ツールを使用すると思います。
その際にも、django-environは威力を発揮します。

上記のように、開発用の.envファイルと本番用の.envファイルを用意しておけば、settings.pyファイルは同期することができます。
共通部分は同期できるので、管理の負担が減るのが良いですね。

django-environの利点が分かったところで、このパッケージを導入し、設定を行っていきましょう。

django-environを導入する

①pip経由でインストール

おなじみのpipを用いてインストールします。コマンドは以下の通りです。

pip install django-environ

開発、本番それぞれの環境でインストールが必要です。

②.envファイルを作成する

Djangoの実行ファイルである「manage.py」と同フォルダ内に配置してください。
ファイルの中には、秘匿したい情報を記載します。一例を示します。

.env
記入する情報は秘匿したい情報が主です。SECRET_KEYなどは代表ですね。
また上記は開発用ですのでDEBUGはTrueにしてあります。本番ではFalseにしてください。

さて、DATABASE_URLですが、django-environはこの文字列を分解してDB情報を参照してくれます。
対応は以下の通りになっています。

DATABASE_URL=[データベースエンジン]://[ユーザー名]:[パスワード]@[ホスト名]:[ポート番号]/[データベース名]

それぞれ元のsettings.pyを参照すればDATABASE_URL作成は容易だと思います。

あとは開発と本番で異なる情報を記載していくと良いでしょう。
例えば、私は上記以外にも「ALLOWED_HOST」やURLが一部変更されるため「STATIC_URL」、「MEDIA_URL」などを記載しています。

また、ソースコードをGitで管理している場合は、この.envファイルは同期の対象外にするようにして下さい。
開発と本番でこのファイルだけは同じではないということです。

③settings.pyに参照を記載する

.envファイルが作成できたので、このファイルを参照するようにsettings.pyを修正しましょう。
以下のように変更できます。

settings.py
ファイルの上の方でenvironをimport宣言すれば使用可能です。

あとは簡単で、.envファイルを読み込むようにして、それぞれの設定値に.envのファイルで使用した環境変数名を宛がっています。

DATABASESのみ少し注意が必要で、「db()」をつけることでDATABASE_URLの文字列をdjango-environが分解してくれます。

書き方さえ合っていれば環境変数はいくつでも指定可能です。私はALLOWED_HOSTやSTATIC_URLなども参照するようにしています。

おわりに

Djangoには便利なパッケージが多く、このdjango-environも外せない一つですね。
セキュリティも向上し、管理も楽になるなら、導入しない理由はないとも言えます。

Webアプリケーション開発をしている方は、ぜひとも導入を検討してみてください!