Back

なぜBase64はファイルサイズを33%増加させるのか?(エンコーディングの仕組み)

Web開発において、画像やファイルを Base64 でエンコードして送信するシナリオによく遭遇します。

一般的な使用例としては、データURIスキーム(data:image/png;base64,...)を使用して画像をHTMLに直接埋め込んだり、JSONペイロード内でバイナリデータを送信したりすることが挙げられます。

しかし、Base64エンコーディングを行うと、ファイルサイズが元のサイズと比較して約 33% 増加することをご存知でしたか?

この記事では、なぜそうなるのかを正確に理解するために、Base64の仕組みを探ります。

1. Base64とは何か?

すべてのコンピュータデータは バイナリ(0と1)で構成されています。

しかし、電子メールやHTMLのようなテキストベースのプロトコルは、生のバイナリデータを扱う際に制限があります。制御文字や特定のビットパターンは、これらのシステムで誤動作を引き起こす可能性があります。

Base64 は、バイナリデータを 64個の安全なASCII文字 だけで構成されるテキストに変換するエンコーディング方式です。

使用される64文字は以下の通りです:

  • A-Z (26)
  • a-z (26)
  • 0-9 (10)
  • +, / (2)
  • (そしてパディング用の =

2. 33%増加の背後にある数学

Base64エンコーディングの核心的な原理は、「3バイトを4文字に変換する」 ことです。

  1. 元のデータ: 3バイトは 3×8=243 \times 8 = 24 ビットに相当します。
  2. 変換: これらの24ビットは、各6ビット の4つのグループに分割されます。(24÷6=424 \div 6 = 4
  3. エンコーディング: 各6ビットグループ(値0-63)は、Base64インデックステーブルの文字にマッピングされます。

なぜ増加するのか?

元のデータの3バイト(24ビット)を表現するために、Base64は4バイト(4つのASCII文字、32ビット)を使用します。

つまり、3バイトの情報を保存するために4バイトのスペースを消費します。

433×10033.3%\frac{4 - 3}{3} \times 100 \approx 33.3\%

これが、Base64でエンコードするとデータサイズがおよそ33%増加する数学的な理由です。

3. パディング(=)の役割

元のデータの長さが3の倍数でない場合はどうなるでしょうか?

余りのビットがある場合、Base64は全体の長さを4の倍数にするために、末尾に = 文字を追加します。これを パディング と呼びます。

  • 1バイト余る場合: 2つの = を追加
  • 2バイト余る場合: 1つの = を追加

したがって、Base64文字列の末尾にある = は、データの終わりを示し、長さを揃える役割を果たします。

結論

Base64は、テキストベースの環境でバイナリデータを安全に送信するための不可欠なツールです。

しかし、33%のサイズオーバーヘッドは、ネットワーク帯域幅や読み込み速度に影響を与える可能性があります。

そのため、大きなファイルの場合は、Base64の代わりにバイナリ送信を検討するか、パフォーマンスを最適化するために控えめに使用してください。

TechBase64EncodingWeb

関連ツールを見る

Pockitの無料開発者ツールを試してみましょう