JSONとYAMLどっちがいい？APIフォーマット選びで悩んでいる開発者必見！

## 「全部YAMLに書き直せ」と言われた月曜日の朝...
先日、上司から「全APIドキュメントをJSONからYAMLに書き換えて」と突然言われた時のことを思い出します。その瞬間の私の顔は...😱 「マジか...何百ものAPIを全部書き直すのか...また週末出勤確定じゃん...」

でも意外なことに、この作業は思ったほど大変ではなく、むしろYAMLの良さを発見するきっかけになったんです！今日は、JSONとYAMLの 決定的な違い と、 簡単に楽しく 変換する方法をシェアしたいと思います！

## JSON vs YAML：フォーマット対決！
変換方法の前に、まずこの2つのフォーマットの違いを見てみましょう。「案ずるより産むが易し」というように、実際に理解すれば怖くありません！

### 1. 構造表現：中括弧 VS インデント
JSONとYAMLはデータ構造の表現方法が全く違います。JSONは真面目なサラリーマンのように、きちんと中括弧と角括弧を着用しています。一方、YAMLは自由な芸術家のように、インデントと改行だけで階層を表現します。

**JSONの場合：**

```json
{
  "person": {
    "name": "田中",
    "age": 30,
    "addresses": [
      {"country": "日本"},
      {"country": "アメリカ"} 
    ]
  }
}
```

**YAMLの場合：**

```yaml
person:
  name: 田中
  age: 30
  addresses:
    - country: 日本
    - country: アメリカ
```

違いが分かりますか？YAMLは 構造が一目瞭然 です！複雑なネスト構造でも、JSONは括弧の山になりますが、YAMLは組織図のようにスッキリ見えます！

### 2. 冗長性：クォート必須 VS シンプル
JSONは「クォート、クォート」とうるさい先輩みたいに、すべての文字列にダブルクォートが必要です。YAMLはミニマリストで、必要ないものは省きます！

**JSON：**

```json
{
  "name": "田中太郎",
  "message": "こんにちは！"
}
```

**YAML：**

```yaml
name: 田中太郎
message: こんにちは！
```

YAMLの方がスッキリしていますよね？クォートや括弧が少なく、コード量が30%も減ります！👍

### 3. コメント：無口 VS おしゃべり
JSONとYAMLを二人のプログラマーに例えるなら、JSONはコメントを一切書かない「無口な先輩」。YAMLはコードの意図を丁寧に説明してくれる「親切な同僚」です。

そう、 JSONはコメントが書けません ！YAMLならこんな風にコメントが可能：

```yaml
# ユーザー情報
user:
  name: 田中  # フルネームは田中太郎
  role: admin  # 管理者権限あり
```

夜中に起きてバグ修正する時、コメントがあると本当に助かりますよね...😂

### 4. 人間親和性：機械向け VS 人間向け
JSONは機械処理向けですが、YAMLは人間の読みやすさを重視しています。

複雑なネスト構造の例：

JSON：

```json
{
 "person": {
  "name": "田中太郎",
  "address": {
   "country": "日本",
   "prefecture": "東京都",
   "city": "新宿区"
  }
 }
}
```

YAML：

```yaml
person:
  name: 田中太郎
  address: 
    country: 日本
    prefecture: 東京都   
    city: 新宿区
```

YAMLは一目で分かりますね！「**百聞は一見にしかず**」というように、見た瞬間に構造が理解できます！

## なぜAPIをJSONからYAMLに変換するの？
上記の比較から、なぜ多くの開発チームがAPIの定義にYAMLを選ぶのか分かると思います：

- **読みやすさ抜群** ：YAMLのインデント構造で、APIドキュメントが一目瞭然！新人も素早く理解できます
- **コメント機能** ：API定義に直接説明を追加でき、別のドキュメントが不要に！
- **コード量削減** ：同じAPI定義でも、YAMLはJSONより30%ほど少ない文字数で済みます
- **OpenAPI/Swaggerとの相性** ：現代のAPIドキュメント標準はYAMLフォーマットを推奨
- **チーム連携の向上** ：読みやすいフォーマットで、コミュニケーションミスが減ります
- **メンテナンスが楽** ：構造が明確なので、更新や修正が簡単です


私たちのチームが変換した後の一番の変化は： APIドキュメントのレビュー時間が半分になった ことです！以前はJSON形式のAPI定義を理解するのに時間がかかっていましたが、今はYAMLなら一目で把握できます！

## JSONからYAMLへの簡単変換方法
さて、これだけのメリットがあるなら、既存のJSONをYAMLに変換する方法を紹介しましょう。いくつか超簡単な方法があります：

### 1. AIツールでワンクリック変換（楽チン派向け）
今はAIの時代、フォーマット変換も簡単です！私のお気に入りの方法：

1. JSONコードをコピー
2. Claude/ChatGPT/DeepSeekなどのAIに貼り付け
3. 「このJSONをYAMLに変換して」とお願い
4. 数秒で完璧なYAMLの出来上がり！

![json-to-yaml-ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/5c008394-9e77-4fc3-b413-db3e705d7512.png)

この方法は速いだけでなく、AIが自動的にフォーマットを最適化してくれることも！「石の上にも三年」ではなく、「AIの力で三秒」です！

#### 【重要】AI変換後の必須チェックリスト
AI変換の手軽さは魅力的ですが、YAMLの「思わぬ落とし穴」を避けるために、**変換後に必ず行うべき3ステップ**：

```yaml
# 例：AIが生成した問題のあるYAML
user_profile:
  active: no         # → false に変換される！
  meeting_time: 12:34 # → 754秒と解釈される！
  version: 2.10      # → 2.1 と誤解釈の可能性
```

**🔧 検証ステップ**：
1. **型チェック**：`no/yes` `on/off` などの値にクォートを追加
   ```yaml
   active: "no"       # ← 文字列化で安全に
   ```
2. **構文検証ツール**で検査：
   - [**yamllint Online**](https://yamllint.com/)：リアルタイムエラー表示
   - **VS Code拡張**：[YAML Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)（スキーマ自動検出）
3. **実際のパーサーでテスト**：
   ```python
   # Pythonでの安全な読み込み例
   import yaml
   with open("config.yml") as f:
       data = yaml.safe_load(f)  # ← safe_loadで型変換抑制
   print(data)
   ```

#### 💡 知っておくべきYAMLの特性
| パターン | リスク | 対策 |
|---------|-------|------|
| `数値: 値` | コロンが時刻扱い | `"12:34"` でクォート |
| `ver: 1.10` | 浮動小数点数化 | `文字列型指定` |
| `on: true` | ブール値衝突 | `!!str` タグ追加 |

> **⚠ 注意**：YAML 1.1 ↔ 1.2 の挙動差がトラブルの元！<br>
> 主要ツールのデフォルト動作確認が重要（例：PyYAMLは1.1互換、Ruby Psychは1.2対応）


### 2. オンライン変換ツール
AIを使いたくない場合は、専用のオンライン変換ツールもあります：

- JSON to YAML Converter
- Transform.tools
- ConvertSimple
これらも簡単です：JSONを貼り付け→変換ボタンをクリック→YAMLをコピー、以上！

### 3. コマンドラインツール（ガチ派向け）
ターミナル好きなら、こんなコマンドも：

```bash
# Pythonを使う場合
pip install pyyaml
python -c 'import sys, yaml, json; print(yaml.dump(json.load(sys.stdin)))' < input.json > output.yaml

# Node.jsを使う場合
npm install -g json2yaml
json2yaml input.json > output.yaml
```

一行のコマンドで変換完了、自動化スクリプトにも組み込めて便利です！

## Apidog：JSONもYAMLも自由自在！
API管理といえば、最近ハマっている [Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya) を紹介しないと！このツールはJSONとYAML両方を完璧にサポートしていて、作業効率が爆上がりしました！

Apidogは様々な形式のAPI定義をインポートできます：

- OpenAPI 3.0 (YAML/JSON)
- Swagger 2.x/3.x (YAML/JSON)
- Postman Collections
- HARファイル
驚いたのは、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)がこれらを完璧に解析するだけでなく、 自動的に美しいAPIドキュメント を生成すること！YAMLやJSONファイルをインポートすると、すぐにエンドポイント、パラメータ、レスポンス例などを含むインタラクティブなドキュメントが生成されます。
![api-document-online-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/f498798d-d6b7-4013-b286-130c1629f2c1.png)

さらに、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)内で直接APIをテストできるので、Postmanなど他のツールに切り替える必要がありません。API定義、テスト、ドキュメント化が一つのツールで完結するのは、「一石三鳥」ですね！

## まとめ：YAMLを使わない理由はない！
このJSONからYAMLへの変換の旅を通じて、YAMLの便利さを実感しました。JSONはデータ交換の標準であり続けますが、API定義や設定ファイルでは、YAMLの優位性は明らかです！

まだ迷っているなら、私からのアドバイスは： やってみなはれ ！変換は想像より簡単で、その恩恵は長期的です。特にApidogのようなツールを使えば、作業が格段に楽になります！

皆さんは普段JSONとYAMLのどちらを使っていますか？何か面白い変換エピソードはありますか？コメント欄でシェアしてください！


## 関連フォーマット（追記）
- JSON with Comments (JSONC)  

  
https://learn.microsoft.com/ja-jp/dotnet/api/system.text.json.jsoncommenthandling?view=net-8.0

https://learn.microsoft.com/ja-jp/dotnet/api/system.text.json.jsonserializeroptions.readcommenthandling?view=net-8.0

https://learn.microsoft.com/ja-jp/dotnet/api/system.text.json.jsonserializeroptions.allowtrailingcommas?view=net-9.0

>In addition to the default JSON mode following the JSON specification, VS Code also has a JSON with Comments (jsonc) mode. This mode is used for the VS Code configuration files such as settings.json, tasks.json, or launch.json. When in the JSON with Comments mode, you can use single line (//) as well as block comments (/* */) as used in JavaScript. The mode also accepts trailing commas, but they are discouraged and the editor will display a warning.

https://code.visualstudio.com/docs/languages/json#_json-with-comments

>appsettings.json および appsettings.{Environment}.json ファイル内のコメントは、JavaScript または C# スタイルのコメントを使用した場合にサポートされます。

https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/?view=aspnetcore-10.0#comments-in-appsettingsjson