direnv — инструмент который я не замечал пока не попробовал
Есть такие инструменты которые существуют годами, все о них знают, но ты как-то проходишь мимо. Потом пробуешь - и думаешь «почему я не использовал это раньше».
С direnv у меня именно так.
Что это такое
direnv - утилита для командной строки которая автоматически загружает переменные окружения когда ты заходишь в папку проекта и выгружает их когда уходишь.
Звучит просто. Но вот в чём дело - если у тебя несколько проектов каждый со своими API ключами, настройками базы данных, путями к бинарям - без direnv это выглядит так: открыл терминал, вспомнил что не экспортировал нужные переменные, экспортировал вручную, забыл убрать когда перешёл к другому проекту, получил непонятную ошибку, полчаса дебага.
С direnv: зашёл в папку - всё загрузилось само. Вышел - убралось само.
Как это работает
В каждом проекте создаёшь файл .envrc:
export DATABASE_URL="postgresql://localhost:5432/mydb"
export API_KEY="dev-key-123"
export NODE_ENV="development"
Первый раз нужно явно разрешить файл - direnv allow. После этого всё работает автоматически. Безопасность встроена: direnv не выполняет новый или изменённый файл без явного подтверждения.
Почему это важно именно сейчас
В 2026 году типичный разработчик работает с несколькими проектами одновременно. Node.js разных версий, разные базы данных, разные API ключи, разные конфиги. «Работает на моей машине» баг в большинстве случаев - это не баг. Это состояние шелла которое отличается от коллеги.
direnv в связке с mise (для версий инструментов) решает это: репозиторий сам определяет что нужно для работы. Новый разработчик клонирует репо - и получает то же самое окружение что и все остальные.
Что делать с секретами
Коммитить .envrc с реальными ключами нельзя. Стандартный паттерн:
# Коммитишь в репо — шаблон без секретов
.envrc.example
# Не коммитишь — реальные значения
.envrc.local
В .envrc загружаешь локальный файл:
# .envrc
source_env_if_present .envrc.local
export NODE_ENV="development"
Каждый разработчик копирует .envrc.example в .envrc.local и заполняет своими значениями. Стандартно, воспроизводимо, без утечки секретов в git.
Мой вывод
Я давно использую несколько проектов одновременно. У каждого свои переменные окружения. До direnv переключение между ними было ручным и ненадёжным.
Иногда лучшие инструменты не те что делают что-то новое. А те что убирают раздражение которое ты уже перестал замечать. 🔧

Комментарии