devenv - 선언적 Nix 개발자 환경 치트시트
devenv (Cachix)는 빠르고 선언적이며 재현 가능하고 조합 가능한 Nix를 사용하여 개발자 환경을 구축합니다. Nix를 JSON 뒤에 숨기는 도구와 달리 devenv는 구성을 위해 Nix 언어를 채택하며, 이는 더 많은 힘과 유연성을 제공합니다. 언어, 패키지, 서비스 (데이터베이스, 캐시), 장기 실행 프로세스, 스크립트, 환경 변수, 사전 커밋/git 훅 — 모두 하나의 devenv.nix에서 정의됩니다. 전체 Nix 기능을 갖춘 배터리 포함 개발자 친화적 레이어를 원할 때 선택입니다.
설치
| 방법 | 명령어 |
|---|
| 요구사항 | Nix (플레이크 활성화됨) |
| 설치 | nix profile install nixpkgs#devenv (또는 Cachix 지침) |
| Cachix | 빠른 바이너리 캐싱에 권장 |
| 확인 | devenv version |
시작
| 명령어 | 설명 |
|---|
devenv init | devenv.nix + devenv.yaml 스캐폴드 |
devenv shell | 환경에 입장 |
devenv up | 정의된 프로세스/서비스 시작 |
devenv test | 구성된 테스트/체크 실행 |
devenv update | 입력 업데이트 (최신 버전 고정) |
devenv gc | 오래된 환경 가비지 수집 |
구성 (devenv.nix)
{ pkgs, ... }:
{
# 셸에서 사용 가능한 패키지
packages = [ pkgs.git pkgs.jq ];
# 언어 (관리 도구 체인)
languages.javascript.enable = true;
languages.python = {
enable = true;
version = "3.12";
};
# 서비스
services.postgres.enable = true;
services.redis.enable = true;
# 환경 변수
env.APP_ENV = "development";
# 스크립트
scripts.hello.exec = "echo hello from devenv";
# 장기 실행 프로세스
processes.web.exec = "npm run dev";
# Git 훅 (사전 커밋)
pre-commit.hooks = {
prettier.enable = true;
ruff.enable = true;
};
}
주요 구성 요소
| 블록 | 목적 |
|---|
packages | 셸의 임의의 Nix 패키지 |
languages.* | 1순위 언어 지원 (node, python, go, rust, …) |
services.* | 데이터베이스/캐시 (postgres, redis, mysql, mongodb, …) |
processes.* | devenv up으로 관리되는 장기 실행 명령어 |
scripts.* | 셸에서 실행 가능한 이름 지정된 명령어 |
env.* | 환경 변수 |
pre-commit.hooks.* | Git 사전 커밋 통합 |
서비스 및 프로세스
| 명령어 | 설명 |
|---|
devenv up | 모든 processes와 services 시작 |
devenv up -d | 백그라운드에서 시작 |
devenv processes down | 프로세스 중지 |
services.postgres.enable = true; | 관리되는 Postgres 추가 |
services.postgres.initialDatabases | 시작 시 데이터베이스 시드 |
Git 훅 (사전 커밋)
devenv는 사전 커밋 훅을 선언적으로 통합합니다 — 훅을 활성화하면 커밋 시 실행됩니다.
| 훅 예 | 실행 |
|---|
prettier.enable | JS/TS/등 형식 |
ruff.enable | Python 린트 |
nixpkgs-fmt.enable | Nix 형식 |
shellcheck.enable | 셸 스크립트 린트 |
CI 및 컨테이너
| 사용 | 방식 |
|---|
| CI | 동일한 환경을 위해 devenv test / devenv shell -- <cmd> |
| 컨테이너 | devenv container build는 OCI 이미지 생성 |
| direnv | .envrc에서 use devenv를 사용하여 cd에서 자동으로 입장 |
| 플레이크 | 더 넓은 Nix 플레이크 생태계와 조합 가능 |
일반적인 워크플로우
# 재현 가능한 풀스택 환경: 언어 + 데이터베이스 + 프로세스
devenv init
# devenv.nix 편집: python 활성화, services.postgres, processes.web
devenv shell # 도구 사용 가능
devenv up # postgres + 웹 프로세스 실행 중
# 동일한 정의에서 컨테이너 빌드
devenv container build web
devenv vs Devbox vs raw Nix
| 측면 | devenv | Devbox | Nix (원본) |
|---|
| 구성 | Nix 언어 | JSON | Nix 언어 |
| 파워 | 높음 (전체 Nix) | 중간 | 최고 |
| 서비스/프로세스 | 빌트인, 풍부 | 기본 서비스 | DIY |
| 학습 곡선 | 중간 (Nix) | 부드러움 | 급격함 |
| 최적 용도 | 강력한 선언적 환경 | 쉬운 재현 가능 환경 | 총제적 제어 |
Nix 문법이 장벽이라면, Devbox는 동일한 기초를 통한 JSON 기반 대안을 제공합니다. 기본은 Nix를 참조하세요.
자료