Terraformを使用していると、.terraform.lock.hclファイルがいつの間にか存在していて、その役割がわからずGitで管理して良いかどうかよく迷っています。
hashicorpの公式ドキュメントを読みながら調査してみました。
.terraform.lock.hclファイルとは
HashiCorpの公式ドキュメントに以下の説明がありました。
"The dependency lock file allows Terraform to select the same package versions consistently across different runs, regardless of when those runs occur or what machine they run on."
日本語訳:依存関係ロックファイルにより、Terraformは実行時期や実行マシンに関係なく、異なる実行間で一貫して同じパッケージバージョンを選択できる。
引用元: https://developer.hashicorp.com/terraform/language/files/dependency-lock
.terraform.lock.hclは、Terraformが使用するプロバイダーの依存関係とバージョン情報を記録するロックファイルとのことでした。
なぜ重要なのか
HashiCorpの公式ドキュメントでは以下のように説明されていました。
"The dependency lock file ensures that Terraform will always install the same package versions for a given configuration, regardless of when or where you run Terraform."
日本語訳:依存関係ロックファイルは、Terraformを実行する時期や場所に関係なく、特定の設定に対して常に同じパッケージバージョンをインストールすることを保証します。
引用元: https://developer.hashicorp.com/terraform/language/files/dependency-lock
.terraform.lock.hclファイルは、プロジェクト内での一貫性を保ち、再現可能な環境を維持するのに重要な役割を果たします。別の端末や実行環境からTerraformコマンドを実行した際に動作に差異が生まれにくくなりそうです。
.gitignoreに含めるべきではない(Git管理した方がよい)理由
HashiCorpの公式見解では、.terraform.lock.hclファイルは.gitignoreに含めるべきではなく、バージョン管理システム(Gitなど)にコミットすることを推奨しています:
"You should include this file in your version control repository so that you can discuss potential changes to your external dependencies via code review, just as you would discuss potential changes to your configuration itself."
日本語訳:設定自体の変更を議論するのと同様に、外部依存関係の潜在的な変更についてコードレビューを通じて議論できるように、このファイルをバージョン管理リポジトリに含めるべきです。
引用元: https://developer.hashicorp.com/terraform/language/files/dependency-lock
.terraform.lock.hcl自体がGit管理されることで依存関係までコードレビューの対象にできるのは確かにイメージしやすかったです。
まとめ
.terraform.lock.hclファイルは、Terraformプロジェクトの一貫性と再現性を保つ重要な要素ということでした。
Git管理した方が良さそうなので、.gitignoreにはまずは含めないで進めていこうと思いますが、またチーム開発においての別のやり方や考え方があれば柔軟に試していきたいと思います。