【世界一わかりやすいTerraform入門⑥】localsと関数でコード整理!ループ&条件の応用もばっちり解説

投稿更新日: 2025/7/21

サムネイル

こんにちは!Terraform入門シリーズ、第6回です。 今回はTerraformのコードを「もっと読みやすく・賢く書く」ためのテクニックを紹介します! こんな悩み、ありませんか?

  • 同じ値を何度も書いていてスッキリしない…
  • 条件ごとにタグの値を変えたい…
  • 長い式が複雑で読みにくい…

それ、locals関数で解決できます!


スクリーンショット

1. locals:ローカル変数でコードをスッキリ整理!

locals は「一時的な変数」として使えるTerraformの便利機能。 繰り返し使う値や複雑な条件式をまとめることで、コードの可読性・保守性が大幅アップします。


✅ 基本的な使い方

# hcl
locals {
  project_name = "myapp"
  region       = "ap-northeast-1"
}

使うときはこう:

# hcl
bucket = "${local.project_name}-bucket"

✅ ロジックもOK!

# hcl
locals {
  is_production = var.env == "prod"
}

わざわざ何度も var.env == "prod" と書かなくて済みます!


2. Terraformの便利な組み込み関数たち

Terraformには多くの便利な関数があります。ここではよく使うものを紹介!

join リストを文字列として結合:

# hcl
join("-", ["ap", "northeast", "1"])  
# => "ap-northeast-1"

length 要素数を取得:

# hcl
length(var.subnets)

lookup マップから値を取得(デフォルト値つき):

# hcl
lookup(var.ami_ids, var.env, "ami-default")

他にも…

  • contains: 値がリストに含まれるか
  • merge: 複数のマップを結合
  • zipmap: 2つのリストからマップを作る
  • keys,values: マップ操作に便利

3. 応用編:ループ・条件・タグの出し分けなど!

✅ 条件付きタグを merge で制御

# hcl
locals {
  common_tags = {
    project = "terraform-blog"
  }

  env_tag = var.env == "prod" ? { environment = "production" } : {}
}

tags = merge(local.common_tags, local.env_tag)

環境に応じたタグの出し分けがスマートに!


✅ 条件つきリストフィルタ(for + if

# hcl
locals {
  filtered_subnets = [for s in var.subnets : s if s != "public"]
}

forループの中で条件も書けるので、柔軟なリスト操作ができます。


まとめ:Terraformのコード、きれいに整理しよう!

今回の学び:

  • locals でコードの重複や複雑な条件を整理!
  • 関数を使って値の操作を効率化!
  • for, if, merge を組み合わせて柔軟な構造を構築!

Terraformは「インフラを書く」だけでなく、「読みやすく・整理されたコードに保つ」ことも大切。 チームでも安心して使えるIaCを書く第一歩です!


この記事をシェアする

合同会社raisexでは一緒に働く仲間を募集中です。

ご興味のある方は以下の採用情報をご確認ください。