ホーム Topics YAML YAMLとは何か
IBM watsonx™ Code Assistant for Red Hat Ansibleはこちら デモの予約
コンピューターのモニターでコードを見ている同僚

公開日:2023年12月11日
寄稿者:Tasmiha Khan、Michael Goodwin

YAMLとは何か

YAMLは、人間が読み取れる多用途のデータ・シリアル化言語で、一般的には構成ファイルの作成に使用されます。

人間にとって理解しやすいうえに、機械による解釈も可能な形で構造化データを表現できるように標準化された形式になっています。「YAML」は、「YAML Ain't Markup Language(YAMLはマークアップ言語ではない)」、あるいは「Yet Another Markup Language(また別のマークアップ言語)」を略した頭字語です。前者は、この言語がドキュメントではなくデータを対象としていることを強調した名前になっています。

基本的にYAMLは、シンプルさと読みやすさを念頭に置いて設計されています。使用するのは、インデント、キーと値のペア、直感的な表記規則を利用したクリーンでミニマルな構文です。こうしたアプローチなので、開発者とユーザーは複雑なデータ構造を、ひと目で理解できる自然言語に似た形式で表現できます。

人間にとって読みやすいことを重視しているため、YAMLは、構成(config)ファイルや、異なるシステム間でのデータ交換など、さまざまなアプリケーションに特に適しています。その単純で直感的な構造によって、さまざまなドメインで使いやすさが向上しており、ユーザーは明解でわかりやすい形でデータを定義し、整理できます。YAMLはUnicode文字をサポートしているので、各種の言語や文字セットの幅広い文字や記号を表現することができます。YAMLが有効であれば、構文エラーのない仕様になります。

YAMLは適応性があるため、幅広いアプリケーションにわたって多用途に使用できます。構成管理からデータ交換および自動化まで、YAMLの使いやすさはさまざまなドメインに及んでいるので、データを表現し管理する際にアクセスできる構造化された手段となります。

デモに関するお問い合わせ

今こそ、生成AIの力で自動化をレベルアップするときです。IBM watsonx Code Assistant for Red Hat Ansible Lightspeedの動作を実際に確認するには、当社の専門家による30分間のパーソナル・デモをご予約ください。

関連コンテンツ

IBMニュースレターの購読

YAMLの構文と属性

YAMLの構文にはさまざまな属性と主な要素があります。効率的なデータ表現と読みやすさを実現するには、YAMLファイルで使用される構造、データ型、表記規則を理解することが欠かせません。

マップ(辞書)

YAMLでは、辞書をマッピングとして表現します。マッピングとは、キーごとに値が関連付けられているキーと値のペアのコレクションです。このデータ構造は、各種のプログラミング言語で見られる辞書やマップの概念に似ています。

インデント

YAMLの構文は、データの構造を表すためにインデントとスペースの数に大きく依存しています。階層とネスト構造を示すときには、空白を使用します。タブ文字はYAMLでは禁止されているからです。YAMLはその構造をインデントに依存しているため、YAMLドキュメント全体の一貫性が重要です。

改行(NewlineまたはLine Break)は、さまざまな要素を区切るために使用されるYAML形式内の行末です。

引用符

YAMLにおけるスカラーのほとんどは、引用符を必要としません。ただし、特殊文字を含んでいてYAML構文と誤解される可能性のあるテキスト文字列の前後など特定の状況では、混乱を避けるために引用符が必要になる場合もあります。あるいは、"true"のみから構成される文字列があって、ブール値に変換してほしくない場合にも必要です。このような場合、データと、表現しなければならない内容に応じて一重引用符または二重引用符を使用できます。

キーと値のペア

YAMLでは、データの関連付けを表すために、コロンで区切った単純なキーと値のペアという形式が採用されています。

例:

職業:教師

シーケンス(配列)

シーケンス(他の言語で言う配列またはリスト)を使用すると、YAMLで項目のリストを定義できます。シーケンスと親はインデントで分離します。各リスト項目はダッシュ(-)で始まり、その後にスペースが続きます。1つのシーケンスの項目はすべて、同じ数だけインデントします。

例:

果物:
    - リンゴ
    - オレンジ
    - 梨

シーケンスは、大かっことカンマを使用してフロー・シーケンスで表すこともできます。1

果物:[リンゴ, オレンジ, 梨]

データ型

YAMLは、文字列、整数、浮動小数点数、ブール値、NULL値などさまざまなデータ型をサポートします。これらのデータ型により、各種の情報を柔軟に表現できます。

コメント

YAMLでは、#記号を使ってコメントを記入できます。コメントは、YAMLファイルで説明やメモ、またはコンテキスト情報を追加するときに便利です。

複数行の文字列

YAMLは複数行の文字列をサポートしているので、明示的な改行を入れずに複数行にまたがったテキストも使用できます。複数行の文字列は、YAMLドキュメントにテキストのブロックを含める場合に便利です。

YAMLファイル

YAMLファイルには通常、.yamlや.ymlなどの拡張子が付けられます。YAMLファイルの命名と構造化の規則によってデータの一貫性と適切な解釈が保証されます。YAMLファイルは、Perl、Ruby、Pythonでも読み取ることができます。

YAML、JSON、XML

YAMLとJSONはデータ表現に類似点もありますが、可読性、表現力、および複雑なデータ構造のサポートに関してはYAMLのほうが優れています。YAMLはJSONのスーパーセットです。つまり、拡張された機能やコマンドに加えて、JSONのすべての機能が含まれているということです。

JSON(JavaScript Object Notation)では、中かっこ{}、大かっこ[]、カンマを使用した明示的な構文を使用します。簡潔で広く使用されているものの、JSONの構文は、特に大規模なデータセットでは読みにくくなる可能性があります。JSONではデータ構造のサポートが比較的限られており、主に使用できるのは配列、オブジェクト、スカラー値です。

JSONが特に好まれる理由は、WebアプリケーションやAPIにおけるデータ交換の相互互換性です。一方、YAMLは、設定ファイルや、ある種のデータの文書化や交換など、人間による読みやすさと複雑なデータ構造が要求される場合に多用される傾向があります。2

XMLと比較すると、YAMLのほうが簡潔で人に親しみやすい言語であり、データの表現と交換における単純さと理解のしやすさが際立っています。YAMLとXMLは、構文と目的に根本的な違いがあります。

XMLは高度に構造化されており、明示的な開始タグと終了タグに依存しているため、若干わかりにくくなっています。それに対して、YAMLはもっと単純で自然言語に似た構造を採用しており、明示的な終了タグを使用せずにインデントと、キー/値ペアによる読みやすさに重点を置いています。

YAMLのユースケース

YAMLはあらゆるプログラミング言語で使用でき、データ交換や文書化だけでなく、構成ファイルにもたびたび使用されます。人間が読み取れる形式なので、ドキュメントの明瞭さが向上します。

YAMLとDevOps

YAMLはDevOpsできわめて重要な役割を果たし、自動化、オーケストレーション、構成管理に役立ちます。DevOpsの実務で、YAMLファイルは一連のアクションと構成をわかりやすい形式で定義する青写真として機能します。そのファイルは、自動化に必要なステップと手続きの概要を正確に記述するために使われ、複雑なワークフローでも明解かつ簡潔に表現できるようになります。

コードとしてのインフラストラクチャー(IaC)

YAMLは、コードとしてのインフラストラクチャー(IaC)の定義に使用されます。IaCとは、手動プロセスではなくコードを使用してITインフラストラクチャーを定義し管理することを指します。IaCによって、ITインフラストラクチャー構成の効率と一貫性が向上します。YAMLを使用すると、仮想マシン、ネットワーク、ストレージなどのインフラストラクチャーに必要な構成を定義したり、ITインフラストラクチャー・コンポーネント間の関係を記述したりできます。

導入

YAMLは、アプリケーションの構成、依存関係、リソース制限、あるいはアプリケーションの効率的なデプロイメントとパフォーマンスに欠かせないその他の情報を指定するアプリケーションのデプロイメント・ファイルを作成する際に使用されます。YAMLファイルは、バージョン管理と自動化を通じて、デプロイメント・エラーを削減し、アプリケーションの配信速度を向上させるうえで役立ちます。

CI/CDパイプライン構成

YAMLは、アジャイルDevOpsの重要なワークフローである継続的統合および継続的デリバリー(CI/CD)パイプラインで重要な役割を果たします。インフラストラクチャーの構成およびデプロイメントと同様に、YAMLファイルはパイプラインのステップとターゲットを定義するために使用され、最終的にはCI/CDプロセスの自動化に役立ちます。

YAMLツールとDevOpsツール

DevOpsチームが使用する多くのツールやプログラムはYAMLを活用しています。

Ansible

Ansibleは、プレイブックとして知られるYAML形式のファイルを使用してタスクと自動化手順を定義するオープンソースの自動化ソフトウェア・アプリケーションです。YAMLテンプレートを使用すると、ユーザーは高度なプログラミング言語の知識がなくても、反復的なタスクの自動化をプログラムできます。3

IBM watsonx™ Code Assistant for Red Hat Ansible Lightspeedを使用すると、ユーザーはタスクを平易な英語で記述し、自動化タスクの推奨YAMLコードを受け取ることができます。 これらのコードの推奨事項を使用して、Ansibleのプレイブックが作成されます。3

Kubernetes

Kubernetesはオープンソースのコンテナ・オーケストレーション・プラットフォームで、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化する際に使用されます。Kubernetesは「状態」に基づいて動作し、特定の指示に基づいて現在の状態から望ましい状態に到達しようとします。YAMLファイルは、ポッド、オブジェクト、デプロイメントなどのKubernetesリソースを作成したり、Kubernetesオブジェクトの望ましい状態を指定して伝達したりするときに使用できます。

GitHub

GitHubは、ソフトウェア開発におけるバージョン管理とコラボレーションに用いられるWebベースのプラットフォームで、ワークフローを定義する目的でYAMLが組み込まれています。GitHubリポジトリでYAMLベースの構成を使用すると、継続的統合とプロジェクト管理のための自動ワークフローをセットアップできます。

Docker Compose

Docker Composeは、複数コンテナのDockerアプリケーションを定義して実行するためのツールです。4YAMLファイルは、Docker Composeでアプリケーションのサービスを構成する際に使用されます。

言語を超えたデータ共有

YAMLは言語に依存しないため、言語を超えたデータ共有に最適です。YAMLファイルを定義すると、そのファイルをPythonやRubyなど他の言語で実行できます。

ログ・ファイル

ログ・ファイルとは、コンピューターで生成されるテキスト・データ・ファイルの一種で、アプリケーションやシステム、サーバー、その他のITリソースまたはデバイスにおける操作とパターンに関する情報が含まれています。リソースのパフォーマンスを測定する目的で使用され、システムの可観測性に関して重要な役割を果たします。そのシンプルな性質から、YAMLは直感的でクリーンなログ・ファイルの作成に使用されます。

YAMLの利点

YAMLは、そのシンプルさ、互換性、構成ファイルの作成におる有用性など複数の理由から、データ・シリアル化言語として広く普及しています。

簡易性

YAMLの構文は、自然言語の構造に似ています。そのシンプルさとミニマルな設計から、開発者にも、技術者以外のユーザーにもわかりやすくなっているので、理解がしやすく、エラーが減ります。

設定ファイルでの使用

YAMLは、構造化された読みやすい形式なので、構成ファイルに適しています。インデントとキー/値ペアを使用することで構成を定義するプロセスが簡素化されるため、管理が容易になり、億種のソフトウェア・アプリケーションに適応できるようになります。

互換性

YAMLはプラットフォームに依存しないという性質を持つため、さまざまなシステムやプログラミング言語間での互換性が保証され、各種のプラットフォームおよび環境間でシームレスなデータ交換と相互運用性が促されます。

YAML処理に用いるツール

PyYAMLは、PythonベースのアプリケーションでYAMLファイルの解析と操作に使用される著名なPythonライブラリです。YAMLデータをPythonオブジェクトにロードするメソッドが用意されています。PyYAMLを使用すると、YAMLファイルをPythonアプリケーション内部で実用的なデータ構造に変換したり、その逆の変換を行ったりできます。5

PyYAMLをはじめとするYAMLパーサーや、yamllintあるいはYAML Validatorといったバリデーターなどのツールは、YAMLファイルの正確性、有効性、整合性を維持するうえで重要な役割を果たします。その主な機能としては、YAML構文の検証、エラーの特定、YAMLドキュメント内の一貫性の確保などがあります。

関連ソリューション
IBM watsonx Code Assistant for Red Hat Ansible Lightspeed

IBM watsonx Code Assistant for Red Hat Ansible Lightspeedは、生成AIを活用したコンテンツ推奨を通じて、Ansibleプレイブックの作成プロセスをわかりやすく手引きします。IT自動化の加速を目的として設計されたこの製品は、自動コンテンツ推奨を提供することでAnsibleエクスペリエンスを向上させるように設計されています。

watsonx Code Assistant for Red Hat Ansible Lightspeedはこちら デモの予約

IBM watsonx Code Assistant

IBM watsonx™ Code Assistantは、信頼、セキュリティー、コンプライアンスの原則を中核に据えながら、生成AIを活用して開発を加速します。開発者とITオペレーターは、アプリケーションのモダナイゼーションの取り組みを加速し、自動化を実現してIT環境を迅速に拡張することができます。

IBM watsonx Code Assistantはこちら

詳細情報はこちら

生成AIを活用して自動化を進める準備はできていますか? ライブデモを予約するか、当社の専門家とお話しになるときに、watsonx Code Assistant for Red Hat Ansible Lightspeedで何ができるかをご覧ください。

watsonx Code Assistant for Red Hat Ansible Lightspeedはこちら デモの予約
脚注

1 「YAMLで配列を表現する方法」(ibm.com外部へのリンク)","Tarun Telang、Educative, Inc.、2023年

2 「YAMLとJSONの違いは何か」(ibm.com外部へのリンク)、Amazon Web Services、2023年

3 「YAMLとは何か」(ibm.com外部へのリンク)、RedHat.com、2023年3月3日

4 「Docker Composeの概要」(ibm.com外部へのリンク)、Docker.com、2023年

5 「Python YAML | YAMLファイル受け渡しガイド」(ibm.com外部へのリンク)、Gabriel Ramuglia、2023年9月11日