はじめに
YAML(ヤメル)は、データやオブジェクトを構造化するための形式です。YAMLは、YAML Ain’t Markup Language の略でマークアップ言語ではないと自ら謳っています。Rubyの設定ファイル等で良く使われますが、軽量かつ覚えやすい文法から使い勝手が非常に良いのが特徴です。今回はそのYAMLの用途や基本文法について学んでいきたいと思います。
レッスン1.YAMLの用途
ここで、YAMLの代表的な用途を紹介したいと思います。
- Webページ
Ruby On Rails等のWebフレームワークでよく用いられます。 - 設定ファイル
CircleICやdockerではアプリケーションの動作内容を決めるファイルとして用いられています。 - データ交換
通信コマンドのフォーマットとして用いられることもあります。普及している規格を用いることで、汎用ライブラリを用いることができますので、通信ドライバの作り込み工数を減らす効果があります。 - ログファイル
アプリケーションが吐き出すログファイルとして用いられることもあります。こちらも決まった規格に沿った出力により、ログファイルの解析ツール等で用いる場合にも容易に扱うことができるようになります。
また、YAMLはJSONと親和性が高く、相互を変換するツールもあります。
レッスン2.言語仕様の基礎
では、YAMLの実際の言語仕様を見てみましょう。
今回はYAMLのオンラインパーサーを使って動作を確認していきます。
http://yaml-online-parser.appspot.com/
左側のウィンドウにYAMLのコードを入れると、右側にJSONで出力してくれます。
意図した構造になっているかをチェックできますし、エラーがあれば、エラーも教えてくれるので、学習する用途であればこれで十分です。
では、ここからは言語仕様について、文法別にコードを交えた説明を進めていきます。
注意点
YAMLを扱う上で、事前に知っておきたい注意事項がいくつかあります。まずはそこを押さえておきましょう。
インデントが意味を持つ
YAMLではネスト構造を表現するためにインデントを持ちます。そのため、正しくインデントを入れないと、正しく構造を表現できません。逆に考えれば、エラー無く書いていればインデントが必ず揃えられるので、見やすさを保てるといった長所でもあります。
スペースも意味を持つ
これもインデントと同じで、スペースが文法のひとつとなっていますので、正しく入れる必要があります。サンプルコード等を参照する際には注意しましょう。
では、注意点が理解できたところで、基本文法に移っていきましょう。
コメント
YAMLではファイル内にコメントを入れることができます。これはJSONには無い機能です。適切な説明を入れることで、データがより読みやすくなります。
コード
#この行はコメントです - a - b - c
シーケンス(配列)
データの塊を表すシーケンス(配列)は、頭に”-“を入れることで表現します。”-“の後はスペースを忘れないでください。
コード
#配列の例 - a - b - c
シーケンスはネストすることができます。その数は制限がないので、多次元配列を表現することも可能となっています。シーケンスをネストするときは、”-“の後を空行にすると階層が1つずつ下がります。
#"-"の後に空行があると階層を下げる - a - b - - d - e - - f - g
ハッシュ(連想配列)
キーと値の組み合わせである、ハッシュは”:”の後にスペースを入れて表現します。
#ハッシュは":"とスペースで表現 name: Taro age: 20
ハッシュもネストすることができます。シーケンスと同じように”:”の後に何も入れない行を入れると表現できます。
#ネストは":"と空行で表現 name: Taro age: 20 hobby: soccer: 10 baseball: 5
また、シーケンスとの組み合わせも可能です。
#ネストは":"と空行で表現 name: Taro age: 20 hobby: - tennis - ski
逆にシーケンスの要素の1つとしてハッシュを使うこともできます。
#シーケンスの要素としてハッシュを使う name: Taro age: 20 hobby: - experience - tennis: 1 ski: 5
フロースタイル
YAMLではここまで使ってきたスタイルを「ブロックスタイル」と呼び、もう一つ「フロースタイル」というスタイルがあります。
簡単に言うと、1行で表す記法です。1行で書いてしまうと見にくいので、一般的にはブロックスタイルが使われるのですが、短い要素であると分かっている場合には使われることがあります。こういった書き方もあるということを覚えておいていただければ十分かと思います。
同じ構造をブロックスタイルとフロースタイルで表現してみましょう。その違いを確認してください。
ブロックスタイル
name: Taro age: 20 hobby: - experience - tennis: 1 ski: 5
フロースタイル
{name: Taro, age: 20 ,hobby:[experience, {tennis: 1, ski: 5}]}
このようにネストが深くなると見づらくなるので、特に必要がない限り一般的にはブロックスタイルが使われます。
エイリアス
エイリアスはポインタのように、あるデータを参照するための構造です。共通データとして使う場合等に用いられます。修正が頻繁に発生するケースでは効果を発揮します。
具体的な使用例は以下です。
companies: - &FOX teamname: FOX city: California - &CAT teamname: CAT city: Denver members: - member1 - name: John company: *FOX - member2 - name: John company: *CAT - member3 - name: John company: *FOX
例は各メンバーの名前と会社名を紐づけたデータを想定しています。会社名をCompaniesに定義してしまえば、例えばFOXが所在地を変えたとしてもcompaniesの中身だけを書き換えれば済みますし、Memberが転職したとしてもすぐに入れ替えることができます。
少し高度ですが、上手く使えばメンテナンス性を向上させることができます。
おわりに
今回はYAMLについて学んできました。YAMLはJSONと近いながらも、利便性が高まっており、今後活躍する場面が増えていくと予想されます。是非基本文法をマスターして、使いこなせるようになりましょう。最後までお読みいただきありがとうございました。
No Comments