バージョン管理ツール「asdf」を使ってみる
こんにちは、インフラエンジニアのずやです!
今回は、使ってみてとても便利だったバージョン管理ツールのasdfについて紹介したいと思います!
背景
弊社ではいくつかのプロジェクトでKubernetesを利用しており、複数のKubernetesクラスターを運用しています。各クラスターのバージョンはアップデートのタイミングの都合などで統一されておらず、複数クラスターを管理する上でクライアントツールであるkubectlのバージョン管理が必要だと感じていました。
(クラスターとkubectlのバージョンが異なっていても操作は可能ですが、バージョンアップに伴うAPIの破壊的変更がある場合もあるので、バージョンは揃えておく方が無難です)
そんな折にasdfというツールがあると知りました。
asdfとは
asdfはrubyやnodeなどの各種プログラミング言語に加え、kubectlやterraformなどの多種多様なツールのバージョン管理を行うことができるCLIツールです。言語以外も管理できるanyenvというようなイメージです。
https://github.com/asdf-vm/asdf
asdfの使い方
asdfのインストール
macの場合はHomebrewを使ってインストールすることが可能です。
まずは、依存するパッケージをインストールします。
brew install coreutils curl git
次に、asdfをインストールします。
brew install asdf
最後にパスを通します。下記はシェルにzshを利用している場合の方法です。
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc
source ~/.zshrc
Homebrewを使わずにGitリポジトリからクローンすることも可能です。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.0
パスの設定は下記の用に行います。
echo -e "\n. $HOME/.asdf/asdf.sh" >> ~/.zshrc
source ~/.zshrc
Linuxの場合やbashの場合などの設定、その他詳細については公式ドキュメントを参考にしてください。
プラグインのインストール
asdfで言語・ツールのバージョン管理を行うためには、まず始めに各言語・ツールに対応したプラグインをインストールする必要があります。
利用できるプラグインのリストは下記のコマンドで確認できます。
asdf plugin list all
出力結果には <プラグイン名> <プラグインのURL>
の形式でプラグインが列挙されます。
実際にプラグインをインストールするには下記のコマンドを使います。
asdf plugin add <プラグイン名> <プラグインのURL>
例えば、kubectlプラグインをインストールするには次のようにします。
asdf plugin add kubectl https://github.com/Banno/asdf-kubectl.git
インストール済みのプラグインは下記コマンドで確認できます。
asdf plugin list
バージョン管理
プラグインの準備が完了したら、お目当ての言語・ツールのバージョン管理が可能となります。
まず、利用できるバージョンのリストを下記コマンドで確認できます。
asdf list all <プラグイン名>
# 例
asdf list all kubectl
次のコマンドで、インストールしたいバージョンを指定してインストールできます。
asdf install <プラグイン名> <バージョン>
# 例
asdf install kubectl 1.17.12
インストール済みのバージョン一覧を確認したい場合は下記コマンドを実行します。
asdf list <プラグイン名>
# 例
asdf list kubectl
インストールしただけでは各言語・ツールを使えるようにはならず、利用するバージョンを指定して設定する必要があります。
グローバル環境で使うバージョンを固定するには、asdf global
コマンドを利用します。
asdf global <プラグイン名> <バージョン>
# 例
asdf global kubectl 1.17.12
ディレクトリ単位でバージョン固定をしたい場合は、asdf local
コマンドを利用します。
asdf local <プラグイン名> <バージョン>
# 例
asdf local kubectl 1.17.12
現在の環境で有効となっているバージョンを確認するためには、次のコマンドを実行します。
asdf current <プラグイン名>
# 例
asdf current kubectl
終わりに
今回はバージョン管理ツールのasdfについて、kubectlの管理を例として紹介しました。
kubectl以外にもterraformやhelmのバージョン管理にも重宝しています。勿論、言語系のバージョン管理ツールとしても十分有用です。(ツールを一本化したいという動機からanyenvで管理していたものを移行しましたが、今のところ不便はないです)
プラグインがない場合は自作することも可能です(参考)。
興味がありましたら是非使ってみてください!