yamlファイルの書き方やと特徴


はじめに

現在Railsを勉強中です。
アプリケーションを作成する上で、モデルやカラム、その他メッセージ等を日本語で出力したり扱いたい場面が必ずあると思います。自分の場合、すぐに忘れてしまうためその都度ググって、書き方合ってたかを確認しています。
ぶっちゃけYAMLファイルの仕様等を詳細に把握していなくても、問題なく作業が進むので今までないがしろにしてきましたが、今回は基本的な部分を調べて、アウトプットしようと思います。

YAMLファイルの特徴

分かりやすさ

構造化されたデータを扱うためのフォーマットであり、目的はXML等と似ているが、「読みやすい」「書きやすい」「わかりやすい」という利点がある。

構造

インデントによって、階層の構造を表現している

YAMLファイルで扱うデータ型

  • スカラー(文字列・数値・真偽値 etc)
  • シーケンス(配列)
  • マッピング(ハッシュ)

YAMLファイルの書き方

スカラー

YAMLはデータ型を自動的に判別してくれる
数字を文字列で扱いたい場合は '(シングルクォート)もしくは"(ダブルクォート)で囲むと強制的に文字列として認識してくれる

#数値
int1: 2
int2: 123,456

#浮動小数点
float1: 0.1

#NULL
nil1: nil
nil2: ~

#Boolean
bool1: true
bool2: false
bool3: yes
bool4: no
bool5: on
bool6: of

#日付
birthday: 1990-01-01
#タイムスタンプ
stamp: 2020-12-01 10:00:00 + 0900

#文字列
 str1:hoge
 str2:'true'
 str3:"333"

配列

行頭に-をいれることで、配列として扱うことが出来る。このときに-と値の間には半角スペースをいれること


- Ruby
- Java
- PHP

出力用メソッド

以降の出力例でも同様のものを使用

require 'yaml'

p YAML.load_file('test.yml')

出力結果

yaml_test.rb
["Ruby", "Java", "PHP"]

半角スペースでインデントを入れると、配列をネストさせることが出来る


- parent1
-
  - children1.1
  - children1.2
  - children1.3
  -
    - grandchild1.3.1
    - grandchild1.3.2
    - grandchild1.3.3
- parent2

出力結果

["parent1", ["children1.1", "children1.2", "children1.3", ["grandchild1.3.1", "grandchild1.3.2", "grandchild1.3.3"]], "parent2"]

ハッシュ

:で「キー:値」のように区切って記述する
おそらくこれが、railsで扱う中で一番多いパターンだと思います。


name: 名前
age: 年齢
gender: 性別
address: 住所

出力結果

{"name"=>"名前", "age"=>"年齢", "gender"=>"性別", "address"=>"住所"}

ハッシュに関しても半角スペースでインデントすることで、ネストさせることが可能


music:
  rock: ロック
  pop: ポップス
  jaz: ジャズ

出力結果

{"music"=>{"rock"=>"ロック", "pop"=>"ポップス", "jaz"=>"ジャズ"}}

アンカーとエイリアス

YAMLではアンカーとエイリアスを仕様することで、対象の構造に対して参照することが出来る
&nameでアンカーをつけ、*nameで参照することができる。

Railsの database.ymlなどではデフォルトで使われている


default: &default
  adapter: postgresql
  encoding: unicode

development:
  <<: *default

ちなみにここで登場している <<を用いることでハッシュをマージ出来る。

{"default"=>{"adapter"=>"postgresql", "encoding"=>"unicode"}, "development"=>{"adapter"=>"postgresql", "encoding"=>"unicode"}}
参考文献

プログラマーのための YAML 入門 (初級編)