YAML Ain’t Markup Language (YAML) は、 ほとんどのプログラミング言語に対応するデータシリアル化言語です。詳しく理解しましょう。
YAML は JSON の厳密なスーパーセットであるため、 JSON で記述されたものはすべて YAML に解析できます。これは主にプロジェクトの構成ファイルに使用され、コードを理解して読むのが非常に簡単です。
YAML ファイルのファイル拡張子は
.yaml
または
.yml
です。
このチュートリアルでは、YAML に存在するさまざまなデータ型について学び、Python で YAML を操作します。このチュートリアルを終えると、YAML とその構文を理解できるようになります。
Python 学習リソースを調べていない場合でも、Python についてはよく知っていると思います。
YAML は、Python と同様のインデント構文に従います。ただし、インデントに タブを 使用することはできません (YAML ファイルを作成するときに覚えておいてください)。
設定
-
YAML
ファイルを操作するには、
pyyamlという Python モジュールをインストールします。
pip install pyyaml
-
次のコードをコピーしてファイルに貼り付け、
yaml_script.pyとして保存します。
import yaml
yaml_file = open("learn_yaml.yaml", 'r')
yaml_content = yaml.load(yaml_file)
print("Key: Value")
for key, value in yaml_content.items():
print(f"{key}: {value}")
- 上記のスクリプトを使用して YAML コードを Python に変換し、さまざまなデータ型を確認します。
-
learn_yaml.yamlというファイルを作成し、その中でこのチュートリアルで説明するさまざまな例を練習します。
早速、YAML のデータ型セクションに移りましょう。
YAML のデータ型
YAML 内のすべては キーと値の ペアです。
辞書、ハッシュ、オブジェクトなど、さまざまなプログラミング言語ではキーと値のペアに別の名前が付けられています。これらは YAML の構成要素です。
キーは文字列 (引用符付きまたは通常)、浮動小数点数、または整数です (サポートは将来の更新で変更される可能性があります)。また、値は YAML がサポートする任意のデータ型にすることができます。
YAML に存在するさまざまなデータ型を見てみましょう。
数字
YAML は 、整数、浮動小数点数、指数浮動小数点数をサポートします。
integer: 123
float: 123.123
exponential_float: 1.34e+3
上記のコードを Python スクリプトで評価すると、次のような結果が得られます。
Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0
値は 、10 進数、 8 進数、 16 進数 などのさまざまな数体系で表すことができます。
- 先頭の ゼロ (0) は、 8 進数であることを表します。
- 接頭辞 0x は 16 進値を表します。
以下の例を参照してください。
integer: 123
octal: 0123
hexa: 0x123
Python スクリプトを実行すると、8 進値と 16 進値の変換後の 10 進値を確認できます。次のような正確な出力が表示されるはずです。
Key: Value
integer: 123
octal: 83
hexa: 291
YAML のもう 1 つの興味深い点は、 NAN(Not A Number) と Infinity を表現できることです。
not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf
Python スクリプトを実行すると、 NAN と inf の Python への変換値が表示されます。
Key: Value
not_a_number: nan
infinity: inf
negative_infinity: -inf
YAML の数値型については以上です。
文字列
YAML の文字列は、 引用符の有無にかかわらず 表現できます。どちらも似ています。 JSON とは異なり、すべての文字列を引用符で囲むという厳密なルールはありません。ただし、 エスケープ シーケンス を使用する必要がある場合は、 二重引用符を 使用する必要があります。
文字列の例をいくつか見てみましょう。
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: "Hi, I am a newline \n character. And I am working :)"
セクションのキーと値のペアの改行文字は期待どおりに機能します。すでに述べたように、エスケープ シーケンスを操作するには二重引用符を使用する必要があります。
次のキーと値のペアで二重引用符を使用しましたが、期待どおりに機能します。上記の YAML コードを Python スクリプトで解釈します。次のように結果が得られます。
Key: Value
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: Hi, I am a newline
character. And I am working :)
YAML には、キーの値として複数の文を書き込むために使用できる 2 つの特殊文字があります。長い文を複数の行に分割する必要があるとします。このタイプのシナリオでは、 折り目 (> より大きい) または ブロック (パイプ |) 文字を使用して複数行を記述することができます。
折り文字 と ブロック 文字の違いは何ですか?いよいよです。
折り畳み 文字は改行を解釈しませんが、 ブロック 文字は解釈します。
例を見てみましょう。
multiple lines string with fold character: >
This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines won't be
interpreted.
multiple lines string with block character: |
This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.
Python スクリプトを実行すると、 折り目文字 と ブロック 文字の違いがわかります。インデントを使用することを忘れないでください。
Key: Value
multiple lines string with fold character: This is a multiple line string with fold character. Remember to use indentation. Newlines won't be interpreted.
multiple lines string with block character: This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.
ブール値
YAML では、ブール値 True と False を 3 つの異なる方法で表現できます。見てください。
- 値 True、On、 および Yes は 、YAML では True とみなされます。
- 値 False 、 Off 、 および No は 、YAML では False とみなされます。
random_key_1: True
random_key_2: On
random_key_3: Yes
random_key_4: False
random_key_5: Off
random_key_6: No
上記の YAML コードを解釈すると、最初の 3 つのキー値が True として取得され、次の 3 つのキー値が False として取得されます。
Key: Value
random_key_1: True
random_key_2: True
random_key_3: True
random_key_4: False
random_key_5: False
random_key_6: False
ヌル
YAML は、JSON と同様に null 値をサポートします。キーワード null または記号 チルダ (~) を使用して、YAML で null 値を定義できます。 YAML にはかなりの代替手段がありますよね?そうですね、彼らはちょっとクールですね。
null_case_1: null
null_case_2: ~
Python スクリプトを実行します。 Python では null キーワードの代わりに None が 使用されるため、両方の値が None として取得されます。
Key: Value
null_case_1: None
null_case_2: None
配列
YAMLではPythonと同様の配列を指定できます。または、すべての配列要素を ハイフン (-) の前にある個別の行に記述することもできます。それぞれの表現の例を見てみましょう。
programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]
上記の YAML コードでは、Python リストと同様の 角かっこ を使用しました。 YAML で配列を表す別の方法 (マークダウン リストのように見える) を見てみましょう。
programming_languages:
- Python
- JavaScript
- C
- HTML
- CSS
libraries:
- React
- TailwindCSS
Python スクリプトを使用して上記の例を解釈する場合。次のような出力が得られます。
programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]
リストには文字列や数値などだけでなく辞書も含めることができます。
programming_languages: - Python: author: Guido van Rossum - JavaScript: author: Brendan Eich - C: author: Dennis Ritchie libraries: - React: popularity: High - TailwindCSS: popularity: High
上記の YAML コードを Python スクリプトで解釈すると、辞書の配列が得られます。
Key: Value
programming_languages: [{'Python': {'author': 'Guido van Rossum'}}, {'JavaScript': {'author': 'Brendan Eich'}}, {'C': {'author': 'Dennis Ritchie'}}]
libraries: [{'React': {'popularity': 'High'}}, {'TailwindCSS': {'popularity': 'High'}}]
辞書
辞書の構文については、上記の例ですでに見てきました。簡単にまとめると、辞書はキーと値のペアです。キーの値として任意の有効なデータ型を使用できます。 YAML はネストされた辞書もサポートします。
例を見てみましょう。
dictionary:
i am key: i am value
nested dictionary:
nested key:
i am nested key: i am nested value
上記のコードを解釈すると、次のように同じ結果が表示されます。
Key: Value
dictionary: {'i am key': 'i am value'}
nested dictionary: {'nested key': {'i am nested key': 'i am nested value'}}
Python でリストを辞書に変換できることをご存知ですか?
セット
YAML は、set と呼ばれる別のデータ型をサポートしています。 Set には、Python の set データ型に似た一意の値が含まれます。リスト項目の前に ハイフン (-) が付くのと同様に、設定項目の前に は疑問符 (?) が付きます 。
データ型はセット名の後に !!set を 使用して設定されることに注意する必要があります。
次の例を見てください。
i am a set: !!set
? 1
? 2
? 2
? 3
set には一意の値のみが含まれるため、上記の YAML コードを Python スクリプトで解釈しても、 2 が 2 回得られることはありません。
結果を見てみましょう。
Key: Value
set: {1, 2, 3}
次のように、Python 構文と同様にセットを表すこともできます。
i am a set: !!set
{1, 2, 2, 3}
上記の例とまったく同じ出力が得られます。
YAML のデータ型については以上です。 YAML の追加機能をいくつか見てみましょう。
コメント
YAML はコメントをサポートします。それは素晴らしい。 YAML では ハッシュ (#) 記号で始まるコメントを書くことができます。
# I am a comment
yaml is great: # I am a comment too
上記の YAML コードを解釈すると、null 値を持つ空のキーが取得されます。
Key: Value
yaml is great: None
YAML は複数行のコメントをサポートしていません。 Pythonと同様に複数行コメントの場合はハッシュから始まる複数行を記述する必要があります。
アンカー
アンカーを使用する と、ドキュメント全体の任意の場所にキーの内容をコピーできます。これは、ドキュメント内の一部のコンテンツを複製する場合に非常に便利です。
アンカーを使用するには、アンカーの名前をプログラミング言語の変数名として定義する必要があります。そして、ドキュメント全体のどこでも好きな場所でそれを使用できます。
& を使用してアンカー名を定義し、 * と一緒に使用できます。例を見てみましょう。
# duplicate_data is the name of the anchor
data: &duplicate_data This content is to duplicate
# dopying the data
duplicate_data: *duplicate_data
上の例では、 duplicate_data アンカーを使用して データ キーの値をコピーしました。上記の YAML を解釈すると、両方のキーに同じ値が含まれます。
Key: Value
data: This content is to duplicate
duplicate_data: This content is to duplicate
結論
YAML についてよく理解していただけたと思います。これで、次のプロジェクト構成ファイルで YAML を使用できるようになります。より高度な内容については、 YAML 公式 Web サイトを参照してください。
楽しくコーディングしてください 🙂






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





