asdfでmacOSにTerraformをインストールする

Terraformを使う必要があったので、asdfでTerraformをインストールしました。

Terraformのインストール

他の手段もありますが、バージョンアップをすることが多いため、asdfを使ってインストールします。

Terraformプラグインの追加

plugin addコマンドでTerraformプラグインを追加します。

$ asdf plugin add terraform
updating plugin repository...HEAD is now at b03baaa feat: add asdf-oapi-codegen plugin (#864)

plugin listコマンドで追加済みのプラグインをリストし、terraformがあれば追加されています。

$ asdf plugin list
nodejs
python
terraform
yarn

Terraformをインストールする

list allコマンドでTerraformの利用可能なすべてのバージョンをリストします。

$ asdf list all terraform
・・・
1.5.0
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
1.5.6
1.6.0-alpha20230719
1.6.0-alpha20230802
1.6.0-alpha20230816

今回は1.5.6をインストールすることにします。

installコマンドでバージョンを指定してインストールします。

$ asdf install terraform 1.5.6
Downloading terraform version 1.5.6 from https://releases.hashicorp.com/terraform/1.5.6/terraform_1.5.6_darwin_arm64.zip
Skipping verifying signatures and checksums either because gpg is not installed or explicitly skipped with ASDF_HASHICORP_SKIP_VERIFY
Cleaning terraform previous binaries
Creating terraform bin directory
Extracting terraform archive

ログを見ても適切なバイナリ(darwin_arm64)が使用されていることがわかりますが、あとでバージョンを確認したときにもう一度確認しておきましょう。

今回インストールしたバージョンは普段使いするバージョンですので、globalコマンドを使ってグローバルに使用できるようにします。

$ asdf global terraform 1.5.6

複数のプロジェクトを担当していて、プロジェクトによって使用するバージョンが異なる場合は、localでプロジェクトごとにバージョンを制御できるようにしてください。

インストールできたことを確認するために-vオプションを指定してバージョンを確認します。

$ terraform -v
Terraform v1.5.6
on darwin_arm64

インストール時に指定したバージョンで、バイナリの種類も適切であることを確認できました。

まとめ

Terraformのバージョン管理の手段としては、tfenvが有名です。

こちらでもいいのですが、せっかくasdfをインストールしているので、asdfを使ってインストールしてみました。待ち時間もほとんどなくサクッとインストールすることができました。

asdfでよく使うコマンド集(アップデート、プラグイン、バージョン)

asdfの中でもよく使う、アップデート関連、プラグイン関連、バージョン関連のコマンドについて解説します。

アップデート関連

プラグイン自体のアップデートや追加したプラグインのアップデートについて解説します。

asdf自体のアップデート

それほど頻繁に実施する必要はりませんが、asdf自体をアップデートする場合は、以下のコマンドを実行します。

asdf update

すべてのプラグインのアップデート

特段理由がなければすべてのプラグインをアップデートする方が楽です。すでに追加済みのプラグインをすべてアップデートするときは、以下のコマンドを実行します。

asdf plugin-update --all

特定のプラグインのみをアップデート

たくさんのプラグインを追加していて全部アップデートするのは時間がかかる、バージョンをあげたくないプラグインがある、など何かしらの理由があって特定のプラグインのみをアップデートしたいときは、以下のコマンドを実行します。

asdf plugin-update <プラグイン名>

<プラグイン名>には、アップデートしたいプラグインを指定します。

プラグイン関連

プラグインの表示、追加、削除など基本的な操作について解説します。

プラグインの一覧表示

プラグインを一覧表示するときは、以下のコマンドを実行します。

asdf plugin list all

大量に表示されますので、Grepで対象を絞り込む方がよいでしょう。

$ asdf plugin list all | grep node                                                                                                                                                                                
nodejs                       *https://github.com/asdf-vm/asdf-nodejs.git

上記の例では、Node.jsのプラグイン名を調べるためににnodeでGrepし、nodejsであることが分かりました。

現在インストール中のプラグインの一覧表示

すでにインストール済みのプラグインをしたいときは、以下のコマンドを実行します。

asdf plugin list

プラグインの追加

プラグインを追加するときは、以下のコマンドを実行します。

asdf plugin add <プラグイン名>

<プラグイン名>のところは、追加したいプラグインの名前を指定します。

プラグインの削除

プラグインを削除するときは、以下のコマンドを実行します。

asdf plugin remove <プラグイン名>

<プラグイン名>のところは、削除したいプラグインの名前を指定します。

バージョン関連

バージョンに関する操作について解説します。

使用可能なバージョンの一覧表示

特定のプラグインの使用可能なバージョンを一覧表示したいときは、以下のコマンドを実行します。

asdf list all <プラグイン名>

こちらもGrepを併用することでインストールしたいバージョンを特定するのがよいでしょう。

asdf list all nodejs | grep ^11.

上記のでは、nodejsパッケージのうち、11系だけをGrepで絞り込んでいます。

インストール済みのバージョンを一覧表示

すでにインストール済みのバージョンを一覧表示したいときは、以下のコマンドを実行します。

asdf list <プラグイン名>

バージョンをインストールする

指定したバージョンをインストールするときは、以下のコマンドを実行します。

asdf install <プラグイン名> <バージョン>

<プラグイン名>はインストールしたいプラグインの名前、<バージョン>はインストールしたいバージョンを指定します。

バージョンをアンインストールする

指定したバージョンをアンインストールするときは、以下のコマンドを実行します。

asdf uninstall <プラグイン名> <バージョン>

<プラグイン名>はアンインストールしたいプラグインの名前、<バージョン>はアンインストールしたいバージョンを指定します。

バージョンの設定

asdfでは、globallocalshellの3つの設定範囲があります。使用目的によって適切な設定範囲を選択することで、効率よくバージョン管理を行うことができます。

globalバージョンの設定

globalバージョンは、特に指定がない場合に使用されるバージョンです。globalバージョンを設定するときは、以下のコマンドを実行します。

asdf global <プラグイン名> <バージョン>

<プラグイン名>はglobalバージョンを設定したいプラグインの名前、<バージョン>はglobalバージョンに設定したいバージョンを指定します。

globalバージョンは、システム全体で使用するバージョンを設定するとよいでしょう。言い方を変えると、特段理由がない場合に使用するバージョンであるとも言えます。例えば、メインストリームのバージョンやLTSのバージョンを設定しておく運用方法が適切です。

localバージョンの設定

特定のフォルダ(ディレクトリ)内でのみ有効なバージョンです。globalバージョンで使用しているバージョンとは異なるバージョンを使いたい場合に使用するとよいでしょう。

localバージョンを設定するときは、以下のコマンドを実行します。

asdf local <プラグイン名> <バージョン>

現在のフォルダ(ディレクトリ)およびそのサブフォルダ(ディレクトリ)ではlocalバージョンが有効になります。このとき、.tool-versionsが作成され、使用するプラグインとバージョンが記録されます。

localバージョンは、プロジェクトで使用するバージョンを指定するために使用するとよいでしょう。
例えば、普段はPython 3.9.xを使用していますが、今携わっているプロジェクトでは、Python 3.7.xでないとビルドができないとしましょう。
この場合、globalバージョンは3.9.xですが、プロジェクトのフォルダ(ディレクトリ)内ではPython 3.7.xをlocalバージョンに指定しておくことで、このプロジェクト内だけは3.7.xを使用することができます。
もし、複数の保守プロジェクトを抱えている場合であれば、この恩恵はとても大きいものになります。

shellバージョンの設定

シェル内でのみ有効なバージョンです。使用頻度は高くありませんが、使用するコマンドが特定のバージョンを要求する場合などに重宝します。

shellバージョンを設定するときは、以下のコマンドを実行します。

asdf shell <プラグイン名> <バージョン>

これは現在のシェルの設定が変わるわけではなく、新にシェルを起動し、そこでのバージョンが設定したバージョンになります。そのため、使用を終了する場合は、exitコマンドで抜けることができます。

shellバージョンは、特定のコマンドやツールを実行する際に、特定のバージョンまたは特定のバージョン以下でないと実行できない、といった場合に使用するとよいでしょう。
例えば、プロジェクトでは、Node.js 16.xを使用しています。リリース用のツールもNode.jsで書かれていますが、古いツールなためNode.js 11.xでないと動作しません。
こういった場合には、globalバージョンまたはlocalバージョンは16.xを設定し、ツールを実行するときだけ、shellバージョンに11.xを設定してコマンドを実行する運用にする方が、バージョンアップ対応を行うよりもコストメリットがあります。

モバイルバージョンを終了