콘텐츠로 이동

devenv - 선언적 Nix 개발자 환경 치트시트

devenv - 선언적 Nix 개발자 환경 치트시트

devenv (Cachix)는 빠르고 선언적이며 재현 가능하고 조합 가능한 Nix를 사용하여 개발자 환경을 구축합니다. Nix를 JSON 뒤에 숨기는 도구와 달리 devenv는 구성을 위해 Nix 언어를 채택하며, 이는 더 많은 힘과 유연성을 제공합니다. 언어, 패키지, 서비스 (데이터베이스, 캐시), 장기 실행 프로세스, 스크립트, 환경 변수, 사전 커밋/git 훅 — 모두 하나의 devenv.nix에서 정의됩니다. 전체 Nix 기능을 갖춘 배터리 포함 개발자 친화적 레이어를 원할 때 선택입니다.

설치

방법명령어
요구사항Nix (플레이크 활성화됨)
설치nix profile install nixpkgs#devenv (또는 Cachix 지침)
Cachix빠른 바이너리 캐싱에 권장
확인devenv version

시작

명령어설명
devenv initdevenv.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모든 processesservices 시작
devenv up -d백그라운드에서 시작
devenv processes down프로세스 중지
services.postgres.enable = true;관리되는 Postgres 추가
services.postgres.initialDatabases시작 시 데이터베이스 시드

Git 훅 (사전 커밋)

devenv는 사전 커밋 훅을 선언적으로 통합합니다 — 훅을 활성화하면 커밋 시 실행됩니다.

훅 예실행
prettier.enableJS/TS/등 형식
ruff.enablePython 린트
nixpkgs-fmt.enableNix 형식
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

측면devenvDevboxNix (원본)
구성Nix 언어JSONNix 언어
파워높음 (전체 Nix)중간최고
서비스/프로세스빌트인, 풍부기본 서비스DIY
학습 곡선중간 (Nix)부드러움급격함
최적 용도강력한 선언적 환경쉬운 재현 가능 환경총제적 제어

Nix 문법이 장벽이라면, Devbox는 동일한 기초를 통한 JSON 기반 대안을 제공합니다. 기본은 Nix를 참조하세요.

자료