Pythonプロジェクト構成のスケルトンです。
appパッケージがアプリケーションコードです。
appパッケージは設定値LOG_LEVELを表示するだけのサンプルアプリケーションです。
環境変数APP_CONFIG_FILE
で設定値を記述したファイル(app/config/内のファイル)を切り替えられます。
# ベースイメージのビルド
$ make build-baseimage
# イメージのビルド
$ make build
# ローカルで起動
$ make run
docker run -it --rm --name app -w /usr/src -v $(pwd):/usr/src -e APP_CONFIG_FILE=base app/dev:local
LOG_LEVEL: DEBUG
開発中に別のコマンドを実行したいときは下記のように実行できます。
$ make run CMD='ls /usr/src/app'
docker run -it --rm --name app -w /usr/src -v $(pwd):/usr/src -e APP_CONFIG_FILE=base app/dev:local ls /usr/src/app
__init__.py __pycache__ config main.py tests
下記のコマンドを実行するとテストが動きます
$ make test
テストでは下記を行なっています。
- black によるコードフォーマットのチェック。(実行時のオプション)
- isort によるインポート順序のチェック。(実行時のオプション)
- pytest によるユニットテストの実行。(実行時のオプション)
- mypy による静的解析の実行。(実行時のオプション)
フォーマットチェックでエラーになった際は、下記でコード整形を実行できます。
$ make format
直接依存しているライブラリ名(必要に応じてバージョンも)を requirements.txt
に追加し、下記を実行します。
$ rm requirements.lock
$ make requirements.lock
.
├── Dockerfile
├── Makefile
├── README.md
├── app
│ ├── __init__.py
│ ├── config
│ ├── main.py
│ └── tests
├── baseimage
│ └── Dockerfile
├── requirements.lock
├── requirements.txt
└── requirements_test.txt
- アプリケーション本体です
- Dockerイメージの/usr/src/app にマウントされます。
- テストコードは tests/ に配置します。
- DockerHubから直接イメージを取得しているとリクエスト制限にひっかかり、CI/CDが失敗することがあります
- そのため、ベースイメージを作成しECRやGCRに保存しておくことを想定しています