Один скрипт вместо трёх терминалов
Открыл проект, запустил фронтенд — ошибки 404 в консоли. Бэкенд не работает: на порту 8000 висит процесс от вчерашней сессии.
Каждый раз.
Проблема
У меня fullstack на FastAPI + React. Запуск выглядит так:
lsof -ti :8000 | xargs kill— освободить порт- Терминал №1: запустить бэкенд
- Ждать, пока стартанёт
- Терминал №2: фронтенд
- Проверить, что оба отвечают
Пять шагов. По-моему, терял минут пять каждое утро.
Агенты спотыкаются ещё сильнее. Вчера Claude Code увидел 404 на /api/students и полез править роутер — хотя бэкенд просто не был запущен. Потратил 15 минут на отладку несуществующего бага.
Решение
Попросил агента:
Сделай ./dev.sh — запускает backend и frontend, проверяет health endpoints, показывает статус. Посмотри лучшие практики через Exa.
Нашёл три паттерна:
- Единая точка входа — один
./dev.shвместо двух терминалов - Health checks —
curl -f localhost:8000/healthперед стартом фронтенда - Автоочистка портов — убить зомби-процессы перед запуском
Скрипт:
#!/bin/bash
wait_for_health() {
local url=$1
local name=$2
echo -n " $name"
for i in $(seq 1 30); do
curl -sf "$url" > /dev/null 2>&1 && echo " ✓" && return 0
echo -n "."
sleep 1
done
echo " ✗" && return 1
}
kill_port() {
lsof -ti :$1 2>/dev/null | xargs kill -9 2>/dev/null || true
}
kill_port 8000
uvicorn app.main:app --reload --port 8000 &
wait_for_health "http://localhost:8000/health" "Backend"
wait_for_health "http://localhost:8000/api/students" "API"
npm run dev &
wait_for_health "http://localhost:5173" "Frontend"
echo "=== Ready ==="
wait
Результат
Запуск — одна команда. Время старта: 30 секунд вместо пяти минут.
=== Mentor Platform ===
Health checks:
Backend ✓
API /api/students ✓
Frontend ✓
=== Ready ===
Сломалось? Сразу видно где — красный крестик напротив упавшего сервиса.
Документация для агента
В CLAUDE.md добавил:
| ✅ Always | Use `./dev.sh` to start dev environment |
Теперь агент не лезет запускать бэкенд и фронтенд по отдельности.
Источники
- Monorepo best practices — Graphite
- Validate scripts for monorepos — Dev Genius
Подписаться на обновления — @sereja_tech