9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Yaml についてあれこれ忘れるので、戯れて覚える

Posted at

なにかとお世話なる Yaml ですが、いつも雰囲気でやっていました。もう少し仲良くなりたいなと思いましてこれを書きます。

そもそも、ハッシュの中のリストの書き方が、

a:
- b # 行頭スペースなし
- c

でも

a:
 - b # 行頭スペースあり
 - c

でも良いということから端を発しています。

ぼくは、書き方の統一感が好きなので、Rails では Rubocop とかが好きで、yaml ファイルのこのユレが気になって仕方がないのです。Rubocop でこの辺のことを制御できるのかは知らないのですが。そもそもどっちが正しいのかをわかっていなかったのです。結論どっちも正しい。

ruby => yaml

to_yaml という便利なものがあります。

pry(main)> puts ({"a"=>[1,2]}.to_yaml)
---
a:
- 1
- 2
=> nil

(こんな感じで、配列の行頭にスペースがない...。まあいいのですが。)

yaml => ruby

YAML.load という便利なものがあります。

pry(main)> YAML.load("a: 1")
=> {"a"=>1}

pry(main)> YAML.load(%Q{a:\n- 1\n- 2})
=> {"a"=>[1, 2]}

pry(main)> YAML.load(<<EOF)
pry(main)* a:
pry(main)*  - b
pry(main)*  - c
pry(main)*    d
pry(main)* EOF
=> {"a"=>["b", "c d"]}

Anchor, Alias, Merge

よくみるのは、以下のようなもの

a: &a
 foo: 1
 bar: 2

hoge:
 piyo: 3
 <<: *a

これは、ruby だとこんな感じになります。

pry(main)> YAML.load(<<EOF)
pry(main)* a: &a
pry(main)*  foo: 1
pry(main)*  bar: 2
pry(main)* hoge:
pry(main)*  piyo: 3
pry(main)*  <<: *a
pry(main)* EOF
=> {"a"=>{"foo"=>1, "bar"=>2}, "hoge"=>{"piyo"=>3, "foo"=>1, "bar"=>2}}

アンカー: &
エイリアス: *
マージ: <<

をつかっています。なので、それぞれ理解すると良いと思う。

改行について

|> には以下の違いがあります。

\nになる
pry(main)> YAML.load(<<EOF)
pry(main)* a: |
pry(main)*  My
pry(main)*  name
pry(main)*  is
pry(main)* EOF
=> {"a"=>"My\nname\nis\n"
スペースになる
pry(main)> YAML.load(<<EOF)
pry(main)* a: >
pry(main)*  My
pry(main)*  name
pry(main)*  is
pry(main)* EOF
=> {"a"=>"My name is\n"}

|- とか >- を使うと、最終行末の \n をなくすことができます。

配列の中のハッシュの中の、改行

この書き方で少し悩みました。

スペース1つはエラー
- a: 1
- b: |
 hoge
 piyo
- c : 3
スペース2つもエラー
- a: 1
- b: |
  hoge
  piyo
- c : 3
スペース3つはOK
- a: 1
- b: |
   hoge
   piyo
- c : 3

でも、このスペースの数でミスるのはいやなので、以下のように書いています。

- a: 1
- 
 b: |
  hoge
  piyo
- c : 3

以上です。すこし Yaml と仲良くなれた気がします :pear:

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?