目次
- YAMLとは?
- YAMLを何に使う?
- YAMLとYMLの違いとは?
- YAMLとJSONの違い
- YAMLとCUEの比較
- YAMLのデータ構造と書き方(基本編)
- GitLabでYAMLを使う
- 実際にYAMLファイルを編集してみましょう
- YAMLに関するFAQ
YAMLは、KubertenesファイルやAnsibleプレイブックに使用されるデータシリアライゼーション・フォーマットです。この記事では、YAMLファイルの基本的な書き方や具体的な利用シーンについて詳しく解説します。
YAMLとは?
YAMLは、人間がデータを簡潔かつ理解しやすく表現するよう設計されており、設定ファイルやデータ転送で頻繁に使用されるプログラミング言語です。階層的情報の整理に適し、Jsonやxmlの代替と利用されることがあります。
YAMLを何に使う?
YAMLは可読性の高いこともあり、設定ファイルやプレイブックの記載に使われます。いくつか例を下記に記載しますので、参考にしてください。
- 設定ファイルの記述
- ログファイル
- プロセス間でのメッセージのやり取り
- アプリケーション間でのデータ共有
- 構造化データの記述
YAMLとYMLの違いとは?
どちらも同じ形式のファイルを指し、拡張子が「.yml」か「.yaml」という表記の違いだけです。ヤムルファイルであることを示す正式な拡張子は.yamlですが、一般的に拡張子(.txt, .zip, .exe, .png等)は3文字で記載されるので、この3文字ルールに合わせたのが.ymlとなっています。短く簡潔に書きたい開発者には「.yml」が選ばれることが多いです。
YAMLとJSON形式の違い
JSON形式では中括弧を使って要件を定義していくのに対して、YAMLは、インデントで構造が明示されるので、可読性が高くなっています。下記サンプルを見比べてください。
YAMLは、プログラマーにとっての使いやすさを重視していることがわかると思います。
YAML:
JSON:
YAMLとCUEの比較
YAMLは、可読性が高くシンプルな構造を持つのに比べ、CUEは、スキーマとデータを統合するため、複雑な設定もひとつのファイルで管理できます。また、YAML単体では実現できなかったスキーマバリデーション機能を持つので、データの整合性を担保しやすいです。
また、柔軟性も大きな特徴です。CUEは、あらゆる種類のデータを定義、生成、検証するために使用されるオープンソースの言語(具体的にはJSONのスーパーセット)なので、Go、JSON、OpenAPI、Protocol Buffers、YAMLなどの他の多くの言語と連携できます。
また、Go APIによるスクリプト機能を備えているので、CUEによるマニフェストを最終的なKubernetesリソースのYAMLとして表示したり、特定クラスタにデプロイするリソースを一覧するコマンドを実装する際などに使う機会があります。
YAMLのデータ構造と書き方(基本編)
YAMLファイル記述の注意点
インデントとタブが、とても重要であることを覚えておいてください。余分なインデントやタブが使われていると、YAMLオブジェクトの意味が変わってしまうので、これらがとても重要になります。
YAMLのデータ構造
YAMLは主に、コレクションとスカラーという2つのデータで成り立っています。コレクションは、シーケンスとマッピングから成り立ちます。シーケンスは配列、マッピングは名前と値のペア(Key : Valueで表現する配列)。そしてスカラーは、型を判別させるためのもので、文字列、数値などを表します。
- コレクション
- シーケンス
- マッピング
- スカラー
YAMLの書き方
- 複数行のコレクション:複数の行のフォーマットを維持する必要がある場合には | (バーティカルバー) シンボルを使用します。
- 複数行のフォーマット:長い文字列の値があり、フォーマットを維持したまま複数行に渡って記述する必要がある場合には、 > を使用します。
- リスト:リストは - (ハイフン)を使って表現します。
- ネスト:ネストされたデータ構造はインデントを使って表現されます。
Kubernetes(k8s)のYAMLファイルの書き方
Kubernetesでは、リソースの定義にYAMLファイルが使用されます。今回はYAMLマニフェストの書き方を紹介します。
YAMLマニフェスト:
AnsibleのYAMLファイルの書き方
Ansibleでは、処理内容を記載するプレイブックをYAMLで記載します。以下に、簡単なAnsibleプレイブックの例を示します。
GitLabでYAMLを使う
GitLab CI/CD パイプラインは、プロジェクト毎に.gitlab-ci.ymlというYAMLファイルを使ってパイプラインの構造と実行順序を定義します。このファイルで設定された内容を、GitLab Runnerの中で処理します。CI/CD YAML構文についてはこちらの英文まとめページをご参照ください。
実際にYAMLファイルを編集してみましょう
YAMLは、そのシンプルさと可読性の高さから、設定ファイル、CI/CDパイプライン、Kubernetesをはじめとするコンテナオーケストレーションやドキュメント、構成管理など、多岐にわたり利用されています。その可読性の高さで、開発者や運用エンジニアが構成やデータを容易に管理し、効率的に作業を進めることができます。YAMLを理解することで、様々なシステムやツールの設定がより簡単かつ直感的に行えるようになるでしょう。
YAMLに関するFAQ
YAMLは何に使われますか
YAMLは、そのシンプルさと可読性の高さから、設定ファイル、CI/CDパイプライン、Kubernetesをはじめとするコンテナオーケストレーションやドキュメントと構成管理など、多岐にわたり利用されています。
YAMLとJSONの違いは?
JSONファイルは中括弧を使って要件を定義していくのに対して、YAMLは、インデントで構造が明示されるので、可読性が高くなっています。ただし、YAMLではインデントやスペースがとても重要になる点に注意が必要です。
YAMLはなぜ人気なのですか?
YAMLは開発者の間で人気のあるデータシリアライズ言語です。なぜなら、その読みやすさ、汎用性、Pythonと似たインデントシステムを使うからです。YAMLは複数のデータ型をサポートしており、多くのプログラミング言語で利用可能なパーサーライブラリが提供されているため、さまざまなデータシリアライゼーションタスクを扱うことができ、幅広い場面で活用されています。
監修:佐々木 直晴 @naosasaki (GitLab合同会社 ソリューションアーキテクト本部 シニアソリューションアーキテクト)