Jump to section

YAML とは

URL をコピー

YAML は人間が判読できるデータシリアライズ言語で、設定ファイルの記述によく使用されます。YAML は Yet Another Markup Language の略語であると言う人もいれば、 YAML Ain't Markup Language (再帰的頭字語) であると言う人もいますが、これは YAML が文章ではなくデータを扱うためのものであるということを強く示しています。 

YAML は、読みやすく理解しやすいように設計されている言語のため、人気のあるプログラミング言語です。また、他のプログラミング言語と組み合わせて使用することも可能です。柔軟性と使いやすさを兼ね備えた YAML は、Ansible Playbook の形式で自動化プロセスを作成する Ansible 自動化ツールによって使用されます。

YAML ファイルは拡張子が .yml または .yaml で、特定の構文ルールがあります。 

YAML は、Perl、C、XML、HTML などのプログラミング言語に由来する機能を備えています。YAML は JSON の上位集合でもあるので、JSON ファイルは YAML でもそのまま使えます。

中括弧、角括弧、閉じタグ、引用符などの通常の書式記号はありません。また、YAML ファイルでは Python のようにインデントを使用して構造を決定し、ネストを示すので、読みやすくなっています。システム間での可搬性を維持するために、タブ文字は設計上許可されていないため、代わりに空白文字 (リテラルスペース文字) を使用します。 

コメントは番号記号/ハッシュ記号 (#) で識別します。コメントはコードの意図を説明するものなので、コメントの使用は常に推奨されます。YAML は複数行のコメントには対応しないため、各行の冒頭にハッシュ記号を付ける必要があります。

YAML 初心者によくある質問は「3 つのダッシュは何を意味するのか」ですが、3 つのダッシュ (---) はドキュメントの開始を示すために使用し、各ドキュメントの終了を示すには 3 つのドット (...) が使用します。 

これは、極めて基本的な YAML ファイルの例です。

 #Comment: This is a supermarket list using YAML #Note that - character represents the list --- food: - vegetables: tomatoes #first list item - fruits: #second list item citrics: oranges tropical: bananas nuts: peanuts sweets: raisins 

YAML ファイルの構造はマップやリストであり、インデントとキー値の定義方法に応じて階層化されていることに注目してください。マップでは、key-value ペアを関連付けることができます。それぞれのキーは一意でなければならず、順番は関係ありません。Python の辞書や Bash スクリプトの変数割り当てのように考えると良いでしょう。

YAML のマップはクローズする前に解決する必要があり、その後に新しいマップを作成できます。新しいマップは、インデントレベルを上げるか、前のマップを解決して隣接マップを開始することで作成できます。

リストには特定の順序で列挙された値を含めることができ、必要に応じて任意の数の項目を含めることが可能です。リストの並びは、ダッシュ (-) とスペースで始め、インデントで親と区別します。シーケンスは、Python のリストや、Bash または Perl の配列と同じように考えることができます。リストをマップに埋め込むこともできます。

上記の例では、「vegetables」と「fruits」は「food」という名前のリストに含まれる項目です。

YAML にはスカラー値も含めることができます。スカラー値とは、文字列、整数、日付、数値、ブール値などの値として使用できる任意のデータ (Unicode でエンコードされている) です。

YAML ファイルを作成する際には、これらの構文ルールに従い、ファイルが有効であることを確認する必要があります。そのために、ファイルの構文を検証するアプリケーションであるリンターを使用することができます。yamllint コマンドは、アプリケーションに引き渡す前に、その YAML ファイルが有効であるかどうかを確認するのに役立ちます。

これは、構文ルールを示す単純な YAML ファイルの例 (学生の記録) です。

 #Comment: Student record #Describes some characteristics and preferences --- name: Martin D'vloper #key-value age: 26 hobbies: - painting #first list item - playing_music #second list item - cooking #third list item programming_languages: java: Intermediate python: Advanced javascript: Beginner favorite_food: - vegetables: tomatoes - fruits: citrics: oranges tropical: bananas nuts: peanuts sweets: raisins 

このファイルを PyYAML ライブラリを使用して Python に変換すると、次のようなデータ構造になります。

 [ { "name": "Martin D'vloper", "age": 26, "hobbies": ["painting", "playing_music", "cooking"], "programming_languages": { "java": "Intermediate", "python": "Advanced", "javascript": "Beginner", }, "favorite_food": [ {"vegetables": "tomatoes"}, { "fruits": { "citrics": "oranges", "tropical": "bananas", "nuts": "peanuts", "sweets": "raisins", } }, ], } ]

YAML の最も一般的な用途の 1 つは、設定ファイルの作成です。設定ファイルは JSON ではなく YAML で記述することが推奨されています。ほとんどの場合において両者は同じように使うことができますが、YAML の方が読みやすく、ユーザーフレンドリーであるためです。 

YAML は Ansible での使用に加えて、Kubernetes のリソースとデプロイメントに使用されます。 

YAML ファイルを Github などのソースコントロールに追加することで、変更の追跡と監査が可能になるというのが、YAML を使用するメリットの 1 つです。

Ansible と Red Hat Ansible Automation Platform の違いは何ですか?

Ansible における YAML

Ansible Playbook は、IT プロセスをオーケストレーションするために使用されます。Playbook は、1 つ以上の play を含む YAML ファイルで、システムの望ましい状態を定義するために使用されます。 

各 play は 1 つ以上のタスクを実行することができ、各タスクは Ansible モジュールを起動します。モジュールは、Ansible で自動化タスクを実行するために使用されます。Ansible モジュールは、Ruby、Python、bash など、JSON を返すことができる任意の言語で記述できます。

Ansible Playbook は、マップとリストで構成されています。Playbook を作成するには、play を指名する YAML リストを開始し、タスクを順番にリストアップします。インデントは論理的な継承を示すものではありません。各行を YAML のデータタイプ (リストやマップ) と考えると良いでしょう。

YAML テンプレートを使用することで、Ansible ユーザーは高度なプログラミング言語を習得しなくても、繰り返しタスクを自動的に実行するようにプログラミングすることができます。また、開発者は ansible-lint コマンド、つまり Ansible Playbook の YAML リンターを使用して、エラーが操作の重要な段階で発生しないようミスを特定できます。

生成 (Generative) AI サービスである Ansible Lightspeed with IBM Watson Code Assistant を導入することにより、開発者は Ansible 自動化コンテンツをより効率的に作成できます。ユーザーは平易な英語でタスクリクエストを入力でき、Ansible Playbook の作成に使用される自動化タスク用のクリーンでコンプライアンスに準拠した YAML コードの推奨情報を取得できます。

Kubernetes での YAML

Kubernetes は、定義された状態と実際の状態に基づいて機能します。Kubernetes オブジェクトはクラスタの状態を表し、ワークロードをどのように見せたいかを Kubernetes に伝えます。Pod、オブジェクト、デプロイメントなどの Kubernetes リソースは、YAML ファイルを使って作成することができます。 

Kubernetes のオブジェクトを作成する際には、オブジェクトの望ましい状態を定義するための仕様を含める必要があります。Kubernetes API はオブジェクトの作成にも使用できます。API へのリクエストにはオブジェクトの仕様が JSON で含まれていますが、ほとんどの場合、必要な情報を YAML ファイルとして kubectl に提供します。Kubectl は、API リクエストを行う際にこのファイルを YAML に変換してくれます。

オブジェクトが作成および定義されると、Kubernetes はそのオブジェクトが常に存在することを確認します。 

開発者やシステム管理者は、Kubernetes API に送信する YAML または JSON ファイルを使用して、定義された状態を指定します。Kubernetes はコントローラーを使用して、新しく定義された状態とクラスタ内の実際の状態の違いを分析します。

Red Hat Ansible Automation Platform の判読可能な YAML 自動化言語により、組織全体のユーザーが自動化コンテンツを共有し、吟味し、管理することができます。Ansible Automation Platform には、Playbook、分析機能など、企業全体での自動化の導入に必要なツールがすべて揃っています。ビジュアル・ダッシュボードやロールベースのアクセス制御などにより IT インフラストラクチャを一元的に制御し、運用の複雑さを低減できます。

Red Hat サブスクリプションを使うことで、認定コンテンツ、堅牢なパートナーエコシステム、ホストされた管理サービスへのアクセス、チームが組織全体で自動化を作成、管理、拡張するためのライフサイクル・テクニカルサポートを利用できます。また、数千ものお客様を支援することで蓄積された Red Hat の専門知識を活用できます。

Red Hat OpenShift は、エンタープライズ向けの Kubernetes です。Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。

Red Hat OpenShift を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアが迅速かつ簡単にビジネスにつながるのを助けます。

自動化によってどれだけの時間を節約できる?

組織全体で Red Hat® Ansible Automation Platform を使用することによってどれだけの時間を節約できるのか、以下のいくつかの短い質問に答えることで確認できます。

関連資料

記事

Ansible の基本を学ぶ

Ansible は、プロビジョニング、構成管理などの IT プロセスを自動化します。主要な概念を含む Ansible の基本を確認できます。

記事

ビジネスプロセス管理とは

ビジネスプロセス管理 (BPM) とは、エンドツーエンドのビジネスプロセスをモデリング、分析、最適化して、戦略的な事業目標の達成を支援することです。

記事

Red Hat の自動化を選ぶ理由

Red Hat Ansible Automation Platform には、複数チームでの自動化の展開や企業全体での自動化の導入に必要なツールがすべて揃っています。

自動化の詳細はこちら

製品

Red Hat の戦略的アドバイザーが、企業組織の全体像を把握しながら課題を分析し、包括的かつコスト効率に優れたソリューションで課題を解決できるようお手伝いします。

エンタープライズ規模で自動化を実装するプラットフォーム。自動化導入のあらゆる段階に対応。

リソース

トレーニング

無料のトレーニングコース

Ansible Essentials: Simplicity in Automation Technical Overview

無料のトレーニングコース

Red Hat Ansible Automation for SAP