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
する
と良い。