Table of contents
Open Table of contents
들어가며
Windows에는 Linux와 macOS에서 쓰이는 asdf라는 runtime version manager를 사용할 수 없다.
그래서 이것 저것 서칭을 해 보다가.
어떤 일본 분이 만드신 aqua라는 것을 알아 냈다.
그래서 이걸로 Windows에서 cli program version managing을 해 보려고 한다.
(아 이거 node, python 그리고 ruby 지원을 안 하네 ㅋㅋ)
- https://zenn.dev/shunsuke_suzuki/books/aqua-handbook/viewer/what-aqua#aqua-%E3%81%AF%E5%85%A8%E3%81%A6%E3%82%92%E4%BB%A3%E6%9B%BF%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%AE%E3%81%8B
상기 링크가 개발자 분이 쓴 블로그 포스트인데 하기와 같은 코멘트가 있다.特に asdf がサポートしている Python や Ruby, Node.js などは aqua はサポートしていません。
번역하면 asdf가 지원하는 python, ruby, node.js는 aqua가 지원하지 않는다는 내용이다.
그래도 go랑 bun은 설치가 되고, 뭔가 복잡한 설정을 하면 jdk도 설정이 가능하다! (하기 discussion 참고)
필자의 생각은 그냥 Windows면, nvm-windows, pyenv-win, jabba를 사용해서 runtime version managing을 하는 게 좋을 것 같다는 생각이 든다.(하기 포스트 참고)
- Windows에서 NVM으로 Node 버전 관리하기
- jabba를 이용해 Windows에서 JDK 버전 관리하기
- pyenv-win을 이용해 Windows에서 Python Runtime Version 관리하기
aqua 설치
Download prebuilt binaries from GitHub Releases
상기 URI로 접속하여, Windows Binary를 다운로드 받는다.
환경 변수 AQUA_ROOT_DIR, PATH 설정

상기 이미지처럼 $env:LOCALAPPDATA\aquaproj-aqua\ 디렉터리에 bat 폴더와 bin 파일을 만들어 놓는다.
그리고 하기 사진처럼 bin\ 디렉터리에 다운로드 받아 놓았던 Windwos aqua binary를 복사해 놓는다.

그리고 Powershell에 Administrator 권한 session으로 접속한다.
[System.Environment]::SetEnvironmentVariable("AQUA_ROOT_DIR", "$env:LOCALAPPDATA\aquaproj-aqua", [System.EnvironmentVariableTarget]::Machine)

상기 이미지처럼 입력을 한다.
PowerToys에 들어가서 확인하니, 잘 바뀐 것을 알 수 있다.

그 다음 다시 일반 User Session으로 Powershell에 접속을 하고, 하기 명령어를 입력한다.
Set-Item Env:Path "$Env:AQUA_ROOT_DIR\bat;$Env:AQUA_ROOT_DIR\bin;$ENV:Path"

상기 이미지처럼 잘 환경 변수 PATH가 설정된 것을 알 수 있다.
그런데 이렇게 설정을 하면 Powershell Session이 종료되면, 다시 $env:PATH 값은 초기화 된다.
세션을 종료했다가, 다시 접속하면 하기 이미지처럼 다시 $env:PATH 값이 초기화 된 것을 알 수 있다.

그래서 초기화 되지 않게 하려면, Administrator 권한으로 Powershell에 접속하여, 하기 script를 입력한다.
$envPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
$newPath = "$Env:AQUA_ROOT_DIR\bat;$Env:AQUA_ROOT_DIR\bin;$envPath"
[System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::Machine)
그러면 상기 이미지 처럼 잘 변한 것을 확인할 수 있다.
다시 일반 User Session으로 Powershell에 접속하여, $env:PATH가 잘 설정됐는지 확인해 보자.
echo $env:PATH | findstr aquaproj-aqua
(잘 나오네 ㅎㅎ)
환경 변수 AQUA_GLOBAL_CONFIG 설정
하기 이미지처럼 $HOME 디렉터리에 .config 디렉터리를 생성한다.

그리고 .config 디렉터리 안에 aquaproj-aqua 디렉터리를 생성하고, aqua.yml 파일을 생성한다.

$env:LOCALAPPDATA\aquaproj-aqua\aqua.yaml:
---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
# checksum:
# enabled: true
# require_checksum: true
# supported_envs:
# - all
registries:
- type: standard
ref: v4.104.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: cli/cli@v2.40.1
그리고 User Session을 끊고, Administrator Session으로 Powershell에 접속한다.
$envAquaGlobalConfig = [System.Environment]::GetEnvironmentVariable("AQUA_GLOBAL_CONFIG", [System.EnvironmentVariableTarget]::Machine)
$newAquaGlobalConfig = "$env:LOCALAPPDATA\aquaproj-aqua\aqua.yaml;$envAquaGlobalConfig"
[System.Environment]::SetEnvironmentVariable("AQUA_GLOBAL_CONFIG", $newAquaGlobalConfig, [System.EnvironmentVariableTarget]::Machine)

상기 이미지처럼 환경 변수 AQUA_GLOBAL_CONFIG가 잘 설정된 것을 알 수 있다.
Administrator Session을 끊고 나와서, 다시 User Session으로 Powershell에 접속하여
gh version을 입력하면 global로 설치가 되어, command가 잘 먹는 것을 알 수 있다.

마치며
들어가며에도 써 놨지만, node.js, python3, ruby 와 같은 runtime 지원이 없다.
그래서 이 글에서 예시로 보여준 gh command 말고도, neovim version 관리로 쓰고 있다.
참고 문서
- https://aquaproj.github.io/docs/install#download-prebuilt-binaries-from-github-releases
- https://aquaproj.github.io/docs/tutorial/global-config
- https://zenn.dev/shunsuke_suzuki/books/aqua-handbook/viewer/what-aqua#aqua-%E3%81%AF%E5%85%A8%E3%81%A6%E3%82%92%E4%BB%A3%E6%9B%BF%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%AE%E3%81%8B