【世界一わかりやすい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では一緒に働く仲間を募集中です。
ご興味のある方は以下の採用情報をご確認ください。
