🥷

ブランチ切り替え時にnpm run deployを自動実行

に公開

ゴール:ブランチ切り替え時にnpm run deployを自動実行する

バックエンドの開発をしていて、1時間以上経ってもフロントの動作が期待通りにならない・・・
同チームの方に相談したところ、「ここ最近修正しているので、npm run deploy したら直るかもです」と言われ、実施したところ直りました・・・
2度とこんな思いはしたくないので、npm run deploy を自動で叩きたいと思いました。

やってみた結果

必ずデプロイされるので確認の観点が1つ減り、開発者体験が向上しました。
(一瞬ブランチを切り替えたいだけの場合も、数秒待つ必要がありますが、、)

開発環境

  • mac
  • Vscode
  • git hooks

やったこと

  • vscodeのルート上に以下ディレクトリを作成
    • .git/hooks/post-checkout
  • chmod +x .git/hooks/post-checkout

実装

丸コピしてディレクトリだけ変えれば大丈夫です。

#!/bin/bash

# post-checkout hook
# 引数: $1=previous HEAD, $2=new HEAD, $3=flag (1=branch checkout, 0=file checkout)

# ブランチチェックアウト時のみ実行
if [ "$3" = "1" ]; then
    echo "========================================"
    echo "ブランチチェックアウト後の自動デプロイを開始..."
    echo "========================================"
    
    # プロジェクトルートディレクトリを取得
    PROJECT_ROOT=$(git rev-parse --show-toplevel)
    
    # フロントエンドディレクトリに移動してデプロイ実行
    FRONTEND_DIR="$PROJECT_ROOT/front"       ⬅︎ 定義変更してください
    
    if [ -d "$FRONTEND_DIR" ]; then
        echo "フロントエンドディレクトリに移動: $FRONTEND_DIR"
        cd "$FRONTEND_DIR"
        
        if [ -f "package.json" ]; then
            echo "npm run deploy を実行中..."
            npm run deploy
            
            if [ $? -eq 0 ]; then
                echo "========================================"
                echo "自動デプロイが完了しました"
                echo "========================================"
            else
                echo "========================================"
                echo "デプロイでエラーが発生しました"
                echo "========================================"
                exit 1
            fi
        else
            echo "========================================"
            echo "package.json が見つかりません: $FRONTEND_DIR"
            echo "========================================"
            exit 1
        fi
    else
        echo "========================================"
        echo "ディレクトリが見つかりません: $FRONTEND_DIR"
        echo "========================================"
        exit 1
    fi
else
    echo "ファイルチェックアウトのため、デプロイをスキップします"
fi

おわりに

日々の小さいストレスは即座に解決していきたいですね。

Discussion