皆様Terraformを利用されていますでしょうか。
私もAWSエンジニアとして、よく利用していますが、その中でもTerraformのバージョンの切り替えツールとして「tenv」というものがあります。
今回は、「tenv」について紹介&解説していきたいと思います。
1. はじめに
Terraformのバージョン管理の重要性
Terraformを利用する場合、非常に重要なことの1つとして、「バージョンを揃えて開発する」ということがあげられます。
例えば、Terraformの以下の2つのバージョンについて比較してみます。
- v1.5.0 # 2023年6月12日にリリース
- v1.11.0 # 2025年2月27日にリリース
Terraformは非常に開発が盛んであり、上記のバージョン間の1年半の間には、様々な機能アップデートがなされています。
- importブロックの追加(v1.5.0)
- terraform testコマンドの追加(v1.6.0)
- ephemeral リソースの追加(v1.10.0)
- S3単体でのステートロック機能がGA(v1.11.0)
・・・
これらの機能はコード上で表現されるため、(当たり前かもしれませんが)v1.11.0でリリースされた機能はv1.5.0で利用しようとすると、エラーが起こってしまいます。
またそれぞれのバージョンで、非互換なアップデートが入ることもあります。
そのため、Terraformでは、利用できるTerraformバージョンを固定する方法として、terraformブロック内にrequired_version
という属性を持っています。
terraform {
required_version = ">= 1.11.0" # 1.11.0 以上に固定
}
これで万事解決!
かと思いきや、落とし穴があります。
例えば、
- Terraformの新機能を試したい
- 別の案件では、Terraform v1.9.0を利用しているので、揃えてほしい
- 特定バージョンでの致命的なバグが見つかったため、マイナーバージョンをあげる必要がある
こういったときに、都度Terraformをインストールするのではなく、簡単にバージョン切り替えできるツールがtenv
です。
tenvとは何か
tenvは、Terraformのバージョンを簡単にインストール・管理・切り替えできるツールです。
tenv を活用することで、システム全体に影響を与えることなく、異なるバージョンのTerraformをスムーズに切り替えることができます。
またTerraformだけでなく、以下のツールについても統合してバージョンのインストール・管理・切り替えが可能です。
- OpenTofu
- Terragrunt
- Atmos
tfenvとの違い
tfenvも同様に、Terraformのバージョンを簡単にインストール・管理・切り替えできるツールです。
tfenvは以前広く利用されていましたが、Bashスクリプトで実装されており、Windows環境での利用が制限されていました。 (tenvはGo言語で実装されており、様々なプラットフォームで利用可能)
また、開発も2023年末で停止状態であり、現在はtenvでのバージョン切り替えがメジャーになりつつあります。
2. tenvのインストール
tenvのインストールについて説明します。
対応環境
2025年3月8日時点
- MacOS
- Windows
- Arch Linux
- Alpine Linux
- Linux
- Ubuntu
- NixOS
事前準備
go言語のインストールが必要です。
今回は他記事に任せます。
MacOSでのGoインストール
WindowsでのGoインストール
LinuxでのGoインストール
最終的に以下コマンドを実行し、バージョン情報が出ればインストール完了です。
> go version
go version go1.23.5 windows/amd64
インストール方法
Windows
Chacolatey、Scoop、Nixが利用可能です。
Chocolatey による tenv インストール:
choco install tenv
Scoop による tenv インストール:
scoop install tenv
Nix パッケージ マネージャーによる tenv インストール:
nix-env -i tenv
MacOS
HomeBrewによる tenv インストール
brew install tenv
Linux
snap install tenv
手動インストール(バイナリダウンロード)
Windowsでのやり方を解説していきます。
1.以下URLにアクセス
2.tenv_v4.2.4_Windows_x86_64.zipをクリックし、ローカルにダウンロードし解凍
以下コマンドで設定する場合、
# インストール先ディレクトリを作成
$basePath = 'C:\terraform\'
mkdir $basePath
# 最新バージョンをダウンロード
$uri = 'https://github.com/tofuutils/tenv/releases/download/v4.2.0/tenv_v4.2.0_Windows_x86_64.zip'
Invoke-WebRequest -Uri $uri -OutFile './tenv_windows_x86_64.zip'
# 解凍
Expand-Archive -LiteralPath './tenv_windows_x86_64.zip' -DestinationPath $basePath
# ダウンロードしたzipを削除
Remove-Item -LiteralPath './tenv_windows_x86_64.zip'
# 環境変数に保存
[Environment]::SetEnvironmentVariable('PATH', [Environment]::GetEnvironmentVariable('PATH', 'User') + ";C:\tofuutils\tenv\", 'User')
最終的に以下コマンドを実行し、バージョン情報が出ればインストール完了です。
> tenv --version
tenv version v4.2.4
3. tenvの基本的な使い方
特定バージョンのインストール(1.10.0の場合)
> tenv tf install 1.10.0
Installing Terraform 1.10.0
Fetching release information from https://releases.hashicorp.com/terraform/1.10.0/index.json
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_windows_amd64.zip
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_SHA256SUMS
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_SHA256SUMS.sig
Downloading https://www.hashicorp.com/.well-known/pgp-key.txt
Installation of Terraform 1.10.0 successful
バージョンを省略した場合、.\tenv\Terraform\versionで指定されているバージョンがインストールされます。
.\tenv\Terraform\versionが存在しない場合、最新バージョンがインストールされます。
インストール済みバージョンの確認
> tenv tf list
1.10.0 (never used)
インストール可能なバージョンの確認
tenv tf list-remote
Fetching all releases information from https://releases.hashicorp.com/terraform/index.json
0.1.0
0.1.1
・
・
・
1.11.0
1.11.1
1.12.0-alpha20250213
バージョンの切り替え
> tenv tf use 1.10.0
Written 1.10.0 in C:\Users\user\.tenv\Terraform\version
TENV_AUTO_INSTALL=trueに環境変数を設定すると、useコマンド実行時に該当バージョンがインストールされていない場合、自動インストールすることができます
バージョンのアンインストール(1.9.0の場合)
tenv tf uninstall 1.9.0
tfの部分を変更することで、以下のツールにもtenvを利用可能です。
tofu - OpenTofu
tg - Trragrunt
at - atmos
7. まとめ
Terraformのバージョン管理は、プロジェクトの安定性と開発の効率化に直結します。
tenv を利用すれば、複数のTerraformバージョンを簡単に管理でき、非常に便利です。
Terraformを日常的に扱うエンジニアなら、ぜひ導入してみてください!
8. 参考資料