/webapp_skeleton

Pythonプロジェクトのディレクトリ構成のテンプレ

Primary LanguagePython

はじめに

Webアプリ(主にAPIサーバー)のプロジェクト構成のスケルトンです。
src内のコードはFlaskを利用していますが、基本構成の方針自体はFlaskには依存しません。

設定情報

基本設定は、src/config/default.pyに記載します。
APP_CONFIG_FILEで(絶対パスで)指定したファイルで基本設定を上書きします。
GCPを利用することが多いのでGOOGLE_APPLICATION_CREDENTIALSも設定するようになっています。

開発

実行手順

どちらの場合も127.0.0.1:5000で動きます

  • Dockerを使う方法(推奨)
# 開発用設定で実行
$ make dev
...
docker run --rm -it -p 5000:5000 webapp_skeleton:0.1
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx

# 本番設定で実行
$ make production
...
docker run --rm -it -p 5000:5000 -e "APP_CONFIG_FILE=/usr/src/app/config/production.py" webapp_skeleton:0.1
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
  • ホストマシンでの実行方法
# 開発環境の設定ファイルを設定
$ python3 -m venv venv
$ . venv/bin/activate
(venv) $ pip install -r requirements.txt -c constraints.txt
(venv) $ export APP_CONFIG_FILE=`pwd`/config/development.py
(venv) $ export FLASK_DEBUG=1
(venv) $ cd src
(venv) $ python run.py

テスト

  • Dockerを使う方法(推奨)
# テスト実行(pytest & flake8)
$ make test
...
docker run --rm -it -p 5000:5000 webapp_skeleton:0.1 pytest -v -m ""
=============================================================================== test session starts ================================================================================
platform linux -- Python 3.6.3, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 -- /usr/local/bin/python
cachedir: .cache
rootdir: /usr/src/app, inifile:
collected 1 item

tests/api/test_views.py::ApiTestCase::test_index_api PASSED                                                                                                                  [100%]

============================================================================= 1 passed in 0.18 seconds =============================================================================
docker run --rm -it -p 5000:5000 webapp_skeleton:0.1 python -m flake8 --max-line-length=100
  • ホストマシンでの実行方法
# テスト実行(pytest & flake8)
(venv) $ pip install -r requirements_dev.txt
(venv) $ pytest -v

依存ライブラリの追加

  1. 手動でインストールしたパッケージ名のみをrequirements.txtに記載。(テストのみで利用するものはrequirements_dev.txtへ)
  2. make lockfile を実行(全てのライブラリアップデートする場合は make update-dependencies を実行)

ディレクトリ構成

$ tree .
.
├── Dockerfile
├── Makefile
├── README.md
├── keys
│   └── credentials.json
├── requirements.lock
├── requirements.txt
├── requirements_dev.txt
└── src
    ├── config
    │   ├── __init__.py
    │   ├── default.py
    │   ├── development.py
    │   └── production.py
    ├── run.py
    ├── server
    │   ├── __init__.py
    │   └── api
    │       ├── __init__.py
    │       └── views.py
    └── tests
        ├── __init__.py
        └── api
            ├── __init__.py
            └── test_views.py

7 directories, 18 files