- 記事作成日:2022/12/13
情報
名前 | URL |
---|---|
Github | https://github.com/aquaproj/aqua |
公式サイト | https://aquaproj.github.io/ |
デモサイト | https://asciinema.org/a/498262?autoplay=1 |
開発母体 | suzuki-shunsuke 氏 |
version | 1.25.0 |
言語 | Go |
価格 | 無料 |
ライセンス | MIT |
何ができるもの?
- コマンドラインツールのバージョン管理
- 利用バージョンを宣言的にファイルで管理できる
- GitHub Actions での利用や、Renovate との連携も可能
利用シーン
- リポジトリ、チームでバージョンを統一したい時
所感
asdf と比較してという形になりますが
- asdf だと reshim をしないと使えなかったり癖がある
- 新規 plugin の追加が楽そう
- lazy install が便利
- コマンドがシンプルなので asdf の plugin-add / install / global /local ... とかを考えなくていい
などの理由からとても使いやすいツールだなと感じました。
設定ファイルだけ見ると asdf の方が圧倒的にわかりやすいですが、asdf はどのリポジトリからダウンロードするのか?という情報が追記できないので、このファイルとは別に plugin-add
するレジストリ情報を共有しないといけません。
❯ cat .tool-versions golang 1.19.1 gcloud 408.0.0 ❯ cat aqua.yaml --- # aqua - Declarative CLI Version Manager # https://aquaproj.github.io/ # checksum: # # https://aquaproj.github.io/docs/reference/checksum/ # enabled: true # require_checksum: true registries: - type: standard ref: v3.103.0 # renovate: depName=aquaproj/aqua-registry packages: - name: ziglang/zig@0.9.0
あと単純に気になったのは、なぜセキュリティ製品出してる aqua がやってるのかよくわからなかったですね???と思ったらなんの関係もなかった。
使い方
今回使ったファイル
インストール
❯ brew install aquaproj/aqua/aqua ❯ aqua NAME: aqua - Version Manager of CLI. https://aquaproj.github.io/ USAGE: aqua [global options] command [command options] [arguments...] VERSION: 1.25.0 (9a544d686c6b7898596dd4a44cd04bd3a2782473) COMMANDS: init Create a configuration file if it doesn't exist init-policy Create a policy file if it doesn't exist install, i Install tools update-aqua Update aqua generate, g Search packages in registries and output the configuration interactively which Output the absolute file path of the given command exec Execute tool list List packages in Registries generate-registry, gr Generate a registry's package configuration completion Output shell completion script for bash or zsh version Show version cp Copy executable files in a directory update-checksum Create or Update .aqua-checksums.json help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --log-level value log level [$AQUA_LOG_LEVEL] --config value, -c value configuration file path [$AQUA_CONFIG] --trace value trace output file path --cpu-profile value cpu profile output file path --help, -h show help (default: false) --version, -v print the version (default: false)
使ってみる
❯ aqua init ❯ cat aqua.yaml --- # aqua - Declarative CLI Version Manager # https://aquaproj.github.io/ # checksum: # # https://aquaproj.github.io/docs/reference/checksum/ # enabled: true # require_checksum: true registries: - type: standard ref: v3.103.0 # renovate: depName=aquaproj/aqua-registry packages:
aqua list
で標準で対応している全てのツールが見える。
❯ aqua list standard,jckuester/terradozer standard,jreleaser/jreleaser/standalone standard,tmccombs/hcl2json standard,golang.org/x/tools/cmd/goimports standard,kubevela/kubevela standard,rancher/k3d standard,haskell/cabal/cabal-install standard,k1LoW/ndiag standard,kastenhq/external-tools/k10tools ...
今回は zig
というプログラミング言語を入れてみる。
❯ aqua g -i ziglang/zig ❯ aqua i INFO[0000] download and unarchive the package aqua_version=1.25.0 env=darwin/arm64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry= INFO[0001] create a symbolic link aqua_version=1.25.0 command=aqua-proxy env=darwin/arm64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry= INFO[0001] create a symbolic link aqua_version=1.25.0 command=zig env=darwin/arm64 program=aqua INFO[0001] download and unarchive the package aqua_version=1.25.0 env=darwin/arm64 package_name=ziglang/zig package_version=0.10.0 program=aqua registry=standard aqua i 4.33s user 2.38s system 46% cpu 14.421 total
g (generate) -i
をつけたので yaml ファイルも更新されていた。
❯ cat aqua.yaml --- # aqua - Declarative CLI Version Manager # https://aquaproj.github.io/ # checksum: # # https://aquaproj.github.io/docs/reference/checksum/ # enabled: true # require_checksum: true registries: - type: standard ref: v3.103.0 # renovate: depName=aquaproj/aqua-registry packages: - name: ziglang/zig@0.10.0
またインストール自体は aqua i
で実施された。
しかし、そのままだとパスが通ってない。
❯ which zig zig not found
公式に載っていたこのパスを追加する必要がある。
❯ export PATH="${AQUA_ROOT_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/aquaproj-aqua}/bin:$PATH" ❯ which zig /Users/xxx/.local/share/aquaproj-aqua/bin/zig ❯ zig info: Usage: zig [command] [options] Commands: build Build project from build.zig init-exe Initialize a `zig build` application in the cwd init-lib Initialize a `zig build` library in the cwd ast-check Look for simple compile errors in any set of files build-exe Create executable from source or object files build-lib Create library from source or object files build-obj Create object from source or object files fmt Reformat Zig source into canonical form run Create executable and run immediately test Create and run a test build translate-c Convert C code to Zig code ar Use Zig as a drop-in archiver cc Use Zig as a drop-in C compiler c++ Use Zig as a drop-in C++ compiler dlltool Use Zig as a drop-in dlltool.exe lib Use Zig as a drop-in lib.exe ranlib Use Zig as a drop-in ranlib env Print lib path, std path, cache directory, and version help Print this help and exit libc Display native libc paths file or validate one targets List available compilation targets version Print version number and exit zen Print Zen of Zig and exit General Options: -h, --help Print command-specific usage
zig で Hello World してみる
❯ tree . ├── aqua.yaml ├── build.zig └── src └── main.zig
cat src/main.zig
const std = @import("std"); pub fn main() anyerror!void { std.debug.print("Hello, {s}!\n", .{"World"}); }
❯ zig run src/main.zig Hello, World! ❯ zig build ❯ ./zig-out/bin/aqua Hello, World!
ちゃんと aqua でいれても動きますね!
zig のバージョンを変えてみる
--- # aqua - Declarative CLI Version Manager # https://aquaproj.github.io/ # checksum: # # https://aquaproj.github.io/docs/reference/checksum/ # enabled: true # require_checksum: true registries: - type: standard ref: v3.103.0 # renovate: depName=aquaproj/aqua-registry packages: - - name: ziglang/zig@0.10.0 + - name: ziglang/zig@0.9.0
おー。zig を叩いたら aqua の lazy install が発動しましたね。 これは asdf に比べて便利です。
❯ zig version INFO[0000] download and unarchive the package aqua_version=1.25.0 env=darwin/arm64 exe_name=zig exe_path=/Users/xxx/.local/share/aquaproj-aqua/pkgs/http/ziglang.org/download/0.9.0/zig-macos-aarch64-0.9.0.tar.xz/zig-macos-aarch64-0.9.0/zig package=ziglang/zig package_name=ziglang/zig package_version=0.9.0 program=aqua registry=standard 0.9.0
どうやら zig は aqua-proxy に symlink されていて、処理をインターセプトしてるようですね。
これにより指定のバージョンがない場合はそれをダウンロードしたり、aqua.yaml
によってバージョンを切り替えてるんですね。
❯ l /Users/xxx/.local/share/aquaproj-aqua/bin/zig lrwxr-xr-x 10 xxx 13 12 10:20 /Users/xxx/.local/share/aquaproj-aqua/bin/zig -> aqua-proxy
ここに公式説明がありました。
asdf だと .tool-versions
が変わると asdf install
しなきゃとなるのですが、1ステップなくなるのはいいですね。
uninstall
削除コマンドはないとのことなので。男らしく rm
してくださいとありました。
rm -R ~/.local/share/aquaproj-aqua/pkgs/http/ziglang.org/download/0.10.0/zig-macos-aarch64-0.10.0.tar.xz/
新しいコマンドの追加
このリポジトリに追加すればいいだけですね。楽ちんです。
- type: github_release repo_owner: profclems repo_name: glab asset: 'glab_{{trimV .Version}}_{{.OS}}_{{.Arch}}.{{.Format}}' link: https://glab.readthedocs.io/en/latest/ description: An open-source GitLab command line tool bringing GitLab's cool features to your command line format: tar.gz format_overrides: - goos: windows format: zip replacements: darwin: macOS linux: Linux 386: i386 amd64: x86_64 windows: Windows files: - name: glab src: bin/glab
asdf のプラグインを作ったことがありますが、fork して色々シェルを書かないといけないので面倒だったのでこれで済むのは手軽です。