初心者向け：AWS CloudFormationで学ぶJSONテンプレートの基本と備忘録

## はじめに
インフラのコード化や構成管理の現場では、**JSON (JavaScript Object Notation)** を目にする機会が多くあります。

:::note warn
**私の場合、特にAWS CloudFormationのテンプレートを作成する際に活用することが一般的です。**
:::

しかし、実務で頻繁に触れる機会が少ないため、理解が浅い部分もありました。

そこで、自分の備忘録としてJSONに関する基本的な知識を整理しておきます。

## JSONとは？
JSONは、軽量で簡潔なデータ交換フォーマットです。

![スクリーンショット 2024-12-03 21.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6e665103-3150-3f1c-7ca7-fd9aab316ca0.png)
引用画像：https://apidog.com/jp/blog/what-is-json-and-how-differ-with-json-schema/

***人間が読める形で記述でき、機械でも効率よく解析や生成が可能です。***

もともとはJavaScriptの一部として開発されましたが、現在では多くのプログラミング言語で広く利用されています。

### JSONの主なデータ型

JSONの主なデータ型は、ざっくりと以下になります。

:::note
- **オブジェクト (Object):** 
キーと値のペア { "key": "value" }

- **配列 (Array):** 
順序付けられたリスト [1, 2, 3]

- **文字列 (String):** 
ダブルクォートで囲まれたテキスト "example"

- **数値 (Number):** 
整数や小数 42 または 3.14

- **真偽値 (Boolean):** 
true または false

- **null:** 値が存在しないことを表す null
:::

基本的に、初学者でも扱いやすいデータ形式となっています。

## JSONの特徴

JSONを使用するメリットは以下の通りです。

:::note warn
- **シンプルで軽量:** 
JSONはテキスト形式で簡潔にデータを記述できます。

- **言語に依存しない:** 
多くのプログラミング言語で扱うためのライブラリが存在します。

- **直感的に読み書き可能:** 
シンタックスがシンプルなので、初心者でも理解しやすいです。
:::

## CloudFormationテンプレート形式について

![スクリーンショット 2024-12-03 21.04.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f267ed55-73ad-97a5-71bf-679820d94d2e.png)
引用画像：https://aws.amazon.com/jp/cloudformation/

AWS CloudFormationのテンプレートは、インフラストラクチャをコードとして管理する際に利用される重要な形式であり、JSONまたはYAML形式で作成できます。

:::note warn
**CloudFormationに関する詳細は、過去の記事でも技術検証を行っているので、興味がある方はぜひご覧ください。**
:::

https://qiita.com/free-honda/items/1d8810054b556739afaf

https://qiita.com/free-honda/items/c7a68a216eef2161c567

https://qiita.com/free-honda/items/8379519a16a22ba237b8

https://qiita.com/free-honda/items/c7a68a216eef2161c567

**個人的に、AWSの中でもCloudFormationが特に好きで、たくさん技術検証をしています。笑**

## JSONとYAMLの違いについて

CloudFormation テンプレートは、JSON または YAML 形式を選択できます。

:::note
***簡単に違いについてまとめてみました。***
:::

| 特徴       | JSON                     | YAML                          |
|------------|--------------------------|-------------------------------|
| **形式**   | 厳格でフォーマットが固定 | 人間が読みやすいフォーマット  |
| **記述量** | やや冗長                 | 簡潔                         |
| **コメント** | 非対応                  | 対応 (`#`)                   |
| **使用場面** | プログラム間のデータ交換 | 設定ファイルや構成管理        |

JSONは構文が厳格で、機械解析に適しているため、APIレスポンスやデータ交換に多く利用されます。

一方、YAMLは簡潔で人間にとって読みやすく、設定ファイルや構成管理に適しています。

https://qiita.com/free-honda/items/4d9c66ebbc12dbfe1d4e

## JSONを使ってテンプレートを書いてみた
以下は、AWS CloudFormationを使用してEC2インスタンスを1台構築するJSONテンプレートの例です。

```json
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS EC2 Instance Creation Example",
  "Resources": {
    "MyEC2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "ImageId": "ami-0abcdef1234567890",
        "InstanceType": "t2.micro",
        "KeyName": "my-key-pair",
        "Tags": [
          {
            "Key": "Name",
            "Value": "MyFirstInstance"
          }
        ]
      }
    }
  }
}
```

### コードの簡単な説明

少しAWSの知識も必要になりますが、これはJSONを使った簡単なコードです。

:::note
- **``AWSTemplateFormatVersion``**: 
CloudFormationテンプレートのバージョンを指定。

- **``Resources``**: 
作成するリソースの定義。

- **``Properties``**: 
リソースの設定内容（AMI ID、インスタンスタイプ、キーペアなど）。
:::

**JSONはフォーマットがシンプルでありながら柔軟性が高く、特にインフラやAPIの分野では欠かせない存在です！**

## まとめ
JSONの基本から実践的な利用例までをまとめてみました。

使い慣れているつもりでも、改めて調べることで理解が深まることを実感しました。

:::note warn
***YAMLとの違いやCloudFormationの例を通して、JSONの実用性を再確認できました。***
:::

今後もJSONの活用方法を探りながら、さらに効率的なインフラ管理を目指していきたいと思います！

## 参考記事

https://products.sint.co.jp/topsic/blog/json

https://aws.amazon.com/jp/compare/the-difference-between-yaml-and-json/

https://datamix.co.jp/media/datascience/introduction-to-json/

https://qiita.com/skm_bnn/items/ecf3d0fe1188e666d079