Terraform のバージョン管理を tfenv から tenv に移行した話
2025-03-03
azblob://2025/03/03/eyecatch/2025-03-03-terraform-tfenv-to-tenv-migration-000.png

こんにちは、FIXERの村上滉樹です!

皆さま、Terraform のバージョン管理では、どのツールを使っていますか?

私は Terraform をベータ版から利用してきた経緯もあり、長らく tfenv を愛用していましたが、つい先日 tenv に移行しました!

tfenv → tenv に移行した理由

2025年3月時点、tfenv の最終更新は2022年7月15日となっており、約3年間更新が止まっています。現状の機能で十分利用できるものの、この長期間の更新停止は懸念材料になりました。特に脆弱性対策HashiCorpによる破壊的変更に対応できるかといった将来的なリスクを考慮し、代替ツールを検討するに至りました。

▼ tfenv - GitHub

https://github.com/tfutils/tfenv

▼ tenv - GitHub

https://github.com/tofuutils/tenv

tenv をインストールしてみた

本ブログでは、Mac端末で導入検証しています。

(1)Homebrew で tenv をインストールする

brew install tenv

(2)インストールできたか確認する

tenv --version

tenv version 4.2.4

tenv でTerraformのバージョンを管理してみた

まずは、ローカル(Mac)端末で Terraform を利用できるか確認します。基本的な使い方は、tfenv と同様です。

(1)terraform --version を実行する

terraform --version

No version files found for Terraform, fallback to latest-allowed strategy
Scan project to find IAC files
No Terraform version requirement found in project files, fallback to latest strategy
No compatible version found locally, search a remote one...
Fetching all releases information from https://releases.hashicorp.com/terraform/index.json
Found compatible version remotely : 1.11.0
Auto-install is disabled. To install Terraform version 1.11.0, you can set environment variable TENV_AUTO_INSTALL=true, or install it via any of the following command: 'tenv terraform install', 'tenv terraform install 1.11.0'
Failed to detect a version allowing to call terraform : no compatible version found locally

事前に terraform 環境をセットアップしていない場合は、「terraformコマンドを実行するための互換性のあるバージョンがローカルに見つからなかったため、失敗」という意味のエラーが出力されます。

想定内のエラーメッセージです。terraform をインストールしていきます。

(2)インストール可能な Terraform バージョン を検索する

# 降順でバージョンを表示する
tenv tf list-remote --descending

Fetching all releases information from https://releases.hashicorp.com/terraform/index.json
1.12.0-alpha20250213
1.11.0
1.11.0-rc3
...

tf の部分は、terraform で記述しても実行可能です。本ブログでは、1.11.0 を導入してみます。

(3)terraform 1.11.0 バージョンをインストールする

tenv tf install 1.11.0

Installing Terraform 1.11.0
Fetching release information from https://releases.hashicorp.com/terraform/1.11.0/index.json
Downloading https://releases.hashicorp.com/terraform/1.11.0/terraform_1.11.0_darwin_arm64.zip
Downloading https://releases.hashicorp.com/terraform/1.11.0/terraform_1.11.0_SHA256SUMS
Downloading https://releases.hashicorp.com/terraform/1.11.0/terraform_1.11.0_SHA256SUMS.sig
Downloading https://www.hashicorp.com/.well-known/pgp-key.txt
Installation of Terraform 1.11.0 successful

(4)ローカル(Mac)端末 で利用可能なインストール済みの Terraform バージョン を確認する

tenv tf list --descending

1.11.0 (never used)

(5)ローカル(Mac)端末 で利用したい Terraform バージョン を定義する

tenv tf use 1.11.0

Written 1.11.0 in /Users/<ホームディレクトリ名>/.tenv/Terraform/version

念の為、現在 適用されている Terraform バージョン を確認します。

tenv tf list --descending

* 1.11.0 (never used, set by /Users/<ホームディレクトリ名>/.tenv/Terraform/version)

「set by」表記があるため、現在のローカル(Mac)端末では 1.11.0 が適用されています。

tenv で 不要な Terraformのバージョンを削除してみた

古いTerraform バージョンを ローカル環境に永続的に残しておく必要はありません。オペミスに繋がる恐れもあるため、アンインストールします。

本ブログでは、事前に削除検証用で 1.7.0 をインストールしています。

tenv tf list --descending

  1.11.0 (never used)
* 1.7.0 (never used, set by /Users/<ホームディレクトリ名>/.tenv/Terraform/version)

(1)terraform 1.7.0 バージョンをアンインストールする

tenv tf uninstall 1.7.0

Uninstallation of Terraform 1.7.0 successful (directory /Users/<ホームディレクトリ名>/.tenv/Terraform/1.7.0 removed)

(2)アンインストールされたか確認する

tenv tf list --descending

1.11.0 (never used)

適用済みのバージョンを削除すると、適用バージョンがリセットされます

tf use オプション で再適用を行いましょう。

さいごに

tenv コマンドの使い方は マスターできましたか?

tenv は、Terraform 以外にも OpenTofuやTerragrunt、Atmos のバージョン管理もサポートしています。どのツールもアップデートサイクルが短期間で登場するため、品質管理のためにも、バージョン管理ツールは利用しましょう。

また、Terraform バージョンは Terraform プロジェクトフォルダに .terraform-version または .tfswitchrc ファイルを配置することで、tenv tf use と同じ設定を行うことができます。まだ導入ができていないプロジェクトには、バージョン管理を強制できるため、導入することも検討しましょう。

プロジェクト担当のメンバー全員が同じバージョンを利用するためにどうすればいいのかに悩まれている管理者や企業組織は、ぜひ tenv を利用してみてください!