この記事の内容:PyCharmの開発環境ごとの設定方法
開発環境(本番・ステージング・開発等)ごとにPyCharmの設定を分けると開発が楽に進む。しかし、PyCharmの設定はいろいろあって分かりづらい。そこで、PyCharmのディレクトリ構造・Project interpreter・Project structure・Run/Debug Config・Virtualenvあたりについて、個人的におすすめの設定方法を書き残しておく。
前提となる環境
フロントエンドとバックエンドを分けて開発していること。
- 以下では例として、フロントエンドはnode、Vue、Axiosで、バックエンドはPython、Django、DRF等を用いて説明する。
- なお、ベースとなるリポトリとしてakiyoko/drf-vue-sampleを用いた。このリポジトリとの差分は、フロントエンドとバックエンドの分離の仕方のみ。
達成したいPyCharmの設定
- 環境の分離
- 開発・ステージング・本番等という開発ステージごとの設定の分離
- フロントエンド単体、バックエンド単体、結合状態それぞれのモジュールごとの設定の分離
設定方法
ディレクトリ構造
frontend
とbackend
を分離。トップレベルのtest
で結合テストを実施。結合テストの設定ファイルは(pythonの場合は)./requiremetns.txt
に書いておく。
drf-vue-sample2.
├── backend
│ ├── apiv1
│ ├── config
│ ├── db.sqlite3
│ ├── manage.py
│ ├── requirements.txt
│ ├── shop
│ ├── static
│ ├── tests
│ └── templates
├── frontend
│ ├── babel.config.js
│ ├── node_modules
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── src
│ ├── tests
│ └── vue.config.js
├── requirements.txt
└── tests
本番・ステージング・開発等の環境設定
環境ラベル
- 環境変数名は
$DEPLOY_ENV
で、ラベルは下記の通り。- 開発ローカルサーバー:
dvl
- 開発リモートサーバー:
dvr
- ステージングリモート:
stg
- 本番リモート:
prd
- 開発ローカルサーバー:
* 開発環境だけはローカルとリモートの環境を2つ用意してある。理想的にはdev
に統一してDocker使ったほうが良い。
Virtualenvs設定
~/.virtualenvs/drf-vue-sample2/bin/activate
の最後に以下を追加する。
export $DEPLOY_ENV=環境ラベル
こうすると、ターミナルで行うmanage.py
系統の処理(例:python manage.py makemigrations
)にも環境ラベルが反映されるのでとても便利。逆に言えば、Run/Dedebug Configuration
やInterpreter
の設定をいじってもmanage.py
系の処理はターミナルから行う限り失敗する。
PyCharmのProject interpreter
2つ用意する。
- 結合テスト(
drf-vue-sample2/test
)を行うpythonインタープリター-
drf-vue-sample2-integration
- Seleniumを動かす等に用いる。
-
- バックエンドのサーバー立ち上げ、またはテストを行うインタープリター
drf-vue-sample2-backend
PyCharmのRun/Debug Configuration
3つ用意する。
-
結合テスト用の設定
-
integration_${開発ラベル}
- テンプレートはpython tests
- script pathは
drf-vue-sample2/tests
を指定する。
- script pathは
- インタープリターは
drf-vue-sample2-integration
- テンプレートはpython tests
-
-
バックエンド用の設定
-
backend_${開発ラベル}
- テンプレートはDjango server
- 環境変数に、
${DEPLOY_ENV}
と${DJANGO_SETINGS_MODULE}
を追加
- 環境変数に、
- テンプレートはDjango server
-
-
フロントエンド用の設定
-
frontend_${開発ラベル}
- テンプレートはnpm
- 実行する前に、
fronend
のディレクトリで、npm install
しておく。
-
Project Structure
-
backend
とfrontend
の両方をsrcに足しておく。←意外と重要。- こうすると両者が混ざることで若干環境依存性を生むが、こうしないとインスペクション(エディタレベルでエラーやワーニングを出してくれる機能のこと)がうまく行かないのでこのように設定する。
以上の設定で一旦目標としていた状態(環境分離)は達成できるはず。
まとめ
- PyCharmで環境を分けるには、最低限、
Project Interpreter
(フロント/バック/結合)と、Run/Debug Configuration
(インタープリター種類✕{dev/prd/stg等}
)で分離するとよい。