dctlenvでdriftctlのバージョン管理を行う
前回の記事では、IaCの管理対象外のリソースを検知するツールであるdriftctlの紹介をしました。
前回紹介したように、driftctlはGo言語製ということもあり、インストール自体は非常に簡単です。
しかしながら、CLIの新バージョンがリリースされるたびに切り替え作業を行うのはなかなか一手間です。
そこで、早くもdriftctlのバージョン管理ツールであるdctlenvというツールが登場しました。
dctlenvとは
dctlenvとは、その名の通りdriftctlのバージョン切り替えをサポートするツールです。
例えばTerraformであればtfenvか、あるいはasdf-vmのTerraformプラグインを利用することで、
複数バージョンの切り替えを簡単に行うことができます。
dctlenvは、公式READMEにもある通り先のtfenvにインスパイアされており、
tfenvやrbenvなどを利用したことがあるユーザーであれば非常にとっつきやすいツールと言えます。
それでは、早速ハンズオンしてみましょう。
環境
- OS: MacOS Catalina 10.15.7
- dctlenv: 0.0.4-2-gc013c6c
- Shell: zsh
手順
- dctlenvのGitプロジェクトをホームディレクトリ配下にクローン
$ git clone https://github.com/wbeuil/dctlenv ~/.dctlenv
- Shellの設定を追加
zshの場合は、以下のように追加します。
$ echo 'export PATH="$HOME/.dctlenv/bin:$PATH"' >> ~/.zshrc
その他のShellの場合は、公式ドキュメントを参照してください。
-
PATHを読み直すため、シェルを再起動
-
dctlenvのバージョン確認
$ dctlenv version
dctlenv 0.0.4-2-gc013c6c
バージョンが正常に表示されれば、インストール完了です。
- driftctlの利用可能バージョンを確認
以下のように、現時点での最新版が0.3.0だということが確認できました。
$ dctlenv list-remote
0.1.0
0.1.1
0.2.0
0.2.1
0.2.2
0.2.3
0.3.0
- 確認したバージョンのCLIをインストール
先ほど確認した最新バージョンをインストールしてみます。
$ dctlenv install 0.3.0
Installing driftctl v0.3.0
Downloading release tarball from https://github.com/cloudskiff/driftctl/releases/download/v0.3.0/driftctl_darwin_amd64
########################################################################################################################################## 100.0%########################################################################################################################################## 100.0%
Making the /Users/ryoichi/.dctlenv/versions/0.3.0/driftctl binary executable
Installation of driftctl v0.3.0 successful. To make this your default version, run 'dctlenv use 0.3.0'
- インストールしたバージョンを使用
以下のように、利用するバージョンを指定します。
$ dctlenv use 0.3.0
Switching version to v0.3.0
Switching completed
次のようにdriftctlのバージョンがセットされていればOKです。
$ driftctl version
v0.3.0
- 別バージョンをインストール
インストール確認はできたので、切り替えの確認を行います。
今回は、1つ古い0.2.3をdctlenv install
し、そのままdctlenv use
します。
$ dctlenv install 0.2.3
Installing driftctl v0.2.3
Downloading release tarball from https://github.com/cloudskiff/driftctl/releases/download/v0.2.3/driftctl_darwin_amd64
########################################################################################################################################## 100.0%########################################################################################################################################## 100.0%
Making the /Users/ryoichi/.dctlenv/versions/0.2.3/driftctl binary executable
Installation of driftctl v0.2.3 successful. To make this your default version, run 'dctlenv use 0.2.3'
$ dctlenv use 0.2.3
Switching version to v0.2.3
Switching completed
- バージョン切り替え確認
先ほどdctlenv use
したバージョンに切り替わっていることが確認できました。
$ driftctl version
v0.2.3
また、dctlenv list
コマンドで現在インストールされているバージョンの一覧と、
今現在有効化されているバージョンが確認できます。
$ dctlenv list
0.3.0
* 0.2.3 (set by /Users/ryoichi/.dctlenv/version)
- もう一度0.3.0に戻す
すでにインストールされているバージョンに切り替える場合は、次のようにdctlenv use
し直すだけでOKです。
$ dctlenv use 0.3.0
Switching version to v0.3.0
Switching completed
$ driftctl version
v0.3.0
$ dctlenv list
* 0.3.0 (set by /Users/ryoichi/.dctlenv/version)
0.2.3
このように、お手軽にバージョン切り替えを行うことができました。
- サブコマンドの補完設定
最後に、dctlenvのサブコマンドの補完設定を有効化します。
今回はzshなので、fpathが通っている/usr/local/share/zsh/site-functions
に補完関数をコピーします。
なお、念のためパッケージマネージャー側が触るようなディレクトリに置きたくない場合は、別途任意の場所にfpathを通してコピーする形でもOKだと思います。
$ cp ~/.dctlenv/completions/dctlenv.zsh /usr/local/share/zsh/site-functions/_dctlenv
設定後Shellを再起動すると、次のように補完設定が有効化されます。
$ dctlenv
help -- Show the help output
install -- Install a specific version of driftctl
list -- List all installed versions
list-remote -- List all installable versions
uninstall -- Uninstall a specific version of driftctl
use -- Switch a version to use
version -- Display dctlenv version
まとめ
このように、dctlenvを利用するとdriftctlのバージョン切り替えを非常に簡単に行うことができます。
driftctl自体がまだリリースされて間もないツールですが、エコシステム含めてここまで早くリリースされるとは
コミュニティの勢いを感じます。
driftctlはまだ発展途上のツールであり、これから頻繁にバージョンアップが繰り返されることが予想されるので、
早い段階で導入を済ませておくと良さそうです。
あとはツールの特性上そこまで必要でないかもしれませんが、
同種のツールに実装されることの多い、ディレクトリごとにバージョンを固定する機能があると便利な場合もあるかと思いますので、
個人的にはその辺りの機能追加を期待しています。
Discussion