YAML と JSON の違いは何ですか?

YAML と JSON は、人間が読めるデータ交換メカニズムを提供する 2 つのデータシリアル化形式です。ソフトウェアアプリケーション間で交換できるように標準化された方法でデータをフォーマットし、そのテキストは人間でも読み取ることができます。どちらもデータを key-value ペアとして表します。JSON はデータオブジェクトを値としてサポートしますが、YAML はサポートしません。ただし、YAML はより多くのデータ型をサポートし、デベロッパーの使用をサポートするために自然言語を使用するという点で、より馴染みやすいです。

JSON について読む »

データ表現: YAML とJSON

JSON と YAML の外観と構文は似ていますが、少し異なります。

一見すると、JSON 形式のデータ表現は YAML よりも機械に近いように見えます。JSON メッセージには次の記号が含まれます。

  • オブジェクトの中括弧
  • key-value ペアを区切るコロン
  • 配列の角括弧 
  • 文字列を囲むための引用符

JSON は JavaScript の小さなサブセットから構築されました。そのため、その構文により JSON ドキュメントはプログラミングコードのように見えます。
 

JSON と比べ、YAML 形式は構造化されたデータを紙に書き留めるのに近いです。人間が読みやすいように特別に設計されました。以下を使用します。

  • オブジェクトを表すためのインデント 
  • key-value ペアを区切るコロン
  • 配列のハイフン
  • コメントを示すハッシュ

YAML はもともと XML を簡略化するために構築されました。

ドキュメントの例: YAML とJSON

シャツの商品データを含むドキュメントが YAML と JSON でどのように表示されるかの例を次に示します。

YAML

JSON

type: T-Shirt

price: 20.00

sizes:

  • S
  • M
  • L

   reviews: # Note about reviews

  • username: user1

         rating: 4

         created_at: 2023-04-19T12:30:00Z

  • username: user2

         rating: 5

         created_at: 2023-05-02T15:00:00Z

{

  "product": {

    "type": "T-Shirt",

    "price": 20.00,

    "sizes": ["S", "M", "L"]

    "reviews": {

      { "username": "user1”, "rating": 4, "created_at": "2023-04-19T12:30:00Z" },

      { "username": "user2”, "rating": 5, "created_at": "2023-05-02T15:00:00Z" }

    }

  }

}

主な相違点: YAML とJSON

YAML の構文により、特にデベロッパー以外の人にとっては、JSON よりも YAML ファイルが読みやすく、理解しやすく、書きやすいと考えられています。次に、その他の主な違いについて説明します。

データ型

JSON 形式は次のデータ型をサポートします。

  • 番号
  • ブーリアン
  • 空値
  • 文字列
  • 配列
  • オブジェクト (ネストされた key-value ペアのコレクション)

YAML 形式は、あらゆる動的プログラミング言語のすべてのネイティブデータ型をサポートします。例えば、シーケンス (リスト)、スカラー (番号や文字列など)、マッピング (key-value ペア) で構成されるネストされたデータのコレクションをサポートしています。このサポートにより、より複雑なデータ構造を作成できます。 

内蔵サポート

JSON は、さまざまなプログラミング言語と組み合わせて広く使用されています。例えば、JavaScript には JSON を解析するためのサポートが組み込まれています。Python 標準ライブラリには JSON も含まれており、JSON ライブラリは PHP 5.2 に組み込まれています。同様に、50 を超える他の一般的な言語が、さまざまなパッケージやライブラリを通じて JSON をサポートしています。

対照的に、一般的な言語の中で、YAML のサポートが組み込まれているものはありません。代わりに、デベロッパーはライブラリをインストールして使用する必要があります。よく使われている YAML パーサーには Python 用の PyYAML と C 用の LibYAML があります。 

バージョニング

JSON と YAML の両方を Git のようなバージョン管理ソフトウェアでバージョン管理することができます。ただし、バージョン間の YAML ファイルの変更をスキャンして把握する方が簡単だと考えられています。

コメント

コメントの JSON データ形式はサポートされていません。これを回避する方法として、デベロッパーはコメントの key-value ペアを定義する必要があります。

YAML ファイルでは、コメントはハッシュ記号の後に続きます。

いつ使うべきか: YAML とJSON

JSON は、広範囲のサポートおよび JavaScript との統合により、YAML と比べ、ほとんどのユースケースにおいてより一般的なデータシリアル化形式となっています。JSON は、分散ソフトウェア通信、ウェブアプリケーション、設定ファイル、および API で広く使用されています。

データ型と人間が読める形式からすると、YAML の方が適しているように見えるかもしれませんが、相互互換性を保つためには JSON が好まれます。これは、多くのアプリケーションやサービスがすでに JSON データ形式を解析しているためです。

一方、YAML は、その読みやすさとコメントのサポートにより、コンピューティングの特定の分野で強い存在感を得ています。特に、YAML は、多くのオートメーション、DevOps、Infrastructure as Code (IaC) のツールとサービスにおける設定ファイルの主要なデータシリアル化形式です。例えば、YAML は Docker ファイルや Kubernetes ファイルによく使用されます。

YAML は、AWS CloudFormationAWS サーバーレスアプリケーションモデル (AWS SAM)AWS CodeBuild といった Amazon Web Services (AWS) の製品における設定ファイルの記述にも使用されます。

相違点の要約: YAML とJSON

 

JSON

YAML

内容

ソフトウェアアプリケーションとサービス間で構造化データを交換するためのデータシリアル化形式。人間による使用よりもアプリケーションによる使用を優先します。 

ソフトウェアアプリケーションとサービス間で構造化データを交換するためのデータシリアル化形式。アプリケーションによる使用よりも人間による使用を優先します。

主なユースケース

プラットフォーム、言語、分散型ソフトウェア通信、ウェブアプリケーション、設定ファイル、API に広く普及しています。

多くのオートメーション、DevOps、Infrastructure as Code (IaC) のツールとサービスの設定ファイル。

読みやすさ

簡単。

最も簡単。

データ型

番号、ブーリアン、空値、文字列、配列、オブジェクト。

シーケンス、スカラー、およびマッピングを含むネストされたデータのコレクションを通じて、すべてのデータ型をサポートします。

コメントのサポート

いいえ。

はい。

データオブジェクトを値としてサポート

はい。

いいえ。

バージョニング

はい。ただし、バージョン間の違いを一目で確認して理解するのは簡単ではありません。

はい。簡単にスキャンして、バージョン間の違いを一目で把握できます。

AWS はお客様の YAML と JSON の要件をどのようにサポートできますか?

すべての AWS データ統合サービスは JSON ファイルを処理できます。関連する 3 つの AWS サービスを次に示します。

  • AWS Glue はサーバーレスのデータ統合サービスです。AWS Glue を使用して、分析、機械学習、アプリケーション開発のためのデータを発見、準備、組み合わせることができます。
  • Amazon Simple Queue Service (Amazon SQS) はフルマネージド型のメッセージキューサービスです。これを使用して、任意の量のソフトウェアコンポーネント間でメッセージを送信、保存、および受信できます。Amazon SQS のメッセージとして送信するのは、最大 256 KB のテキストデータ (XML、JSON、未フォーマットのテキストなど) です。
  • Amazon DocumentDB (MongoDB 互換) はフルマネージド型のネイティブ JSON ドキュメントデータベースです。Amazon DocumentDB を使用すると、インフラストラクチャを管理しなくても、重要なドキュメントワークロードを事実上あらゆる規模で、簡単かつ費用対効果の高い方法で運用できます。

同様に、AWS のデベロッパーツールはいくつかのデプロイサービスで YAML ファイルをサポートしています。次に 2 つの例を示します。

  • AWS Step Functions は、AWS Lambda、Amazon Simple Notification Service (Amazon SNS)、Amazon DynamoDB などの AWS のサービスを利用し、回復力のあるサーバーレスワークフローを構築することを可能にします。Step Functions は YAML ステートマシン定義もサポートしています。これにより、ワークフローをコードとしての Infrastructure as Code (IaC) と同じ言語で定義できます。
  • AWS App2Container は、Java および .NET ウェブアプリケーションをコンテナ形式に移行とモダナイズするために使用できるコマンドラインツールです。Amazon Elastic Container Service (Amazon ECS) のタスク定義と Kubernetes デプロイ用の YAML ファイルを生成します。また、セキュリティとスケーラビリティに関する AWS のベストプラクティスにも従っています。

今すぐアカウントを作成して、AWS で YAML と JSON の使用を開始しましょう。