PROGRAMMING

[初心者でも理解できる]YAMLについて YAMLを読み書きできるようになる

はじめに

こんにちは!だいちです!

業務でYAMLについて学習する機会があったので、アウトプットも兼ねてブログに記録しておきます。これからYAMLの学習をしたい方、YAMLの復習もしたい方、ぜひ読んでいってください!これを読めばYAMLの読み書きができるようになると思います。

YAMLとは?

YAML(ヤムル)は、データをわかりやすく読み書きするための方法です。人間が読む文章に似ているため、PCの設定やデータを簡単にまとめることができます。

例えば、他の形式(JSONやXML)ではたくさんのカッコや記号が必要ですが、YAMLではインデント(字下げ)だけでデータの階層を表現します。このおかげで、コードが短くなり、誰でも読みやすいものになります。なのでインデントやスペースが非常に重要になってきます。

YAMLは、アプリやツールの設定を行うためによく使われ、ゲームの設定や、ウェブサイトのデータをまとめる時などに役立つ方法です。

YAMLの記法

YAMLの教科書画像1

YAMLの記法は主に3つあります。

スカラー:文字列、数値、真偽値、NULL、日付のデータ型を記述

シーケンス:複数のデータをリスト形式で表現します。各項目の前にハイフン - をつけて記述し、順序のあるデータを扱うのに適しています。

マッピング:キーと値のペアでデータを表現します。辞書やハッシュのようにデータを整理し、関連付けて管理するのに便利です。

それぞれ説明していきます。

スカラー: 基本的なデータ型

YAMLでは、スカラーという言葉を使って、文字列や数値、真偽値、日付などの基本的なデータ型を表現します。スカラーは、YAMLの中で最もシンプルなデータの種類です。

・文字列

文字列は、文章や単語を表すデータ型です。YAMLでは、文字列をそのまま書くか、必要に応じて ‘ または ” で囲みます。

name: "山田太郎"

greeting: 'こんにちは'

 

・数値

数値は、そのまま数字を記述します。整数や小数点を含む数値がそのまま使用できます。

age: 25

height: 170.5

 

・真偽値

YAMLでは、true や false を使って真偽値を表現します。これで条件の有無を表すことができます。

is_active: true

has_license: false

 

・日付の記述方法

YAMLでは、日付を以下のように記述できます。

birthday: 2024-11-02 #この形式で記述すると、自動的に日付型として認識されます。

・日時の記述方法

タイムスタンプもサポートされており、以下のように記述できます。

event_start: 2024-11-02T14:30:00Z

#2024-11-02: 日付部分
#T14:30:00: 時間部分(24時間表記)
#Z: UTC(協定世界時)を示す記号

 

・特殊な値

YAMLには、特別なスカラー値として null も使用できます。これはデータが存在しないことを示します。

nickname: null

 

これらのスカラーを使うことで、シンプルかつわかりやすいデータ記述が可能になります。スカラーは他のデータ型(シーケンスやマッピング)と組み合わせて使用されることが多く、データの基本的な単位として重要です。

シーケンス: リスト形式のデータ表現

YAMLでは、シーケンスを使って複数のデータをリスト形式で表現できます。シーケンスは、リストや配列のように、データを順番に並べて管理するために使われます。

・シーケンスの基本記述

YAMLでシーケンスを表現するには、各項目の前にハイフン – をつけてインデントするだけです。これにより、データが順序付けられていることを示します。

fruits: #キー
 - apple #リスト
 - banana #リスト
 - cherry #リスト

上記の例では、fruits というキーに対して、apple、banana、cherry というリストが紐づいています。

・ネストされたシーケンス

シーケンスの中にさらにシーケンスをネストすることも可能です。これにより、階層構造を表現できます。

teams:
 - name: "Team A"
  members:
   - 太郎
   - 山田

 - name: "Team B"
  members:
   - 花子
   - 鈴木

この例では、各チームの名前とメンバーをネストしたシーケンスで表現しています。

シーケンスの使用例

シーケンスは、設定ファイルで複数の設定項目を管理する際や、複数のデータ項目をまとめて扱う際によく使用されます。

例:複数のサーバーのIPアドレスをリストとして管理

servers:
 - 192.168.1.1
 - 192.168.1.2
 - 192.168.1.3

マッピング: キーと値のペアでデータを定義する方法

YAMLにおけるマッピングは、キーと値のペアを使ってデータを表現する方法です。これは、ハッシュや辞書のようなデータ構造と似ており、キーとそれに対応する値を関連付けて管理します。

・マッピングの基本記述

マッピングでは、キーと値をコロン : で区切って記述します。各ペアは新しい行に記述し、インデントで階層を示します。

person:
 name: "山田太郎"
 age: 30
 city: "東京"

この例では、person というキーの下に、name、age、city というキーとそれぞれの値が定義されています。

ネストされたマッピング

マッピングの中にさらにマッピングをネストすることも可能です。これにより、階層的なデータ構造を表現できます。 

company:
 name: "Tech Corp"
 location:
  city: "大阪"
  country: "日本"
 employees:
  - name: "田中一郎"
    role: "エンジニア"
  - name: "佐藤花子"
    role: "デザイナー"

この例では、company の中に location や employees などのネストされたデータが含まれています。

マッピングの使用例

マッピングは、設定ファイルやデータの構造化が必要な場面でよく使われます。例えば、アプリケーションの設定を記述する際に使用されます。

app_config:
 version: "1.0.0"
 environment: "production"
 logging:
 level: "info"
 file: "/var/log/app.log"

アンカーとエイリアス

YAMLの教科書画像2

YAMLには、同じデータを何度も記述する手間を省くために、アンカーとエイリアスという便利な機能があります。この機能を使うと、データを再利用でき、コードの冗長性を減らせます。

アンカーの基本

アンカーは、データにラベルをつけてそのデータを保存する仕組みです。アンカーをつけるには、& を使います。

default_settings: &default
 timeout: 30
 retries: 3
 log_level: "info"

この例では、default_settings というマッピングに &default というアンカーを設定しています。

エイリアスの基本

エイリアスは、すでにアンカーで保存されたデータを再利用する仕組みです。エイリアスを使うには、* を使います。

profile1:
 <<: *default
 username: "user1"

profile2:
 <<: *default
 username: "user2"

この例では、profile1 と profile2 にそれぞれ *default というエイリアスを使い、default_settings のデータを再利用しています。それぞれのプロファイルに異なる username を設定しつつ、その他の設定は default の内容を使っています。

アンカーとエイリアスのメリット

コードの重複を削減:同じデータを何度も記述する必要がなくなり、コードが短くなります。

一元管理:一度アンカーを定義すれば、エイリアスを使うすべての場所でそのデータを簡単に変更できます。

・実際の使用例

アンカーとエイリアスは、設定ファイルなどで共通の設定を複数のセクションに適用する際に便利です。

database: &db
 host: "localhost"
 port: 5432
 user: "admin"

development:
 database: *db
 debug: true

production:
 database: *db
 debug: false

この例では、database の設定を開発環境と本番環境で共通にしつつ、それぞれの環境で特定の設定を上書きしています。

データ解釈の方法

YAMLの教科書画像3

YAMLでは、データの構造を正しく解釈するためにいくつかの重要なルールがあります。その中でも、インデントとドキュメントの終端の扱いが特に重要です。

インデントの重要性

YAMLでは、インデント(字下げ)がデータの階層構造を示します。他の言語のように波括弧 {} や角括弧 [] を使わず、インデントだけでデータの親子関係を表現します。そのため、インデントを正しく使うことがYAMLの基本です。

person:
 name: "山田太郎"
 age: 30
 address:
  city: "東京"
  postal_code: "123-4567"

この例では、person の下に name、age、address があります。さらに address の中に city と postal_code がネストされています。この階層を表現するためにインデントが必要です。

・インデントはスペースで行う必要があります(タブは使えません)。

・一般的に、2スペースまたは4スペースを使いますが、統一することが重要です。

ドキュメントの開始と終端

YAMLでは、複数のドキュメントを1つのファイルにまとめることができます。その際に使われるのが、ドキュメントの開始と終端を示す記号です。

・— : 新しいドキュメントの開始を示します

・… : ドキュメントの終端を示します(省略可能)

--- #ドキュメントの開始
person:
 name: "山田太郎"
 age: 30
... #ドキュメント終了

---
person:
 name: "佐藤花子"
 age: 25
... #省略可

この例では、2つの異なるドキュメントを1つのファイルに記述しています。— でそれぞれのドキュメントが開始され、… で終了を示しています。

・ドキュメントの終端のポイント:

— は新しいデータブロックの開始を明確に示すため、特に複数のドキュメントを扱う場合に役立ちます。

… はオプションですが、ドキュメントの終わりを明確にするために使うと、読みやすさが向上します。

YAMLを正しく解釈するためには、インデントの使い方とドキュメントの開始・終了の記述方法をしっかり理解することが重要です。これにより、データの構造を誤解せず、システムが正しく解釈できるようになります。

まとめ

YAMLは、簡潔で読みやすいデータ表現の方法として、多くの場面で活用されています。このブログでは、基本的なスカラー、シーケンス、マッピングの記述方法から、データの再利用を助けるアンカーとエイリアス、データの解釈に重要なインデントやドキュメントの終端までを解説しました。

業務で使用する機会があったので、アウトプットしました! YAMLを学ぶことで、設定ファイルの管理やデータ構造の整理がスムーズになり、業務効率が向上します。

さらに学習に励んでいこうと思います!それではまた!

ABOUT ME
daichi
介護士からWEBエンジニアに転身しました。 主にRubyを学習中です。WEBエンジニアとしての学びや日々の成長を発信していきます。
プロフィール

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA