GitHub - asdf-vm/asdf: Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more
핵심 포인트
- 1asdf는 Ruby, Node.js, Elixir 등을 포함한 다양한 프로그래밍 언어의 런타임 버전을 프로젝트별로 관리할 수 있는 확장 가능한 CLI 도구입니다.
- 2이 도구는 gvm, nvm, rbenv, pyenv와 같은 여러 버전 관리자를 하나로 통합하여, 일관된 명령으로 여러 언어를 지원하는 단일 인터페이스를 제공합니다.
- 3asdf는 간단한 plugin 시스템을 통해 새로운 언어를 쉽게 추가할 수 있도록 하여, 사용자가 더 이상 여러 버전 관리자를 설치하거나 다양한 명령을 학습할 필요가 없도록 합니다.
asdf는 여러 런타임 버전을 단일 CLI 도구로 관리할 수 있도록 설계된 확장 가능한 버전 관리자입니다. 이 도구의 핵심 목표는 gvm, nvm, rbenv, pyenv 등 언어별로 분리된 기존의 여러 버전 관리자들을 통합하여, 사용자가 여러 도구를 설치하고 각각의 명령어를 학습해야 하는 번거로움을 해소하는 것입니다.
asdf의 핵심 방법론은 다음과 같습니다.
- 플러그인 시스템 (Plugin System):
asdf는 특정 프로그래밍 언어 런타임 자체를 직접 관리하지 않고, 각 언어에 대한플러그인을 통해 확장됩니다. 사용자는 필요한 언어 (예: Ruby, Node.js, Elixir, Erlang 등)에 대해 명령어를 사용하여 해당 언어 플러그인을 설치합니다. 각 플러그인은 특정 언어 런타임의 설치, 제거, 버전 나열, 다운로드 등의 세부 로직을 캡슐화합니다. 이는asdf가 "어떤 언어든 지원할 수 있는" 확장성을 제공하는 기반이 됩니다. 새로운 언어나 툴 체인을 지원하려면 해당 언어에 대한 플러그인을 개발하면 됩니다.
.tool-versions구성 파일: 프로젝트별 또는 전역적으로 사용할 런타임 버전을 지정하기 위해.tool-versions파일을 사용합니다. 이 파일은 프로젝트 루트 디렉터리에 위치하며,nodejs 16.14.0,ruby 3.0.0과 같이 특정 런타임의 버전을 명시합니다.asdf는 사용자가 디렉터리를 이동할 때.tool-versions파일을 자동으로 감지하고, 지정된 런타임 버전으로PATH환경 변수를 동적으로 변경하거나 쉼(shim)을 사용하여 해당 버전의 런타임 실행 파일이 호출되도록 합니다. 이를 통해 "디렉터리를 이동함에 따라 런타임 버전이 자동으로 전환"됩니다. 또한,.node-version,.nvmrc,.ruby-version과 같은 기존의 언어별 구성 파일과의 호환성을 제공하여 기존 사용자들의 마이그레이션을 용이하게 합니다.
- 일관된 명령어 (Consistent Commands): 플러그인을 통해 다양한 언어를 관리하지만,
asdf는asdf install,asdf global,asdf local,asdf list와 같이 모든 런타임에 적용되는 일관된 명령어 인터페이스를 제공합니다. 이 명령어를 실행하면asdf는 현재 컨텍스트에 맞는 적절한 플러그인으로 작업을 위임합니다. 이는 사용자가 각 언어별 버전 관리자의 고유한 명령어를 학습할 필요 없이 단일 CLI 경험을 제공하는 장점이 있습니다.
asdf의 주요 장점은 단일 CLI로 여러 언어를 관리하고, 모든 언어에 대한 일관된 명령어를 제공하며, 전역 설정을 한 곳에서 관리할 수 있다는 점입니다. 또한, 프로젝트별 .tool-versions 파일을 통해 유연한 버전 관리가 가능하고, Bash, Zsh, Fish, Elvish 등 일반적인 셸에 대한 자동 완성 기능을 지원합니다. 이러한 특성들은 개발자들이 다양한 기술 스택을 사용하는 프로젝트 환경에서 런타임 버전을 효율적으로 관리할 수 있도록 돕습니다.