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) | タグの構造・型・必須項目などをスキーマとして定義できる、バリデーションに使う |
| XPath | XML内の要素をパスで指定して検索・取得できる(/user/tags/tag のように階層を辿れる) |
| XSLT | XMLを別の形式(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
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;
}
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-Type | Accept |
|---|---|
| 送るデータ形式の宣言 | 受け取りたいデータ形式の指定 |
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/json、application/xml、application/cbor etc.)