-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjustfile
More file actions
151 lines (122 loc) · 4.85 KB
/
Copy pathjustfile
File metadata and controls
151 lines (122 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# 使用方法: just <コマンド>
# ディレクトリ定義
BACKEND_DIR := 'backend'
FRONTEND_DIR := 'frontend'
# デフォルトのコマンドリスト表示
default:
@just --list
# バックエンドの開発サーバーを起動(cargo watchを使用)
backend-dev:
cd {{BACKEND_DIR}} && cargo watch -x run
# フロントエンドの開発サーバーを起動(API生成ウォッチャーも並列実行)
frontend-dev:
#!/usr/bin/env zsh
function frontend_cleanup() {
echo "🛑 フロントエンド終了中..."
# Nodeプロセスも確実に終了させる
if pkill -f "next" 2>/dev/null; then
echo "✅ Nextプロセスを終了しました"
fi
# Orvalのプロセスは勝手に終了するので特に処理は不要
# 少し待機して、プロセスが確実に終了するようにする
sleep 0.5
exit 0
}
trap frontend_cleanup INT TERM
cd {{FRONTEND_DIR}}
(
npm run dev | while IFS= read -r line; do
echo "$(printf '\033[34m[NEXT]\033[0m') 🚀 $line"
done
) &
(
npm run generate-api:watch | while IFS= read -r line; do
echo "$(printf '\033[36m[API_GEN]\033[0m') 🔄 $line"
done
) &
wait
# データベースをDocker Composeで起動(既に起動している場合はスキップ)
db-up:
#!/usr/bin/env zsh
cd {{BACKEND_DIR}}
if [ "$(docker compose ps -q 2>/dev/null | wc -l)" -gt 0 ]; then
echo "✅ データベースはすでに実行中です。スキップします。"
else
echo "🔌 データベースを起動しています..."
docker compose up -d
fi
# データベースをDocker Composeで停止
db-stop:
cd {{BACKEND_DIR}} && docker compose stop
# すべてのサービスを起動(バックエンド、フロントエンド、DB)
dev: db-up
#!/usr/bin/env zsh
# バックグラウンドプロセスを終了するための関数
function dev_cleanup() {
echo "🛑 開発環境終了中..."
# 現在のディレクトリを保存
local CURRENT_DIR=$(pwd)
# まずcargo-watchを終了させる
if pkill -f "cargo-watch" 2>/dev/null; then
echo "✅ Cargo Watchプロセスを終了しました"
fi
# すべてのbackendプロセスがあれば終了させる
# target/debug/minwada-apiの形式でプロセスを検索して終了
if pkill -f "target/debug/minwada-api" 2>/dev/null; then
echo "✅ Rustバックエンドプロセスを終了しました"
fi
# 念のためプロセス名でも検索して終了
if pkill -f "minwada-api" 2>/dev/null; then
echo "✅ 追加のRustバックエンドプロセスを終了しました"
fi
# Next.jsを終了させる
if pkill -f "next" 2>/dev/null; then
echo "✅ Nextプロセスを終了しました"
fi
# Docker Composeを停止する
local ABSOLUTE_BACKEND_DIR="$(pwd)/{{BACKEND_DIR}}"
if [ -d "$ABSOLUTE_BACKEND_DIR" ]; then
cd "$ABSOLUTE_BACKEND_DIR" && docker compose stop
echo "✅ Docker Composeのコンテナを停止しました"
else
echo "⚠️ バックエンドディレクトリが見つからないため、Docker Composeを停止できませんでした"
fi
# 元のディレクトリに戻る
cd "$CURRENT_DIR"
exit 0
}
# シグナルハンドラを設定 (EXITを除外して二重実行を防止)
trap dev_cleanup INT TERM
# バックエンドとフロントエンドを並列に起動し、ログに色付きプレフィックスを追加
(
cd {{BACKEND_DIR}} &&
cargo watch -x run | while IFS= read -r line; do
echo "$(printf '\033[32m[BACKEND]\033[0m') 🦀 $line"
done
) &
(
cd {{FRONTEND_DIR}} &&
npm run dev | while IFS= read -r line; do
echo "$(printf '\033[34m[NEXT]\033[0m') 🚀 $line"
done
) &
(
cd {{FRONTEND_DIR}} &&
npm run generate-api:watch | while IFS= read -r line; do
echo "$(printf '\033[36m[API_GEN]\033[0m') 🔄 $line"
done
) &
sleep 3 # 少し待機して、バックエンドとフロントエンドが起動するのを待つ
open http://localhost:3000 &
open http://localhost:8025 &
# すべてのバックグラウンドプロセスが終了するまで待機
wait
# フロントエンドのインストール
frontend-install:
cd {{FRONTEND_DIR}} && npm ci
# バックエンドのビルド
backend-build:
cd {{BACKEND_DIR}} && cargo build
# プロジェクト全体のセットアップ
setup: frontend-install backend-build db-up
@echo "🎉 セットアップが完了しました。"