はじめに
現在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')
出力結果
["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"}}