最低限のタスクランナー機能があればよいので大体以下のようになる。
#!/bin/bash
set -eux
CMD=$1 && shift
OPTION=$@
function main() {
case ${CMD} in
# -- APサーバを起動
start)
poetry run gunicorn -w4 --bind 0.0.0.0:8080 src.xxx.app:app --reload
;;
# -- ビルド(何かビルドが必要なものがある場合)
build)
poetry run xxx build
;;
# -- テスト実行
test)
poetry run pytest ${OPTION}
;;
# -- デプロイ
deploy)
echo "デプロイ処理"
;;
# -- 対応する処理が存在しない
*)
echo "does not match parameter."
;;
esac
}
# -- Run Script.
main
複雑なサブコマンドや引数が必要になることは少ないのでチェック処理などは必要性に迫られない限り省略している。
このスクリプトを task.sh みたいな名前でプロジェクトルートに配置する。利用時は↓のように呼び出す。
$ ./task.sh start
最近はほぼ100%dockerを使うので↓みたいになる。
$ docker-compose exec <コンテナ> bash task.sh start
このようにしている理由は Poetry の scripts はタスクランナー機能ではないということらしいので。詳しくは以下のリンク先を参照。
Pipenvから見ると退化したように見える反面、パッケージ管理ツールに依存しなくなったとも言え、いいんだか悪いんだかといった感じである。
ヘルプドキュメントが無いとかシェル補完効かないみたいな問題やプロジェクトメンバー全員にシェルスクリプト力(ちから)を求めるのはどうなんだみたいな話もあるものの、とりあえず必要十分なので良しとしている。