GN⁺: Mise: 개발 도구, 환경 변수, 작업 실행기
(github.com/jdx)mise란 무엇인가?
- mise는 asdf, nvm, pyenv와 유사하게 node, python, cmake, terraform 등 다양한 개발 도구를 관리하는 도구임
- direnv와 유사하게 프로젝트 디렉토리별 환경 변수를 관리함
- make와 유사하게 프로젝트 빌드 및 테스트에 사용되는 작업을 관리함
30초 데모
- mise를 사용하여 node의 다양한 버전을 설치하는 방법을 보여줌
-
which node
명령어를 실행하면 실제 경로가 반환되며, 이는 shim이 아님
빠른 시작
- mise 설치 방법:
-
$ curl https://mise.run | sh
-
$ ~/.local/bin/mise --version
명령어로 설치된 버전 확인 가능
-
- 특정 버전 설치:
-
$ curl https://mise.run | MISE_VERSION=v2024.5.16 sh
-
$ ~/.local/bin/mise --version
명령어로 설치된 버전 확인 가능
-
- 쉘에 mise 연결하기:
- bash:
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
- zsh:
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
- fish:
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish
- bash:
- 런타임 설치 및 글로벌 기본값 설정:
-
$ mise use --global node@20
-
$ node -v
명령어로 버전 확인 가능
-
전체 문서
- mise.jdx.dev에서 전체 문서 확인 가능
Hacker News 의견
-
mise를 사용하기 시작했을 때, asdf의 단점을 보완하면서도 빠르고 덜 침입적인 셸 설정을 제공하여 만족스러웠음
- Task Running과 Env Vars 기능이 추가되어 더욱 유용해졌음
- 개발자가 기존 도구와의 호환성을 유지하면서도 미래 기능을 구축하는 데 많은 시간을 투자한 점이 인상적이었음
- 최근 백엔드 기능을 통해 필요한 개발 도구를 쉽게 설치할 수 있게 되어 편리해졌음
-
JS, Ruby, Python, Java SDK 관리를 위해 Mise로 전환했으며, 만족스러웠음
- RVM, NVM, Python 설치 도구 등을 설치할 필요가 없어 신선한 느낌을 받았음
-
팀의 도구 체인을 통합하기 위해 mise를 사용 중이며, Docker나 Nix를 사용하지 않음
- Docker는 여전히 서비스 실행에 사용하지만, mise의 사용자 경험이 뛰어남
- 모든 저장소 스크립트에 자동 완성 기능이 추가되어 편리함
-
모든 것을 하려다 보면 아무것도 제대로 하지 못할 가능성이 큼
- 대부분의 사람들은 한 생태계의 패키징 문제를 깊이 이해하지 못함
- 개발자들이 많은 것을 알아야 하지만, 실제로는 기존 도구를 래핑하는 것에 불과함
-
개발자가 아니기 때문에 이러한 도구의 사용 사례를 이해하지 못함
- asdf를 사용하여 모노레포의 모든 프로그램 버전을 관리하며, UX는 별로지만 신뢰성 있음
- 환경 변수를 현재 셸 세션에 로드하지 않고 스크립트나 Makefile을 사용하여 필요한 변수를 로드하고 작업을 수행함
- Make를 사용하여 디렉토리별로 반복 가능한 작은 명령어를 실행하거나 명령어를 병렬화하거나 순서대로 실행함
- 셸 스크립트를 사용하여 Make 타겟보다 약간 더 길거나 복잡한 도구를 작성함
- 전체 환경은 asdf만 설치하면 관리 가능하며, 모든 것이 자동화되고 버전이 고정됨
-
mise를 사용하여 Go 버전을 관리하고 있으며, 약간 혼란스럽고 문서화가 부족하지만 괜찮음
- asdf나 유사한 도구를 사용해본 적이 없어 학습 곡선이 있을 수 있음
-
mise를 asdf 대체 도구로 사용하며 만족스러웠음
- 동일한 기능을 제공하지만 더 빠르고 UX가 우수함
-
1년 이상 사용하며 삶을 더 쉽게 만들어준 간단한 도구임
- 제작자와 기여자들에게 감사함
-
mise를 GitHub Actions 워크플로우에 통합하는 방법을 고민 중임
- mise 저장소의 워크플로우 파일을 보면 몇 가지 mise 단계를 추가한 것으로 보임
- 워크플로우 파일을 생성할 수 있다면 더 좋을 것 같음
-
프로젝트의 Readme를 읽고 나서 "왜?"라는 의문이 남음
- Devbox를 사용하여 전체 Nix 생태계에 접근함