Terraformのバージョン管理を劇的に快適に！「tenv」のインストールから使い方まで解説

皆様Terraformを利用されていますでしょうか。

私もAWSエンジニアとして、よく利用していますが、その中でもTerraformのバージョンの切り替えツールとして「tenv」というものがあります。

今回は、「tenv」について紹介＆解説していきたいと思います。

# 1. はじめに

## Terraformのバージョン管理の重要性
Terraformを利用する場合、非常に重要なことの１つとして、「バージョンを揃えて開発する」ということがあげられます。

例えば、Terraformの以下の２つのバージョンについて比較してみます。
 - 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
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インストール

https://zenn.dev/y16ra/articles/251c3770365689

### WindowsでのGoインストール

https://www.sejuku.net/blog/124914

### 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でのやり方を解説していきます。

１．以下URLにアクセス

https://github.com/tofuutils/tenv/releases

２．tenv_v4.2.4_Windows_x86_64.zipをクリックし、ローカルにダウンロードし解凍
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625964/30f48838-c08b-4703-8f98-23063310e3ee.png)

３．PATHを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625964/699e398b-e4cc-4157-8d8a-9f19ab90debb.png)

以下コマンドで設定する場合、
```PowerShell
# インストール先ディレクトリを作成
$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
```
:::note warn
バージョンを省略した場合、.\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
```
:::note info
TENV_AUTO_INSTALL=trueに環境変数を設定すると、useコマンド実行時に該当バージョンがインストールされていない場合、自動インストールすることができます
:::

### バージョンのアンインストール(1.9.0の場合)
```
tenv tf uninstall 1.9.0
```

:::note info
tfの部分を変更することで、以下のツールにもtenvを利用可能です。
tofu - OpenTofu
tg - Trragrunt
at - atmos
:::

## 7. まとめ
Terraformのバージョン管理は、プロジェクトの安定性と開発の効率化に直結します。
tenv を利用すれば、複数のTerraformバージョンを簡単に管理でき、非常に便利です。
Terraformを日常的に扱うエンジニアなら、ぜひ導入してみてください！ 

## 8. 参考資料

https://github.com/tofuutils/tenv

https://dev.classmethod.jp/articles/try-tenv-terraform-version-manager/