HTMLのソースコードやAPIのレスポンスを眺めていて、こんな文字列を目にしたことはありませんか?

SGVsbG8gV29ybGQh

これは「Hello World!」をBase64エンコードした文字列です。一見すると意味不明な英数字の羅列ですが、決まったルールにしたがって変換された「ちゃんとしたデータ」です。

この記事では、Base64エンコードの基本的な仕組みから、HTMLへの画像埋め込みやAPI通信での活用例まで、初心者向けにわかりやすく解説します。

Base64エンコードとは?

Base64エンコードとは、バイナリデータ(画像・音声・PDFなど)をテキスト形式に変換するエンコーディング方式です。

「Base64」という名前は、変換に使う文字が64種類あることに由来しています。具体的には以下の文字だけを使います。

  • 英大文字:A〜Z(26文字)
  • 英小文字:a〜z(26文字)
  • 数字:0〜9(10文字)
  • 記号:+ と /(2文字)
  • パディング文字:=(桁を揃えるために使用)

なぜこんな変換が必要なのでしょうか?電子メールや古いシステム・JSONなど「テキストしか扱えない場面」でも、Base64に変換することでどんなデータでも安全に送受信できるからです。

Base64の仕組みと特徴

3バイト → 4文字に変換する

Base64は、元のデータを3バイト(24ビット)ずつ区切り、6ビットずつ4つのブロックに分割します。それぞれのブロックを0〜63の数値に対応させ、64文字の表で1文字に変換します。

たとえば「Man」という3文字(3バイト)はBase64で「TWFu」の4文字になります。

元の文字ASCII(2進数)Base64
M01001101T
a01100001W
n01101110F / u

ファイルサイズが約1.33倍に増加する

Base64エンコードをすると、データのサイズが元の約1.33倍(4/3倍)に増加します。3バイトのデータを4文字(4バイト)で表現するのが理由です。Base64は「変換」であって「圧縮」ではないため、サイズ削減には向きません。

URLセーフなBase64とは?

標準のBase64では「+」「/」「=」を使いますが、これらはURLの中で特別な意味を持つため、そのまま使うと問題が起きる場合があります。URL内で使う場合は「+」→「-」、「/」→「_」に置き換えたURLセーフBase64が使われます。JWTトークンやAPIキーでよく見かける形式です。

Base64の具体的な使い方と活用例

① HTMLに画像を直接埋め込む(data URI)

通常は <img src="logo.png"> のように外部ファイルを参照しますが、Base64を使えば画像データをHTMLに直接書き込めます。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...">

HTTPリクエストの数を減らせるため、小さなアイコンやロゴに活用されることがあります。ただし画像サイズが大きくなると逆にパフォーマンスが悪化するため、5〜10KB未満の画像に限るのが一般的です。

② JSONでバイナリファイルを送受信する

JSONはテキスト形式なので、PDFや画像などのバイナリデータをそのまま含められません。Base64に変換することでJSON内に含めて送受信できます。

{
  "file_name": "invoice.pdf",
  "content": "JVBERi0xLjMKJeLjz9MK..."
}

ファイルアップロードAPIや、メール送信APIでよく使われるパターンです。

③ メールの添付ファイル(MIMEエンコード)

電子メールに添付するファイルは、内部でBase64エンコードされて送受信されています。メールのソースを表示すると、添付ファイルがBase64の文字列として記録されているのを確認できます。これはMIMEという標準規格の一部です。

④ HTTP Basic認証

WebサーバーへのBasic認証では、ユーザー名とパスワードをコロンでつなぎ(user:password)、Base64でエンコードした文字列がリクエストヘッダーに含まれます。

Authorization: Basic dXNlcjpwYXNzd29yZA==

注意:Base64は暗号化ではないため、HTTPS(TLS)と組み合わせて使うことが必須です。

よくある質問(FAQ)

Base64は暗号化ですか?
いいえ。Base64は「変換」であって「暗号化」ではありません。デコードすれば誰でも元のデータに戻せます。パスワードや個人情報の保護には使わないでください。暗号化が必要な場合はAESやRSAなどの暗号アルゴリズムを使用します。
なぜBase64にするとファイルサイズが増えるのですか?
3バイトのデータを4文字(4バイト)で表現するため、約33%ファイルサイズが増加します。Base64はデータ圧縮ではなく変換のための技術です。容量削減にはgzip・Brotliなどの圧縮技術を別途使用します。
Base64の文字列をURLに含めても大丈夫ですか?
標準のBase64には「+」「/」「=」が含まれるため、URLに直接使うと問題が起きる場合があります。URLに含める場合は「URLセーフBase64」(+→-、/→_)を使いましょう。JWTトークンはこの形式が使われています。
デコードはどうすればいいですか?
Base64デコードとはエンコードの逆操作で、Base64の文字列を元のデータに変換します。プログラムではほぼすべての言語に標準のデコード関数が用意されています。ブラウザ上でサクッと確認したい場合は、このサイトのBase64デコードツールが便利です。

まとめ

  • Base64はバイナリデータをテキスト形式で表現するエンコーディング方式
  • 64種類の文字(A-Z / a-z / 0-9 / + /)を使って、3バイト→4文字に変換する
  • ファイルサイズは元の約1.33倍に増加する(圧縮ではなく変換)
  • 暗号化ではないため、セキュリティ目的では使わない
  • HTMLへの画像埋め込み・API通信・メール添付・HTTP認証など幅広く使われている

Base64は「謎の文字列」に見えがちですが、ルールさえわかれば読み解ける単純な仕組みです。エンコード・デコードを実際に試してみると理解が一気に深まります。