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 |
|---|---|---|
| M | 01001101 | T |
| a | 01100001 | W |
| n | 01101110 | F / 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は「謎の文字列」に見えがちですが、ルールさえわかれば読み解ける単純な仕組みです。エンコード・デコードを実際に試してみると理解が一気に深まります。