learnxinyminutes-docs/ja/yaml.md
2024-12-08 23:20:53 -07:00

192 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
filename: learnyaml-jp.yaml
contributors:
- [Leigh Brenecki, 'https://leigh.net.au']
- [Suhas SG, 'https://github.com/jargnar']
translators:
- [haru, 'https://haru52.com/']
---
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/)