はじめに
最近、Terraform に入門して 「コードでインフラを管理できるの!?すごっ!」 となった日野です。業務では Rails と Vue.js を触ることが多く、 Ruby のバージョン管理には rbenv を使用しています。
なぜ rbenv と tfenv?
なぜこの組み合わせ?と思った方もいると思います。
Terraform version manager inspired by rbenv
これは tfenv の README からの引用ですが、ここからも分かる通り、 tfenv は rbenv からインスパイアされて作られたようです。なので、できることは rbenv と似ているのですが、下記の違いから混乱することがよくありました。
- インターフェースがけっこう違う
- 似たようなコマンドはあるが、挙動が微妙に違う
そのため、本記事では rbenv でよく使うコマンドに対応した tfenv のコマンドをまとめてみました。「rbenv を使ったことがあるかつ、これから tfenv の使い方を学びたい」という方の役に立てれば幸いです。(筆者は tfenv を使い始めてまだ日が浅いので間違った理解をしているかもしれません。その場合はコメント等で教えていただけると助かります🙏)
tfenv とは
tfenv を知らない方もいるかもしれないので、さらっとだけ説明を・・
tfenv は Terraform のバージョンを管理するツールで、よくある *env の Terraform 版です。
tfenv を使用することで、プロジェクト内で使用する Terraform のバージョンを固定することができます。
よく使うコマンド
ここから rbenv でよく使ってるコマンドをベースに見ていきます。
*envでインストール可能なバージョンのリストを取得する
rbenv install --list-all
基本的にはこれで取得できます。ただ、rbenv の場合、比較的新しいバージョンをインストールしようとすると、該当のバージョンが表示されない・・ということがよくあり、筆者の場合はbrew upgrade ruby-build
を実行することでリストを更新しています。
tfenv list-remote
tfenv の場合は自動でリストを更新してくれるので、別途コマンドを実行する必要がないです。
実行するコマンドが少ないのは良いですね・・!
プロジェクトで使用するバージョンを固定する
rbenv local <設定したいバージョン>
実行すると.ruby-version
が作成され、このファイルを元に自動で Ruby のバージョンが切り替わります。
tfenv use <設定したいバージョン> と .terraform-version を手動で修正
tfenv use <設定したいバージョン>
を実行しても、 .terraform-version
には反映されないため、手動で修正する必要があります。
正直 tfenv use を実行する理由がよく分かってないのですが、以前 tfenv use をやらずに作業していたらエラーになったような記憶(うる覚え)があるので、一応実行するようにしています。(この辺り詳しい方がいれば教えていただけると助かります🙏)
*-version に記載されているバージョンがインストールされていなかった時の挙動
rbenv の場合
rbenv の場合、rbenv versions
を実行することで、既にインストールされているバージョンのリストを取得できます。今回は下記の状態になっているとします。
$ rbenv versions
system
2.7.4
* 2.7.5 (set by ...)
3.1.0-preview1
次に、.ruby-version
にインストールされていないバージョンを設定します。
- 2.7.5
+ 2.7.2
この状態で ruby のコマンドを実行してみます。
$ ruby -v
rbenv: version `2.7.2' is not installed (set by ...)
すると、設定したバージョンはまだインストールされていないためエラーが表示されます。つまり、rbenv の場合は事前に変更後のバージョンをインストールしておく必要があります。
tfenv の場合
tfenv の場合は、tfenv list
を実行することで、既にインストールされているバージョンのリストを取得できます。今回は下記の状態になっているとします。
$ tfenv list
1.1.1
1.1.0
* 1.0.11 (set by ...)
1.0.10
同様に.terraform-version
にインストールされていないバージョンを設定します。
```diff:.terraform-version`
- 1.0.11
- 1.0.9
この状態で terraform のコマンドを実行してみます。
```terminal
$ terraform version
version '1.0.9' is not installed (set by ...). Installing now as TFENV_AUTO_INSTALL==true
Installing Terraform v1.0.9
...
なんと、tfenv の場合は自動でインストールしてくれるので、事前にインストールしておく必要がありません。試しに tfenv list
を実行してみます。
$ tfenv list
1.1.1
1.1.0
1.0.11
1.0.10
* 1.0.9 (set by ...)
ちゃんとインストールされて、バージョンも切り替わっているようです。この挙動を始めて知った時は感動しました・・チームで開発するときは .terraform-version
をコミットに含めると思うのですが、誰かが Terraform のバージョンを変えても、他の人は自動でバージョンが切り替わってくれるので楽ですよね・・!
終わりに
今回は rbenv でよく使うコマンドに対応した tfenv のコマンドをまとめました。自分は今のところ今回紹介したコマンドで事足りているのですが、他にも便利なコマンドをご存知の方がいればコメントで教えていただけると嬉しいです!