バージョン管理ツール「asdf」を使ってみる | Dev Driven 開発・デザインチーム バージョン管理ツール「asdf」を使ってみる | 働くひとと組織の健康を創る iCARE

BLOG

バージョン管理ツール「asdf」を使ってみる

MiyakawaKazuya
2020/09/28

こんにちは、インフラエンジニアのずやです!

今回は、使ってみてとても便利だったバージョン管理ツールのasdfについて紹介したいと思います!

背景

弊社ではいくつかのプロジェクトでKubernetesを利用しており、複数のKubernetesクラスターを運用しています。各クラスターのバージョンはアップデートのタイミングの都合などで統一されておらず、複数クラスターを管理する上でクライアントツールであるkubectlのバージョン管理が必要だと感じていました。
(クラスターとkubectlのバージョンが異なっていても操作は可能ですが、バージョンアップに伴うAPIの破壊的変更がある場合もあるので、バージョンは揃えておく方が無難です)

そんな折にasdfというツールがあると知りました。

asdfとは

asdfはrubyやnodeなどの各種プログラミング言語に加え、kubectlやterraformなどの多種多様なツールのバージョン管理を行うことができるCLIツールです。言語以外も管理できるanyenvというようなイメージです。

https://github.com/asdf-vm/asdf

https://asdf-vm.com/#/

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で管理していたものを移行しましたが、今のところ不便はないです)

プラグインがない場合は自作することも可能です(参考)。

興味がありましたら是非使ってみてください!