【えいちしーえる】

HCL とは?

💡 Terraformの「設計図」を書くための専用言語
📌 このページのポイント
HCL — 人間にもマシンにも読みやすい設定言語 JSON { "key": "value" } × コメント書けない × カッコが多くて読みにくい ○ 機械が解析しやすい YAML key: value × インデントミスで事故 ○ 人間が読みやすい いいとこ取り HCL resource "aws" "web" { type = "t3.micro" } ○ 読みやすい ○ コメント可 HashiCorpツール Terraform Vault Consul Nomad 共通言語として採用
HCLの位置づけとHashiCorpエコシステム
ひよこ ひよこ

ペンギン先生、HCLって何の略なの?

ペンギン先生 ペンギン先生

HashiCorp Configuration Languageの略だよ。HashiCorpっていう会社が作った設定ファイル用の言語なんだ。一番よく使われるのはTerraformで、クラウドのインフラを「コード」として定義するときに書く言語だよ。

ひよこ ひよこ

YAMLJSONとは何が違うの?

ペンギン先生 ペンギン先生

JSONは機械には読みやすいけど人間にはカッコやカンマが多くて辛い。YAMLは読みやすいけどインデントのズレで意味が変わるから事故りやすい。HCLはその中間を狙った言語で、ブロック構文で構造が明確、コメントも書けるし、変数や関数も使えるんだ。

ひよこ ひよこ

具体的にはどんな見た目なの?

ペンギン先生 ペンギン先生

たとえばAWSサーバーを1台作るなら「resource "aws_instance" "web" { ami = "ami-xxx" instance_type = "t3.micro" }」みたいに書くよ。何のリソースをどんな設定で作るかが一目でわかるでしょ?これがHCLの強みなんだ。

ひよこ ひよこ

なるほど!Terraform以外でも使われてるの?

ペンギン先生 ペンギン先生

HashiCorpの他のツールでも使われてるよ。Vault(シークレット管理)、Consulサービスディスカバリ)、Nomad(ワークロードオーケストレーション)、Packer(マシンイメージ構築)。HashiCorpのエコシステム全体で共通言語になってるんだ。

ひよこ ひよこ

ベテランエンジニアが注意してるポイントって何?

ペンギン先生 ペンギン先生

HCLはバージョンによって書き方が結構変わることだね。Terraform 0.11以前と0.12以降では構文が大きく変わったし、最近のバージョンでは「moved」ブロックとか新機能がどんどん追加されてる。あとHCLはあくまで「宣言的」な言語だから、複雑なロジックを書こうとすると苦しくなる。そういうときはTerraformモジュールやワークスペースで分離するのがコツだよ。

ひよこ ひよこ

宣言的っていうのがポイントなんだね!

ペンギン先生 ペンギン先生

そう。「こうなってほしい」を書くだけで、実際の手順はTerraformが考えてくれる。これがHCLの設計思想であり、Infrastructure as Codeの核心でもあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「HCL」って出てきたら「Terraformでインフラの設計図を書くための専用言語」と思えればだいたいOK!
📖 おまけ:英語の意味
「HashiCorp Configuration Language」 = HashiCorp設定言語
💬 HashiCorpという会社が自社ツール向けに作った言語だよ。JSONだと人間が読みにくいし、YAMLだとインデントミスが怖いから、いいとこ取りを目指して設計されたんだ
← 用語集にもどる