MENU

HCLとは|Terraformを支えるHashiCorpの設定言語を解説

HCL アイキャッチ
HCL

HCL(HashiCorp Configuration Language)は2014年にHashiCorpが自社プロダクト向けに開発した設定言語で、JSON互換のデータモデルを持ちながら、関数・変数参照・三項演算などプログラミング言語的な要素を併せ持つ。現行のHCL2はTerraform 0.12以降に採用され、Vault・Nomad・ConsulなどHashiCorpエコシステム全般の構成ファイルで利用されている。Infrastructure as Codeの実装言語として、JSONやYAMLに飽き足らない領域を埋める存在だ。

目次

この記事の目次

  1. HCLの構文と表現力
  2. Terraformでの典型的な使われ方
  3. YAML・JSONとの根本的な違い
  4. HCL運用のベストプラクティス
  5. まとめ

HCLの構文と表現力

HCLの構文と表現力

HCLの基本構文はブロックと属性の組合せで、resource "aws_instance" "web" {...}のように「ブロックタイプ」「ラベル」「ボディ」が並ぶ。ボディ内は属性代入とネストブロックで構成され、JSONに変換可能なシンプルな構造を保つ。コメントも#、//、/* */の3種類が使え、YAMLより記述自由度が高い。

HCL2の最大の進化は「式の評価」を組み込んだ点である。var.region、count.index、for_each、format()、jsondecode()など、変数参照と関数呼び出しがその場で評価され、条件分岐やリスト内包表記もサポートする。JSONやTOMLでは表現できない動的な設定がTerraform上でほぼプログラミング感覚で記述できることが、IaC言語としての強さの源泉となっている。

Terraformでの典型的な使われ方

Terraformでの典型的な使われ方

Terraformの.tfファイルはHCLで書かれ、resource/data/module/variable/output/providerといったトップレベルブロックで構成される。これをterraform initでプロバイダプラグインを取得し、planで差分計算、applyで実環境に反映する。HCLの文法はこの一連の流れを宣言的に書くための土台で、依存関係の自動解決もHCLの式評価グラフに基づいて行われる。

for_eachやdynamic blockを使うとリソースを動的生成でき、count・dependsOn・lifecycleなどでリソースのライフサイクル制御も可能だ。Terraform CloudやTerraform Enterpriseと組み合わせれば、HCLで書いた構成をPolicy as Code(Sentinel)や状態ロック管理付きで運用できる。NomadのJobspecもHCLで記述し、コンテナワークロードの宣言的デプロイを支える。

YAML・JSONとの根本的な違い

YAML・JSONとの根本的な違い

HCLはYAMLやJSONと違い「式評価」を前提にした言語であり、純粋なデータフォーマットではない。YAMLは静的なツリー構造であり、テンプレート化にはGo templateやJinja2が必要だが、HCLは言語自体に変数と関数があるため、外部テンプレートエンジンに頼らずに動的構成が書ける。これがKubernetes(YAML中心)とTerraform(HCL中心)の表現力差につながっている。

一方でHCLはHashiCorp製品以外での利用が限定的で、エコシステム外への持ち出しは難しい。Pulumi(TypeScript/Python/Goで書ける汎用IaC)やCDK for Terraform(CDKtf)は、HCLを汎用言語で置き換える方向の試みだ。シンプルな宣言で済む領域はHCLが快適だが、複雑な分岐や型安全性を求めるなら汎用言語ベースのIaCに分がある。

HCL運用のベストプラクティス

HCL運用のベストプラクティス

HCLを書く上で最初に意識すべきはモジュール化である。1ファイルにすべてを書くと後年の差分レビューが困難になるため、リソース単位、もしくは責務単位でmoduleを切り、入出力をvariables.tf/outputs.tfで明示する。terraform fmtによる自動整形と、tflint・checkov・tfsecなど静的解析ツールでセキュリティリスクを継続的に検出するのが現代的な構成だ。

また、HCLは式を組み合わせると複雑になりがちなため、locals { ... }でローカル変数を定義し、計算結果に名前を付ける癖を付けると可読性が高まる。stateファイルの管理はS3+DynamoDBやTerraform Cloudのリモートバックエンドを使い、複数人での同時操作を確実にロックすることが、HCLそのものの書き方と並んで重要な運用ポイントとなる。

まとめ

HCLはHashiCorpが「JSONより人間に優しく、YAMLより表現力豊か」を狙って設計した設定言語で、Terraformを中心にIaC領域で確固たる地位を築いた。式評価とブロック構造が宣言的構成の記述を劇的に楽にする反面、エコシステムが限定的なため、汎用言語ベースのIaCと用途で使い分けるのが望ましい。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次