はじめに
インフラの構成管理やプロビジョニングツールとして有名な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をしっかり理解することは欠かせないと思います...!