/note/tech

Poetryでプロジェクトを作る時に一緒に配置するタスクランナー的シェルスクリプト

最低限のタスクランナー機能があればよいので大体以下のようになる。

#!/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から見ると退化したように見える反面、パッケージ管理ツールに依存しなくなったとも言え、いいんだか悪いんだかといった感じである。

ヘルプドキュメントが無いとかシェル補完効かないみたいな問題やプロジェクトメンバー全員にシェルスクリプト力(ちから)を求めるのはどうなんだみたいな話もあるものの、とりあえず必要十分なので良しとしている。