【YAMLで複数行を書く方法】|、|-、|+、>、>-、>+の違いを解説!

YAMLでは、複数行の文章やコードを書く場面がたくさんあります。例えば、以下のような場面です。

  • 長文の説明を書きたいとき
  • SQL / HTML / Shell Script をそのまま記述したいとき
  • 改行をそのまま残したい / 消したいとき
  • 改行をスペースに変換して1行にまとめたいとき

そんなときに使うのが||-|+>>->+の6種類の「ブロックスカラー」です。

この記事では、||-|+>>->+の特徴と出力例をわかりやすく解説します。

|(改行をそのまま保持する)

複数行テキストの改行をそのまま残したいときに使います。コードや説明文を書きたいときに便利です。

foo: |
  line1
  line2

上記Yamlはこう解釈されます。

{ "foo": "line1\nline2\n" }

|-(末尾改行を削除)

|と同じく改行を保持しますが、末尾の改行だけ削除します。

foo: |-
  line1
  line2

上記Yamlはこう解釈されます。

{ "foo": "line1\nline2" }

|+(空行をすべて保持)

|と同じだが、空行を含めてすべて保持します。以下のサンプルコードの場合、line2の後に空行が2つありますが、その空行を保持しています。

foo: |+
  line1
  line2


bar: line3

上記Yamlはこう解釈されます。

{ "foo": "line1\nline2\n\n\n", "bar": "line3" }

>(改行をスペースに変換する)

行末の改行がスペースに変換されて1行に折り畳まれるのが特徴です。通常の文章をYAMLに書きたいときに便利です。

foo: >
  line1
  line2

上記Yamlはこう解釈されます。

{ "foo": "line1 line2\n" }

>-(末尾改行を削除)

>と同じく改行をスペースに変換しますが、末尾の改行だけ削除します。

foo: >-
  line1
  line2

上記Yamlはこう解釈されます。

{ "foo": "line1 line2" }

>+(末尾改行を残す)

>と同じく改行をスペースに変換しますが、空行を含めてすべて保持します。以下のサンプルコードの場合、line2の後に空行が2つありますが、その空行を保持しています。

foo: >+
  line1
  line2


bar: line3

上記Yamlはこう解釈されます。

{ "foo": "line1 line2\n\n\n", "bar": "line3" }

|、|-、|+、>、>-、>+のまとめ

||-|+>>->+の6種類の「ブロックスカラー」の違いを一目で理解できるように表で整理しました。

foo: <記号>
  line1
  line2


bar: line3
記号行末の改行末尾
改行
空行出力
なしスペースに変換削除削除{ "foo": "line1 line2", "bar": "line3" }
|改行保持削除{ "foo": "line1\nline2\n", "bar": "line3" }
|-改行削除削除{ "foo": "line1\nline2", "bar": "line3" }
|+改行保持保持{ "foo": "line1\nline2\n\n\n", "bar": "line3" }
>スペースに変換保持削除{ "foo": "line1 line2\n", "bar": "line3" }
>-スペースに変換削除削除{ "foo": "line1 line2", "bar": "line3" }
>+スペースに変換保持保持{ "foo": "line1 line2\n\n\n", "bar": "line3" }
  • 先頭の記号は、「行末の改行」の扱いを決めます。
    • |の場合:改行をそのまま保持
    • >の場合:改行をスペースに変換する
  • 2つめの記号は、「末尾改行」と「末尾改行以降の空行」の扱いを決めます。
    • 未指定の場合:「末尾改行:保持」「末尾改行以降の空行:削除」
    • -の場合:「末尾改行:削除」「末尾改行以降の空行:削除」
    • +の場合:「末尾改行:保持」「末尾改行以降の空行:保持」

スポンサーリンク