- OpenTofu言語
- 構文
- 設定構文
設定構文
このセクションの他のページでは、OpenTofu言語で使用できる様々な設定構成要素について説明しています。このページでは、それらの構成要素の基礎となる言語の低レベル構文をより詳細に説明します。
このページでは、OpenTofu言語の *ネイティブ構文* について説明します。これは、人間が読み書きしやすいように設計された豊富な言語です。OpenTofu言語の構成要素は、JSON構文でも表現できます。JSON構文は、人間が読み書きするのは難しいですが、プログラムで生成および解析するのは容易です。
OpenTofu言語のこの低レベル構文は、*HCL*と呼ばれる構文で定義されています。これは、他のアプリケーション、特に他のHashiCorp製品の構成言語でも使用されています。OpenTofuを使用するためにHCL構文のすべての詳細を知る必要はありません。そのため、このページでは最も重要な詳細をまとめています。興味のある方は、HCLネイティブ構文仕様でHCL構文の完全な定義を確認できます。
引数とブロック
OpenTofu言語構文は、引数とブロックという2つの主要な構文構成要素に基づいています。
引数
*引数* は、特定の名前を値に割り当てます。
image_id = "abc123"
等号の前にある識別子は *引数名* で、等号の後の式は引数の値です。
引数が表示されるコンテキストによって、有効な値の種類が決まります(たとえば、各リソースの種類には、その引数の種類を定義するスキーマがあります)。ただし、多くの引数は任意の式を受け入れるため、値を文字通り指定するか、プログラムによって他の値から生成することができます。
OpenTofuの設定言語は、HCLと呼ばれるより一般的な言語に基づいており、HCLのドキュメントでは通常、「引数」ではなく「属性」という単語を使用しています。これらの単語は、このコンテキストではほぼ同じ意味で交換可能であり、経験豊富なOpenTofuユーザーはカジュアルな会話でどちらの用語を使用する場合もあります。しかし、OpenTofuは「属性」と呼ばれる他のいくつかのもの(特に、OpenTofuリソースには、式から参照できますが、設定で値を割り当てることができない`id`などの属性があります)とも対話するため、OpenTofuのドキュメントでは、この構文構成要素を参照する際に「引数」を使用することにしました。
ブロック
*ブロック* は、他のコンテンツを格納するコンテナです。
resource "aws_instance" "example" {
ami = "abc123"
network_interface {
# ...
}
}
ブロックには *型* があります(この例では`resource`)。各ブロック型は、型キーワードの後に続く *ラベル* の数を定義します。`resource`ブロック型は、上記の例にある`aws_instance`と`example`という2つのラベルを期待します。特定のブロック型には、任意の数の必須ラベルを含めることができますし、ネストされた`network_interface`ブロック型のように、必須ラベルを全く含まない場合もあります。
ブロック型キーワードとラベル(存在する場合)の後、ブロック *本文* は`{`と`}`で区切られます。ブロック本文内では、さらに引数とブロックをネストして、ブロックとその関連する引数の階層を作成できます。
OpenTofu言語は、限られた数の *トップレベルブロック型* を使用します。これは、設定ファイル内の他のブロックの外側に表示できるブロックです。OpenTofuのほとんどの機能(リソース、入力変数、出力値、データソースなど)は、トップレベルブロックとして実装されています。
識別子
引数名、ブロック型名、リソース、入力変数など、ほとんどのOpenTofu固有の構成要素の名前はすべて *識別子* です。
識別子には、英字、数字、下線(`_`)、ハイフン(`-`)を含めることができます。識別子の最初の文字は数字にすることはできません。これは、リテラル数値とのあいまいさを避けるためです。
識別子の完全な規則については、OpenTofu はUnicode識別子構文を実装しており、ASCIIハイフン文字-
を含めるように拡張されています。
コメント
OpenTofu言語は、コメントに3つの異なる構文をサポートしています。
#
は1行コメントの始まりを示し、行末で終了します。//
も#
の代替として、1行コメントの始まりを示します。/*
と*/
は、複数行にまたがる可能性のあるコメントの開始と終了の区切り文字です。
#
による1行コメントスタイルはデフォルトのコメントスタイルであり、ほとんどの場合に使用してください。ダブルスラッシュスタイルは慣習的ではないため、自動構成フォーマットツールは//
コメントを#
コメントに変換することがあります。
文字エンコーディングと行末
OpenTofuの設定ファイルは、常にUTF-8でエンコードされている必要があります。言語の区切り文字はすべてASCII文字ですが、OpenTofuは識別子、コメント、文字列値にASCII以外の文字を受け入れます。
OpenTofuは、Unixスタイルの改行(LFのみ)またはWindowsスタイルの改行(CR、その後LF)のいずれかの設定ファイルを受け入れますが、慣習的なスタイルはUnixの規則を使用することです。そのため、自動構成フォーマットツールはCRLF改行をLFに変換することがあります。