1
Help us understand the problem. What are the problem?
Organization

rbenvユーザーのためのtfenvの使い方

はじめに

最近、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にインストールされていないバージョンを設定します。

.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にインストールされていないバージョンを設定します。

.terraform-version`
- 1.0.11
+ 1.0.9

この状態で terraform のコマンドを実行してみます。

$ 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 のコマンドをまとめました。自分は今のところ今回紹介したコマンドで事足りているのですが、他にも便利なコマンドをご存知の方がいればコメントで教えていただけると嬉しいです!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?