TL;DR
PyCharmではRun/Debug Configurationsの設定と、Virtualenvのactivateスクリプトの両方に開発環境のラベル(dev/stg/prd)を書くと楽。
背景
開発環境は通常マシンごとに
# 開発環境ラベル
export DEPLOY_ENV=<dev/stg/prd>
のように開発環境を記述する環境変数を書き分けると便利だ。だが、PyCharmを用いて開発するときには、楽をしようとするとちょっとややこしい。
課題
PyCharmで開発環境ラベルが必要になる状況は、以下2つのパターンがある。
1. 画面から`Run/Debug`する場合
2. PyCharmのターミナルで`python manage.py ...`を実行する場合(migration実行時など)
1. Run/Debug
この場合の環境変数設定は、別に難しくない。Run/Debug Configurationsから環境変数を追加すれば可能だ。
ただし、Configurationsの数 × 開発ラベルの種類の数だけ設定しなくてはいけないのでちょっと面倒ではある。本当はProjectレベルの環境変数があったら便利なのかもしれないが、ここは良い解決策がないので地道に行おう。
2. python manage.py ...
Djangoで開発する際に、python manage.py makemigrationsなど、Run/Debug以外の実行環境でpythonを実行することは多い。しかし、この際の環境変数には(当然ながら)先に設定したRun/Debugの開発ラベル反映されていない。
そこで、別の環境変数設定方法が必要になる。しかし、いくつかアイデアを検討したが、あまりぱっとしたものが思うかばない。
検討1:ターミナルからexportしたり、.bash_profileなどでexportする
➔ 1つのマシンで複数のProjectや開発環境がある場合があり、却下。
検討2:manage.py系の実行をRun/Debug Configurationに設定する
➔ インタラクティブシェルを必要とすることが多く、そのような場合に立ち上がらないケースがあったのでこれも諦めた。
PyCharm側で良さげな機能があればよいのだが、これも残念ながら見つからない。
そこで、ちょっと荒業だが、virtualenvのbin/activateの最後で直接exportするように運用ルールを設定した。具体的には以下のとおり。
vi ~/.virtualenvs/<Virtualenv環境名>/bin/activate
# 最後にexport DEPLOY_ENV=<dev/stg/prd>を記述
こうすることで、activateと同時に開発環境ラベルが設定できて楽になる。virtualenv環境ごとに環境変数が設定できるので、マシンの中でも競合は起きない。
なお、このように書き分けるために、当然Virtualenv環境は<Project名称>_<開発環境ラベル>(例:project_dev)のように書き分ける必要があるのでそこは注意。
まとめ
PyCharmにおける開発環境ラベルは、
-
Run/Debug Configurationsで、それぞれの開発環境ごとにラベルをきちんと書く -
また、
python manage.py...でも反映させるために、virtualenvのactivateの最後でもマシンごとに環境変数をexportする
と良い。