いまさら聞けない「JSON」と「HCL」 “2大設定言語”の違いとは?JSONとHCLを比較【前編】

インフラの設定管理で目にする「JSON」ファイルと「HCL」ファイル。それぞれどのような場面で役立つのか。両者の特徴と基本構文を、サンプルを交えて解説する。

2024年12月05日 05時00分 公開
[Damon GarnTechTarget]

 ソースコードでインフラの構成を管理する「IaC」(Infrastructure as Code)は、現代のシステム管理の重要な要素だ。「Ansible」「Puppet」「Terraform」といった構成管理ツールは、設定言語で記されたファイルを認識して動作する。

 本連載は、代表的な設定言語である「JSON」と「HCL」を取り上げる。両者にはそれぞれ特定の用途と要件がある。自社で用いるにはどちらが適しているのか。それを判断するために、まずはJSONとHCLの重要性を押さえておこう。

JSONとHCLはなぜ必要?

 JSONとHCLは、どちらもIaCで用いる構成言語だが、目的や特徴は異なる。

 JSONの主な役割は、サーバとWebアプリケーションなどシステム間でのデータ転送だ。その他の主要な用途としては以下がある。

  • 設定管理
    • アプリケーションやシステムの設定を記録
    • IaCでのパラメーターやシステム設定
  • NoSQLデータベースにおける構造化データの保管
  • データのインポートとエクスポート
  • ログやパフォーマンスデータの構造化、解析

 Terraformで利用するために、運用管理ツールベンダーHashiCorp(2024年4月にIBMが買収を発表)が開発した設定言語がHCLだ。そのためTerraformを利用している企業は、HCLを使用することになる。

 HCLは主にオンプレミスシステムとクラウドサービスを使うシステムの構成に用いる。具体的な用途を以下に示す。

  • ハードウェアの設定
  • ソフトウェア定義ネットワーク(SDN)の設定
  • PaaS(Platform as a Service)の設定

 Ansibleなど一部の構成管理ツールでは、データシリアライズ言語(データを保存、転送しやすい形式に変換するための言語)「YAML」を用いた構成管理も可能だ。用途に応じて3つの言語を使い分けるとよい。

JSONファイルの書き方とサンプル

 JSONは、波かっこ(中かっこ)内に記述されるキーと値のペアでデータを表す。ファイルの拡張子は「.json」だ。波かっこで囲まれたブロック(オブジェクト)内には関連するデータをまとめることができ、入れ子構造にすることも可能だ。

 キーは二重引用符で囲んだ文字列で、同じ階層では重複するキーを使用できない。一般的には、スペースの代わりにアンダースコアで空白を表す。値として使えるデータ型は以下の通りだ。

  • 文字列
  • 数値
  • 真偽値
  • オブジェクト
  • 配列(同じデータ型を持つ一連のデータ群)
  • NULL

 以下はアプリケーションに関する情報の例だ。「appName」(アプリケーション名)というキーに対して「App1」、「appVersion」(バージョン番号)というキーに対して「1.2.3」という値がそれぞれひも付けられている。

"appName": "App1"
"appVersion": "1.2.3"

 以下は、真偽値を用いて「logging」(ログ記録)機能を有効化または無効化する例だ。

"logging": true

 最後に、データベースへの接続設定の例を見てみよう。上から接続先のデータベース名、ポート番号、ユーザー名、パスワードを記録している。

"host": "localhost",
"port": "5000",
"username": "dbadmin",
"password": "Pa$$w0rd",

 このように、JSONではオブジェクトを使って関連するデータをグループ化し、階層構造で表現する。シンプルで可読性に優れたデータ表現が可能な一方で、標準ではコメントを記入できない。何の設定なのかを別途ドキュメントに残しておくとよい。

HCLファイルの書き方

 HCLは波かっこでブロックを定義し、各ブロックを設定要素として扱う。JSONと同様に、HCLはキーと値のペアを利用する。この仕組みによって、文字列や数値、真偽値などのデータ型を用いた設定の定義が可能になる。

 ファイルの拡張子は「.hcl」「.tf」で、スクリプト(簡易プログラム)言語「JavaScript」と同じ方法でコメントを記入できる。1行のみのコメントには行頭に「//」を置き、複数行にわたるコメントは「/*」と「*/」で該当部分を囲む。

 HCLはJSONと互換性があり、どちらもキーと値のペアでデータを定義する。ただし異なる要素も幾つかある。真偽値や数値など、値に利用できるデータ型は共通だが、記述形式が異なる。具体的には、キーと値のペアを定義するためにHCLは等号を用いるのに対し、JSONはコロンを用いる。HCLからJSONへの互換性はあるが、JSONからHCLへの互換性が完全ではない点にも注意が必要だ。


 次回は、JSONファイルとHCLファイルを扱う際に注意すべき点や知っておきたい点を解説する。

TechTarget発 エンジニア虎の巻

米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

From Informa TechTarget

お知らせ
米国TechTarget Inc.とInforma Techデジタル事業が業務提携したことが発表されました。TechTargetジャパンは従来どおり、アイティメディア(株)が運営を継続します。これからも日本企業のIT選定に役立つ情報を提供してまいります。

ITmedia マーケティング新着記事

news132.jpg

生成AIを業務で使わないマーケターはもはや3割以下 御社はどうする?
HubSpot Japanが日本で実施した調査によると、日本のマーケターの8割以上が従来のマーケ...

news168.jpg

新富裕層の攻略法 「インカムリッチ」の財布のひもを緩めるマーケティングとは?
パワーカップルの出現などでこれまでとは異なる富裕層が生まれつつあります。今回の無料e...

news166.jpg

ブラックフライデーのオンラインショッピング 日本で売り上げが大幅に増加した製品カテゴリーは?
Criteoは、日本国内のブラックフライデーのオンラインショッピングに関する分析結果を発...