terraform fmtをpre-commitで自動化

2025/01/05に公開1

前提

以下のようなrepository構成を想定しています.

.
├── src  # python code等
├── terraform  # terraform code
│   ├── main.tf
│   ├── resource.tf
│   └── ...
└── .pre-commit-config.yaml

手順

Terraform CLIのインストール

https://developer.hashicorp.com/terraform/install

.pre-commit-config.yamlの作成

-   repo: local
    hooks:
    -   id: terraform-fmt
        name: terraform-fmt
        entry: terraform fmt
        language: system
        types: [ terraform ]

pre-commitのインストール

https://pre-commit.com/index.html#install

installできたら pre-commit-config.yaml があるディレクトリで以下を実行してください.

pre-commit install

git commit

自動で修正されるようになりました.

git add terraform/
git commit -m "terraform fmt test"

git diffで修正内容を確認できます.

例:

resource "google_project_iam_member" "gcp_iam_member" {
   for_each = toset(var.gcp_iam_roles)
-  project  =  var.google_project
+  project  = var.google_project
   role     = each.value
   member   = "serviceAccount:${data.google_service_account.test_sa.email}"
 }
GitHubで編集を提案

Discussion

yukobyukob

pre-commit run --all-files で terraform fmt の対象に terraform ファイル以外が含まれてしまい、以下のエラーが発生してしまいました。

Error: Only .tf and .tfvars files can be processed with terraform fmt

ので、以下のように修正しました🙏

files: ^terraform/.* -> types: [ terraform ]