data serialization parquet protobuf big-data json binary file-extensions

データシリアライゼーション形式ガイド:Parquet、Avro、Protoなど徹底解説

読みやすいJSONから高性能なバイナリ形式まで。.parquet、.avro、.proto、.ndjson、.cbor、.bson、.harファイルの拡張子の違いを学びます。

2026-04-11

データシリアライゼーション形式ガイド:Parquet、Avro、Protoなど

データエンジニアリングやソフトウェア開発の世界において、データの保存および送信方法は極めて重要です。JSONはその読みやすさからWeb APIの主流ですが、ビッグデータ処理、高頻度のメッセージング、または特殊なデバッグには、肥大化しすぎたり遅すぎたりすることがよくあります。

このガイドでは、基本的なJSONやCSV以外の、データシリアライゼーションに使用される特殊なファイル拡張子について説明します。


クイックリファレンス表:データシリアライゼーション形式

拡張子 正式名称 形式 主なユースケース
.ndjson, .jsonl 改行区切りJSON (Newline Delimited JSON) テキスト (ASCII) ログファイル、データストリーミング、ビッグデータインポート
.parquet Apache Parquet バイナリ (列指向) ビッグデータ分析 (Hadoop, Spark, AWS S3)
.avro Apache Avro バイナリ (行指向) スキーマ付きデータシリアライゼーション (Kafka)
.proto Protocol Buffers テキスト (DSL) gRPCインターフェースとデータ構造の定義
.bson Binary JSON バイナリ MongoDBストレージとデータ交換
.cbor Concise Binary Object Representation バイナリ IoT、低帯域幅環境
.har HTTP Archive テキスト (JSON) ブラウザでのネットワークリクエストのデバッグ
.edn Extensible Data Notation テキスト (Lisp風) Clojureエコシステム、メタデータ設定

1. ストリームに適したJSON (.ndjson, .jsonl)

標準のJSONは、解析するためにファイル全体をメモリに読み込む必要があります([で始まり]で終わるため)。これは100GBのログファイルでは不可能です。

  • NDJSON / JSONL: 各行が有効で独立したJSONオブジェクトです。
  • なぜ使うのか? ファイル全体をロードせずに、ファイルを1行ずつ読み取ることができます。ファイルが途切れたり破損したりしても、データセット全体ではなく最後の1行だけが失われます。

2. ビッグデータ列指向ストレージ (.parquet, .orc)

従来のデータベースはデータを行ごとに保存します。分析用データベースは多くの場合、列指向 (Columnar) ストレージを好みます。

  • Parquet: ビッグデータの業界標準。データを列ごとに保存するため、データをより効果的に圧縮でき、特定のクエリに不要な列を「スキップ」できます。
  • ORC: Optimized Row Columnar。Parquetに似ていますが、主にApache Hiveエコシステムで使用されます。

3. スキーマ優先のシリアライゼーション (.avro, .proto)

JSONのようにキー名("first_name")がすべてのレコードで繰り返されるのとは異なり、スキーマ優先の形式は「ルール」と「データ」を分離します。

  • Avro: スキーマはJSONとして保存されますが、データはバイナリです。高速でスキーマの進化をサポートするため、Apache Kafkaの標準となっています。
  • Protobuf (.proto): Googleによって開発されました。.protoファイルでデータ構造を定義し、コンパイラが好みの言語のコードを生成します。gRPCのバックボーンです。

4. バイナリJSONの代替案 (.bson, .cbor, .msgpack)

JSONの柔軟性は好きだが、より高速なスピードやより小さなファイルサイズが必要な場合は、バイナリ形式が答えです。

  • BSON: MongoDBで内部的に使用されています。JSONよりも多くのデータ型(DateやBinaryデータなど)をサポートしています。
  • CBOR: 非常に小さく効率的になるように設計されています。帯域幅の1バイトが重要なIoT(モノのインターネット)デバイスで広く使用されています。
  • MessagePack: CBORに似ており、「JSONのようだが高速で小さい」形式です。

5. 特殊な形式 (.har, .edn)

  • HAR (HTTP Archive): ChromeやFirefoxのデベロッパーツールからネットワークトレースを「エクスポート」したことがあるなら、それは.harファイルです。実際には、ブラウジングセッションのすべてのヘッダー、クッキー、レスポンスボディを含む巨大なJSONファイルにすぎません。
  • EDN: 主にClojureの世界で使用されています。カスタムタイプ(タグ)やより複雑なデータ構造をネイティブでサポートしているため、JSONよりも強力です。

これらのファイルの表示方法

  • NDJSON/JSONL: 任意のテキストエディタまたはjqコマンドラインツールを使用します。
  • Parquet: 専用のビューアまたはPythonライブラリ(pandasfastparquetなど)が必要です。
  • Protobuf: 通常、バイナリデータをデコードするには.proto定義ファイルが必要です。
  • HAR: Chrome/Firefoxのデベロッパーツールにドラッグ&ドロップするか、オンラインHARビューアを使用できます。

よくある質問 (FAQ)

Q: なぜParquetファイルはCSVよりも小さいのですか?

A: Parquetは「辞書符号化」や「ランレングス符号化」などの高度な圧縮技術を使用しています。データを列ごとに保存するため、列内の値(「国」など)が同一であることが多く、テキストファイルと比較して大幅な圧縮率を実現できます。

Q: .protoファイルを編集できますか?

A: はい、.protoファイルはデータ構造を定義する人間が読めるテキストファイルです。ただし、そこから生成されたバイナリデータを直接「編集」することはできません。コンパイルされたコードを使用する必要があります。

Q: .bsonはJSONと同じですか?

A: 厳密には違います。BSONはJSON風のデータを含むバイナリ表現ですが、標準のJSONがサポートしていないBufferLongDecimal128などの型も追加されています。


Tool3Mの関連ツール

  • JSON CSV 変換: 構造化データをフラットなテーブルに変換します。
  • バイナリシリアライゼーションガイド: ProtobufやMessagePackの詳細はこちら。