チーム開発などをしているとさまざまなツールを使うことがあると思います。
それらのバージョンをきちんと合わせていないとうまく環境が構築できず四苦八苦する経験が皆さんあるんじゃないでしょうか?
asdfというツールを使うと以下のことができるようになります
- ディレクトリレベルでのツールのバージョン管理
- asdfを利用したパッケージインストール手順の共通化
- 厳密にいうとasdfはパッケージバージョン管理ツールで、実際のインストール自体は既存のbrewとかnpmなどが存在しています
インストール方法は公式サイトを見てください。
ここではあくまでどれだけ便利なのか?について紹介します。 こんなディレクトリを用意します。
$ pwd /tmp/test $ ls test1 test2
Kubernetesを操作するkubectl
を複数のバージョンで使用したいものとします。
まずはasdfにて管理できるバージョンの一覧を見てみましょう。
$ asdf list-all kubectl 1.15.12 1.16.9 1.16.10 1.16.11 1.16.12-rc.1 1.16.12 1.16.13 1.16.14 1.16.15 1.17.5 1.17.6 1.17.7 1.17.8-rc.1 1.17.8 1.17.9 1.17.11 1.17.12 1.17.13 1.17.14 1.17.15 1.17.16 1.17.17 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5-rc.1 1.18.5 1.18.6 1.18.8 1.18.9 1.18.10 1.18.12 1.18.13 1.18.14 1.18.15 1.18.16 1.18.17 1.18.18 1.18.19 1.18.20 1.19.0-beta.0 1.19.0-alpha.1 1.19.0-beta.1 1.19.0-rc.1 1.19.0-alpha.2 1.19.0-beta.2 1.19.0-rc.2 1.19.0-alpha.3 1.19.0-rc.3 1.19.0-rc.4 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.19.5 1.19.6 1.19.7 1.19.8 1.19.9 1.19.10 1.19.11 1.19.12 1.19.13 1.20.0-beta.0 1.20.0-rc.0 1.20.0-alpha.1 1.20.0-beta.1 1.20.0-alpha.2 1.20.0-beta.2 1.20.0-alpha.3 1.20.0 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.20.7 1.20.8 1.20.9 1.21.0-beta.0 1.21.0-rc.0 1.21.0-alpha.1 1.21.0-beta.1 1.21.0-alpha.2 1.21.0-alpha.3 1.21.0 1.21.1 1.21.2 1.21.3 1.22.0-beta.0 1.22.0-rc.0 1.22.0-alpha.1 1.22.0-beta.1 1.22.0-alpha.2 1.22.0-beta.2 1.22.0-alpha.3
結構ありますね。じゃあ実際にインストールしてみましょう。
$ asdf install kubectl 1.21.0 $ asdf local kubectl 1.21.0 $ kubectl version --client Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"darwin/arm64"}
インストールをすると実はローカルにこんなファイルが作成されています。
$ cat .tool-versions kubectl 1.21.0
このファイルによってどのバージョンを使用するかが変化します。
ではディレクトリを移動してみます。
$ cd ../test2 $ kubectl version --client No version set for command kubectl Consider adding one of the following versions in your config file at kubectl 1.21.0
するとエラーが出ます。これはこのローカルでは使用すべきkubectlのバージョンが指定されていないせいです。では、ここでは違うバージョンのものを使ってみましょう。
$ asdf install kubectl 1.22.0-beta.2 Downloading kubectl from https://storage.googleapis.com/kubernetes-release/release/v1.22.0-beta.2/bin/darwin/arm64/kubectl $ asdf local kubectl 1.22.0-beta.2 $ kubectl version --client Client Version: version.Info{Major:"1", Minor:"22+", GitVersion:"v1.22.0-beta.2", GitCommit:"68922e3deb4696f4c0268ee68e03c816acd4feec", GitTreeState:"clean", BuildDate:"2021-07-14T21:47:57Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/arm64"}
はい。このように全く違うバージョンのものを指定できました。.tool-versioins
もこのようになっていますね。
$ cat .tool-versions kubectl 1.22.0-beta.2
ちなみにこのままだとtest1やtest2以外の場所だとkubectlが実行できないので、asdf global kubectl x.x.x
のようにして$HOME/.tool-versions
を作成する必要があります。