はじめに
API 設計、CI/CD、IoT、ビッグデータ──システム開発をしていると “データをどうやってやり取りするか” という問題が必ず出てきます。
ところが 「結局どのフォーマットを選べばいいの?」 は意外と忘れがち。そこで、業務でよく登場する代表的フォーマットを 可読性・スキーマ管理・ライブラリ対応・用途 の観点でまとめました。
1. 主要フォーマット早見表
フォーマット | カテゴリ | 可読性 | スキーマ管理 | 主な特徴 | 代表ライブラリ/言語 | 想定ユースケース |
---|---|---|---|---|---|---|
YAML | 階層テキスト | ★★★★★ | JSON Schema / YAML Schema | インデントで直感的。コメントOK。 | PyYAML / gopkg.in/yaml.v2 | K8s マニフェスト GitHub Actions |
XML | 階層テキスト | ★★★☆☆ | XSD / RELAX NG | タグ+属性。名前空間◎。 | Java JAXB / .NET System.Xml | SOAP / レガシー連携 |
JSON | 階層テキスト | ★★★★☆ | JSON Schema | 軽量 & パース高速。コメント×。 | JS 標準 / Python json
|
REST API / Front 設定 |
CSV / TSV | フラットテーブル | ★★★★☆ | なし | 表形式に特化。 | Python csv / Pandas |
データ入出力 / ETL |
INI | 設定ファイル | ★★★★☆ | なし |
[section] + key=value
|
Python configparser
|
軽量アプリ設定 |
TOML | 設定ファイル | ★★★★★ | 型付き | Rust 標準。配列・日付◎。 |
toml (Py) / Cargo |
Rust プロジェクト設定 |
Protocol Buffers | バイナリ (IDL) | ★☆☆☆☆ | .proto | gRPC 標準。超コンパクト。 | 多言語 (protoc) | マイクロサービス RPC |
Apache Avro | バイナリ (スキーマ込み) | ★☆☆☆☆ | Avro Schema | スキーマ進化に強い。 |
fastavro / Kafka |
ストリーム処理 |
MessagePack | バイナリ (スキーマレス) | ★☆☆☆☆ | なし | JSON のバイナリ版。 |
msgpack (Py/JS) |
モバイル / IoT |
CBOR | バイナリ (スキーマレス) | ★☆☆☆☆ | なし | IoT に最適化。 |
cbor2 / libcbor |
組み込み |
Parquet | 列指向ストレージ | ☆☆☆☆☆ | メタデータ | 列圧縮。分析特化。 | PyArrow / Spark | ビッグデータ分析 |
EDIFACT/X12 | EDI 標準 | ☆☆☆☆☆ | 標準定義 | 企業間取引。 | Smooks 等 | 受発注・請求書 |
RDF / Turtle | グラフデータ | ★★☆☆☆ | OWL / SHACL | トリプルで関係を表現。 | rdflib / Jena | ナレッジグラフ |
⭐️ 可読性スコア: ★★★★★ = 人間が楽に読める / ☆☆☆☆☆ = 基本バイナリ
2. 選定フローチャート(ライト版)
-
手動でしょっちゅう編集する?
→ Yes : YAML / TOML / INI
→ No → 2 へ -
低レイテンシ or 帯域制限がキツい?
→ Yes : Protocol Buffers / MessagePack / CBOR
→ No → 3 へ -
大量データを分析基盤で扱う?
→ Yes : Parquet / ORC
→ No → 4 へ -
Web API?
→ Yes : JSON(一択と言っていい)
→ No → XML か EDI など業界標準に合わせる
3. 具体的なシナリオ別おすすめ
シナリオ | ベストチョイス | 理由 |
---|---|---|
マイクロサービス間 RPC | Protocol Buffers + gRPC | スキーマ安全 & 転送コスト最小 |
Kubernetes マニフェスト管理 | YAML | コメント・アンカーで DRY |
フロント〜バックの JSON API | JSON + OpenAPI | JavaScript との親和性 |
Raspberry Pi ↔ クラウド | CBOR / MessagePack | 低帯域で省電力 |
Hive/Spark 解析用ログ | Parquet | 列圧縮&スキーマ進化 |
EDI 受発注 | EDIFACT / X12 | 業界標準プロトコル |
4. スキーマ管理ベストプラクティス
-
JSON →
AJV
やjsonschema
でバリデーション -
XML →
XSD
を CI に組み込み自動検証 - Protobuf / Avro → スキーマレジストリ(Confluent など)でバージョン管理
-
YAML も実は JSON Schema で検証可能(
yaml-language-server
が便利)
5. まとめ
- 人が読む設定 : YAML / TOML
- 機械間通信 : JSON or バイナリ系
- データウェアハウス : Parquet / ORC
- 迷ったら 「誰が読み書きする?」「どの言語で処理する?」 をまず考える
- スキーマ管理 と テスト自動化 を忘れずに!