【えいちしーえる】

HCL とは?

最終更新:
💡 Terraformなどの「設定言語」を支える共通の構文

HCLはHashiCorp Configuration Languageの略。ブロック・属性・式で設定を書くための構文と仕組みで、Terraformなどが利用します。JSON形式との関係や、ツールごとに設定の意味が異なる点を解説します。

📌 このページのポイント
HCL:設定の構文とツールの意味を分けるTerraformの設定ファイルvariable "name" {default = "web"}HCLのブロック・属性・式で記述利用先:Terraform / Vault / Consul / Nomad設定の種類や意味は、各ツールが決める人向けの構文と、JSON形式を備えるTerraformのJSON設定は.tf.jsonと所定の構造
同じHCLでも、Terraformのresourceなどを他のツールでそのまま使えるとは限りません。構文を共有することと、設定項目の意味を分けて考えます。
ひよこ ひよこ
ペンギン先生、HCLって何の略なの?
ペンギン先生 ペンギン先生
HashiCorp Configuration Languageの略だよ。HashiCorpっていう会社が作った設定ファイル用の言語なんだ。代表的な利用先はTerraformで、クラウドのインフラを「コード」として定義するときに書く言語だよ。
ひよこ ひよこ
YAMLやJSONとは何が違うの?
ペンギン先生 ペンギン先生
JSONやYAMLはデータの表現形式。HCLはブロックと引数で設定を組み立てるための基盤で、コメントも書ける。利用するツールが対応していれば、式の中で変数や関数を使えるんだ。
ひよこ ひよこ
具体的にはどんな見た目なの?
ペンギン先生 ペンギン先生
Terraformの例なら「variable "name" { default = "web" }」だよ。nameという入力変数に既定値webを指定している。ブロックに複数の引数を書くときは、引数ごとに改行するんだ。
ひよこ ひよこ
なるほど!Terraform以外でも使われてるの?
ペンギン先生 ペンギン先生
HashiCorpの他のツールでも使われてるよ。Vault(シークレット管理)、Consul(サービスディスカバリ)、Nomad(ワークロードオーケストレーション)、Packer(マシンイメージ構築)。ただし同じHCLでも、受け付ける設定項目は各ツールで異なるよ。
ひよこ ひよこ
ベテランエンジニアが注意してるポイントって何?
ペンギン先生 ペンギン先生
HCLの文法と、利用するツールの機能を区別することだね。たとえばresourceやmovedなどはTerraformが意味を決めるブロックで、どのHCL対応ツールでも使えるわけではない。Terraformの版とプロバイダーの仕様を確認しよう。
もっと詳しく知りたい人へ

HCLをJSONにしたいときは拡張子を変えるだけ?

構文の書き換えも必要だよ。Terraformでは.tf.jsonを使い、ブロックの種類やラベルをJSONのオブジェクトへ対応させる。普通のJSONなら何でも設定として使えるわけではなく、Terraformの構造に合わせよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「HCL」って出てきたら「Terraformなどで使われる設定記述のための言語」と思えればだいたいOK!
📖 おまけ:英語の意味
「HashiCorp Configuration Language」 = HashiCorp設定言語
💬 HashiCorpという会社が自社ツール向けに作った言語だよ。人が読み書きするネイティブ構文と、機械が扱いやすいJSON形式を備えているんだ

参考資料

← 用語集にもどる