1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
---
language: yaml
filename: learnyaml-jp.yaml
contributors:
- [Leigh Brenecki, 'https://leigh.net.au']
- [Suhas SG, 'https://github.com/jargnar']
translators:
- [haru, 'https://haru52.com/']
lang: ja-jp
---
YAMLはデータのシリアライズ用言語で、
人間が直接読み書きしやすいようにデザインされています。
YAMLはJSONの厳格なスーパーセットで、
改行とインデントが構文的に意味を持つというPythonに似た仕様を追加しています。
しかしPythonとは異なりYAMLではインデントにタブ文字を使うことはできません。
```yaml
--- # ドキュメント開始
# YAMLのコメントはこんな感じです。
##############
# スカラー型 #
##############
# (ドキュメント全体を含む)ルートオブジェクトはマップになります。
# これは他言語における辞書型、ハッシュ、オブジェクトなどと等価です。
キー: 値
別のキー: 別の値。
数値: 100
指数表記: 1e+12
# 1 はbooleanでなく数値として解釈されます。
# もしbooleanとして解釈してほしい場合はtrueを使います
boolean: true
null値: null
スペースを 含む キー: 値
# 文字列をクォートで囲う必要がないことに注意してください。
# しかし囲うこともできます。
しかし: 'クォートで囲まれた文字列。'
'キーもクォートで囲えます。': "keyの中で ':' を使いたいときに有用です。"
シングルクォート: 'には ''1つの'' エスケープパターンがあります'
ダブルクォート: "には多くのエスケープパターンがあります:\", \0, \t, \u263A,
\x0d\x0a == \r\n, など、他にもあります。"
# UTF-8/16/32文字はエンコードされている必要があります
上付き2: \u00B2
# 複数行の文字列は(| を使う)「リテラルブロック」、
# または、('>' を使う)「折り畳みブロック」として書くことができます
リテラルブロック: |
この文章のブロック全体が「リテラルブロック」キーの値になり、
改行は保持されます。
リテラルはインデントを解除するまで続き、先頭行のインデント文字数分を
各行のテキストの先頭から取り除きます。
「よりインデントの深い」行はその分のインデントを保持します -
この2行はスペース4個分インデントされます。
折り畳みスタイル: >
この文章のブロック全体が「折り畳みスタイル」の値になります。
しかしこちらの場合、全ての改行がスペース1個に置き換わります。
直前のような空行は改行文字に変換されます。
「よりインデントの深い」行も改行を保持します -
このテキストは2行にわたって表示されます。
##################
# コレクション型 #
##################
# 入れ子を表現するにはインデントを使います。
# スペース2個のインデントが好まれます(が必須ではありません)。
入れ子のマップ:
キー: 値
別のキー: 別の値
別の入れ子のマップ:
こんにちは: こんにちは
# マップのキーは文字列である必要はありません。
0.25: 小数のキー
# 複数行オブジェクトのような複雑なキーも使用可能です。
# ? の後にスペースを入れることで複雑なキーの開始を宣言できます。
? |
これはキーです
複数行あります
: そしてこれがその値です
# YAMLではシーケンスを複雑なキー構文で使うこともできます
# しかし、言語パーサーによってはエラーになるかもしれません
# 例
? - マンチェスター・ユナイテッド
- レアル・マドリード
: [2001-01-01, 2002-02-02]
# シーケンス(リストや配列と等価)はこんな感じです
# ('-' はインデントとしてカウントしてください):
シーケンス:
- アイテム1
- アイテム2
- 0.5 # シーケンスには異なる型の値を混在させられます
- アイテム4
- キー: 値
別のキー: 別の値
-
- これはシーケンスです
- 別のシーケンス内部
- - - 入れ子のシーケンス表記は
- 折り畳めます
# YAMLはJSONのスーパーセットなので、
# JSON形式のマップとシーケンスを書くこともできます:
jsonマップ: {"キー": "値"}
jsonシーケンス: [3, 2, 1, "発進"]
クォートは任意: {キー: [3, 2, 1, 発進]}
######################
# その他のYAMLの機能 #
######################
# YAMLには「アンカー」と呼ばれる便利な機能もあります。これによりコンテンツを
# ドキュメント内で簡単に複製できます。これらのキーはどちらも同じ値を持ちます:
アンカーされたコンテンツ: &anchor_name この文字列は2つのキーの値になります。
他のアンカー: *anchor_name
# アンカーは複製/継承プロパティとして使えます
ベース: &base
名前: みんな同じ名前を持ちます
# 記号 << はマージキー言語非依存型(Merge Key Language-Independent Type)
# と呼ばれます。これは指定された1つ以上のマップの全てのキーを現在のマップに
# 挿入することを示すために使われます。
foo:
<<: *base
年齢: 10
bar:
<<: *base
年齢: 20
# fooとbarも「名前: みんな同じ名前を持ちます」を持ちます
# YAMLにはタグもあり、明示的に型を宣言できます。
明示的な文字列: !!str 0.5
# 言語特有のタグを実装したパーサーもあり、例えばPythonの複素数型が使えます。
pythonの複素数型: !!python/complex 1+2j
# YAMLの複雑なキーでは言語特有のタグも使えます
? !!python/tuple [5, 7]
: 五十七
# Python上で {(5, 7): '五十七'} として扱われます
####################
# その他のYAMLの型 #
####################
# 文字列と数値がYAMLの理解できる唯一のスカラーではありません。
# ISO形式の日付や日時リテラルもパースされます。
日時: 2001-12-15T02:59:43.1Z
スペースを含む日時: 2001-12-14 21:59:43.10 -5
日付: 2002-12-14
# !!binaryタグは文字列の実体がバイナリblobのbase64エンコード表現であることを
# 示します。
gifファイル: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAMLにはセット型もあり、それはこんな感じです:
セット:
? アイテム1
? アイテム2
? アイテム3
または: {アイテム1, アイテム2, アイテム3}
# セットは値がnullのただのマップで、直前のセットは以下と等価です:
セット2:
アイテム1: null
アイテム2: null
アイテム3: null
... # ドキュメント終了
```
### 補足資料
+ [YAML公式ウェブサイト](https://yaml.org/)
+ [オンラインYAMLバリデーター](http://www.yamllint.com/)
|