plan-4ging

2026/03/12

データ形式とは

データの規格(構造)のこと

形式の比較

形式可読性スキーマ定義主な用途
JSON任意(JSON Schema)Web API 全般
XML◎(XSD)エンタープライズ・SOAP
CBOR×任意IoT・組み込み
MessagePack×任意ゲーム・リアルタイム通信
protobuf×◎(.proto)gRPC・マイクロサービス
CSVなしデータエクスポート・分析
TSVなしデータエクスポート・分析

JSON(JavaScript Object Notation)

Web API で最も広く使われているテキストベースの形式 ほぼすべての言語で Parser が標準搭載されている

{
  "userId": 123,
  "name": "Test",
  "email": "test@example.com",
  "tags": ["admin", "user"]
}

https://developer.mozilla.org/ja/docs/Learn_web_development/Core/Scripting/JSON

XML(eXtensible Markup Language)

タグベースの形式 使用するタグがあらかじめ定義されていないため、用途に応じて自由にカスタムタグを定義できる

<!-- カスタムタグの例:タグ名は自由に決められる -->
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <userId>123</userId>
  <name>Test</name>
  <email>test@example.com</email>
  <tags>
    <tag>admin</tag>
    <tag>user</tag>
  </tags>
</user>

JSONより冗長になりやすいが、以下のようなエンタープライズ向けの機能が充実している

機能概要
XSD(XML Schema Definition)タグの構造・型・必須項目などをスキーマとして定義できる、バリデーションに使う
XPathXML内の要素をパスで指定して検索・取得できる(/user/tags/tag のように階層を辿れる)
XSLTXMLを別の形式(HTML・CSVなど)に変換するための言語

https://developer.mozilla.org/ja/docs/Web/XML/Guides/XML_introduction

CBOR(Concise Binary Object Representation)

JSON をバイナリ化した形式(RFC 8949) 構造は JSON と互換性があるが、バイナリのためファイルサイズが小さくパースが高速 IoT や組み込み向けで使われることが多い 読み方は「シーボア

<!-- 元のJSONデータ -->
{"userId": 123, "name": "Test"}

<!-- CBORでバイナリシリアライズ後(16進数表現) -->
a2 66 75 73 65 72 49 64 18 7b 64 6e 61 6d 65 64 54 65 73 74

https://www.rfc-editor.org/rfc/rfc8949.html

MessagePack

CBOR と同様に JSON をバイナリ化した形式 CBOR より歴史が長く、ゲームサーバーやリアルタイム通信での採用例が多い protobuf と異なりスキーマ定義が不要なため、手軽に導入できる

<!-- 元のJSONデータ -->
{"userId": 123, "name": "Test"}

<!-- MessagePackでバイナリシリアライズ後(16進数表現) -->
82 a6 75 73 65 72 49 64 7b a4 6e 61 6d 65 a4 54 65 73 74

https://msgpack.org/ja.html

Protocol Buffers(protobuf)

Google が開発したバイナリ形式 .proto ファイルにスキーマを定義し、コードを自動生成して使う gRPC のデータ形式として広く使われている

// スキーマ定義(.protoファイル)
// 実際に通信で送受信されるデータはバイナリにシリアライズされるため直接読むことはできない
// デバッグ時は専用ツール(`protoc` や `grpcurl` など)を使ってデコードする必要がある
message User {
  int32 user_id = 1;
  string name = 2;
  string email = 3;
  repeated string tags = 4;
}

https://protobuf.dev/

CSV(Comma-Separated Values)

表形式のデータをカンマ区切りで表現するシンプルな形式 Excel や分析ツールとの親和性が高く、大量データのインポート/エクスポートなどに使われる

userId,name,email
123,Test,test@example.com

TSV(Tab-Separated Values)

CSV のカンマ区切りをタブ区切りにした形式 データにカンマが含まれる場合にCSVより扱いやすい

userId	name	email
123	Test	test@example.com

補足

Content-Type & Accept

HTTPでデータをやり取りする際、「どの形式でデータを送るか・受け取りたいか」を Header で伝える仕組み

Content-TypeAccept
送るデータ形式の宣言受け取りたいデータ形式の指定

Accept

複数指定と優先度(q値)の指定が可能

## JSONを優先、XMLも受け付け
GET /api/users/123 HTTP/1.1
Accept: application/json;q=1.0, application/xml;q=0.8

## 何でも受け付ける(デフォルト)
Accept: */*

MIME

ファイルの種類を示し、ファイルと共に送信される文字列 タイプ/サブタイプ の形式で表現される(application/jsonapplication/xmlapplication/cbor etc.)


参照