本文へスキップ

format関数

format関数は、仕様文字列に従って複数の値をフォーマットすることで、文字列を生成します。C言語のprintf関数や、他のプログラミング言語の同様の関数に似ています。

コードブロック
format(spec, values...)

コードブロック
> format("Hello, %s!", "Ander")
Hello, Ander!
> format("There are %d lights", 4)
There are 4 lights

%s%dのような単純なフォーマット動詞は、テンプレート補間構文と同様に動作し、多くの場合、より読みやすくなります。

コードブロック
> format("Hello, %s!", var.name)
Hello, Valentina!
> "Hello, ${var.name}!"
Hello, Valentina!

フォーマット動詞%#vは、任意の型の値を受け入れ、jsonencodeと同様にJSONエンコーディングを使用して表示します。これは、カスタム条件チェックのエラーメッセージで、モジュールに渡された値を記述する際に役立ちます。

コードブロック
> format("%#v", "hello")
"\"hello\""
> format("%#v", true)
"true"
> format("%#v", 1)
"1"
> format("%#v", {a = 1})
"{\"a\":1}"
> format("%#v", [true])
"[true]"
> format("%#v", null)
"null"

format関数は、より複雑なフォーマット仕様を使用する場合に最も役立ちます。

仕様構文

仕様は、%文字で始まるフォーマット動詞を含む文字列です。関数呼び出しには、仕様内の各動詞シーケンスに対して、さらに1つの引数が必要です。動詞は連続する引数と一致し、指示に従ってフォーマットされます。ただし、各引数は、フォーマット動詞で要求される型に変換可能である必要があります。

デフォルトでは、%シーケンスは、最初の引数から始まる連続する引数を消費します。動詞文字の直前に[n]シーケンス(nは10進数の整数)を導入することで、1ベースのインデックスで特定の値引数を明示的に選択します。明示的なインデックスがない後続の呼び出しでは、n+1、n+2などが使用されます。

フォーマット文字列が不可能な変換を要求する場合、または指定された引数よりも多くの引数にアクセスしようとした場合、関数はエラーを生成します。サポートされていないフォーマット動詞についてもエラーが生成されます。

動詞

仕様には、以下の動詞を含めることができます。

動詞結果
%%リテラルパーセント記号。値を消費しません。
%v値の型に基づいたデフォルトのフォーマット。nulllistmap型の項目を含むすべての型を受け入れます。
%#vjsonencodeと同様に、値のJSONシリアライゼーション。nulllistmap型の項目を含むすべての型を受け入れます。
%tブール値に変換し、trueまたはfalseを生成します。
%b整数に変換し、2進数表現を生成します。
%d整数に変換し、10進数表現を生成します。
%o整数に変換し、8進数表現を生成します。
%x整数に変換し、小文字の16進数表現を生成します。
%X%xと同様ですが、大文字を使用します。
%e数値に変換し、-1.234456e+78のような科学表記を生成します。
%E%eと同様ですが、指数を導入するために大文字のEを使用します。
%f数値に変換し、123.456のような指数のない10進数小数表記を生成します。
%g指数が大きい場合は%eのように、そうでない場合は%fのように動作します。
%G指数が大きい場合は%Eのように、そうでない場合は%fのように動作します。
%s文字列に変換し、文字列の文字を挿入します。
%q文字列に変換し、JSONで引用符で囲まれた文字列表現を生成します。

デフォルトのフォーマット動詞

%v が使用されると、OpenTofu は値の型に基づいて適切なフォーマット動詞を選択します。

動詞
文字列%s
数値%g
ブール値%t
その他%#v

NULL値は、%vまたは%#vでフォーマットされた場合、文字列nullを生成し、他の動詞ではエラーが発生します。

幅修飾子

動詞文字の直前にオプションの10進数を付けて幅修飾子を使用すると、値を表すために使用される文字数を指定できます。 (オプションの)幅の後にピリオド(.)と10進数を付けて精度を指定できます。 幅または精度が省略された場合、OpenTofuは指定された値に基づいてデフォルト値を選択します。

次の例は、幅修飾子の使用例を示しています。

シーケンス結果
%fデフォルトの幅と精度。
%9f幅9、デフォルト精度。
%.2fデフォルト幅、精度2。
%9.2f幅9、精度2。

追加のフォーマットオプション

%記号の直後に次の記号を使用して、追加のフォーマット要件を設定します。

記号結果
スペース数値が正の場合、符号がある場所にスペースを残します。
+数値が正の場合でも、符号を表示します。
-幅を左ではなく右側にスペースで埋め込みます。
0幅をスペースではなく先頭のゼロで埋め込みます。
  • formatdate は、人間が読み取れるタイムスタンプのための特殊なフォーマット関数です。
  • formatlist は、同じ仕様構文を使用して文字列のリストを生成します。