メインコンテンツへスキップ

yamlencode 関数

yamlencode は、指定された値を YAML 1.2 ブロック構文を使用して文字列にエンコードします。

この関数は、OpenTofu言語の値を以下の方法でYAMLタグにマッピングします。

OpenTofuの型YAMLの型
文字列!!str
数値!!float または !!int
ブール値!!bool
list(...)!!seq
set(...)!!seq
tuple(...)!!seq
map(...)!!map
object(...)!!map
Null 値!!null

yamlencode は、上記のすべての型に対して暗黙的な構文を使用するため、明示的なYAMLタグを生成しません。

YAML形式はOpenTofu言語のすべての型を完全に表現できるわけではないため、yamlencode の結果を yamldecode に渡しても、同一の値は生成されません。ただし、OpenTofu言語の自動型変換ルールにより、実際にはこれが問題になることはほとんどありません。

YAMLはJSONのスーパーセットであるため、リモートシステムがYAMLをサポートしている場合でも、可能な限り jsonencode を使用してJSONを生成することをお勧めします。JSON構文は、フロー形式のYAMLと同等であり、OpenTofuはプラン内のJSON値の詳細な構造変更情報を提供できます。一方、OpenTofuはブロック形式のYAMLを通常の複数行文字列として扱います。ただし、生成された値をリモートシステムで人間が直接読み書きする場合は、YAMLを生成すると可読性が向上する可能性があります。

コードブロック
> yamlencode({"a":"b", "c":"d"})
"a": "b"
"c": "d"

> yamlencode({"foo":[1, 2, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- 2
- 3

> yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- "a": "b"
"c": "d"
- 3

yamlencode は、マッピングまたはシーケンスが空の場合を除き、マッピングとシーケンスに常にYAMLの「ブロック形式」を使用します。フロー形式のYAMLを生成するには、代わりに jsonencode を使用してください。YAMLのフロー形式は、JSON構文のスーパーセットです。

  • jsonencode は、YAMLの代わりにJSONを使用する同様の操作です。
  • yamldecode は、反対の操作を実行し、YAML文字列をデコードして、その表現値を取得します。