--- 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/)