1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Terraformでよく見る「HCL」って結局なに?構文と特徴を整理してみた

Posted at

はじめに

インフラの構成管理やプロビジョニングツールとして有名なTerraform。その中心で使用されている記述言語が、HCL(HashiCorp Configuration Language)です。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

本記事では、HCLの特徴や基本構文、なぜ使われるのかといった観点から解説します。

書こうと思ったきっかけ

受講しているITスクールのインフラ勉強会に参加いただいた受講生の方から、「HCLとYAML、JSONの違い」についてご質問をいただきました。

Terraformを学ぶ中で戸惑うポイントのひとつでもあるため、この機会にHCLの正体や特徴を整理し、より深くIaC(Infrastructure as Code)を理解するための備忘録としてまとめることにしました。

HCLとは?

HCL(HashiCorp Configuration Language)は、HashiCorp社が開発したドメイン固有言語(DSL)で、主にTerraformなど同社製品で使用されています。

  • 人間にとって読みやすい
  • JSONと互換性がある
  • 宣言的(Declarative)な構成

という特徴を持ちます。

HCLの特徴

1. 宣言的構文

HCLは処理手順ではなく、"どういう状態にしたいか" を記述します。これはTerraformのようなIaCツールとの相性が良く、状態管理に適しています。

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

2. ブロック構造

HCLでは、ブロック(block)でリソースやプロバイダーを記述します。

provider "aws" {
  region = "us-west-2"
}

3. 変数の定義と参照

変数を定義して再利用性を高めることができます。

variable "region" {
  default = "us-east-1"
}

参照:var.region

4. 条件式やループも可能

count = var.enable_instance ? 1 : 0
tags = {
  Name = "example-instance"
  Env  = "${var.environment}"
}

JSONとの違い

HCLはJSONよりも柔軟で人間に優しい構文を提供します。実際、HCLは内部的にJSONに変換されて処理されることが多いため、JSONとの互換性も保たれています。

比較項目 HCL JSON
可読性 高い 低い(カンマや構文ミスに注意)
柔軟性 高い 低い
コメント 可能(#または//) 不可

HCLが使われる主なツール

  • Terraform(インフラの構成管理)
  • Vault(秘密情報の管理)

まとめ

HCLはTerraformなどのインフラ管理ツールを支える記述言語として非常に重要です。

その可読性の高さと柔軟性、宣言的な構文は、IaCを実現する上での大きな武器となります。

今後、Terraformなどを本格的に運用していくにあたって、HCLをしっかり理解することは欠かせないと思います...!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?