Base64は本来、使うべき技術ではない|それでも使う条件
:::note ※Base64を使うか迷っている人のための「入口」記事です :::
正直に言うと、私はBase64を常用しない
Base64は便利な技術だと言われている。画像をHTMLに埋め込める。リクエスト数を減らせる。
でも正直に言うと、私はBase64を常用しない。仕方なく使う技術だと思っている。
理由は単純。33%肥大化する。キャッシュが効かない。デバッグしにくい。
この記事は、それでもBase64を使う条件と、使わない条件をまとめたもの。
🚀 今すぐ変換 → Base64エンコーダー を開く
私がBase64で後悔した話
後悔1:CSSに画像を埋め込んで、CSSが肥大化した
「リクエスト減らせる」と思って、アイコン画像をCSSにBase64で埋め込んだ。
20個のアイコン。1個10KBだから合計200KB。Base64化して約270KB。
**CSSファイルが300KB超えた。**初回読み込みが遅くなった。キャッシュも効きにくい。
外部ファイルにしてCDNに置いた方が速かった。
後悔2:Base64文字列が壊れて、原因特定に時間がかかった
APIでBase64エンコードした画像を受け取っていた。ある日、画像が表示されなくなった。
原因を調べた。Base64文字列の途中に改行が入っていた。どこかの処理で混入した。
**Base64は文字列なので、どこで壊れたか分かりにくい。**外部ファイルなら「ファイルが壊れている」と分かる。Base64は「文字列のどこかがおかしい」としか分からない。
後悔3:「Base64で送って」と言われて、ファイルサイズが爆発した
クライアントから「画像はBase64で送ってください」と言われた。仕様だから従った。
10MBの画像をBase64化した。約13MB。JSONに入れた。レスポンスが遅い。タイムアウトした。
Base64は「小さいファイルを埋め込む」技術。大きいファイルに使うと破綻する。
私がBase64を「使わない」条件
| 条件 | 理由 |
|---|---|
| 10KB以上のファイル | 肥大化が目立つ |
| 繰り返し使う画像 | 外部ファイル + キャッシュの方が速い |
| 本番環境の写真・バナー | CDNを使うべき |
| デバッグしやすさが必要 | Base64は壊れた場所が分かりにくい |
迷ったら外部ファイル。Base64は「仕方なく使う」技術。
私がBase64を「使う」条件
| 条件 | 理由 |
|---|---|
| 10KB以下のアイコン | リクエスト削減のメリットがある |
| インライン必須の場面 | メールHTML、一部のAPIなど |
| 開発時の一時的な埋め込み | 外部ファイル準備前の仮実装 |
| ファビコン | 小さいし、1回しか使わない |
使う条件は限られている。
Base64を信用しきっていない理由
理由1:33%肥大化する
これは仕様。100KBのファイルが133KBになる。避けられない。
理由2:キャッシュが効きにくい
HTMLやCSSに埋め込むと、画像だけキャッシュできない。HTML全体をキャッシュすることになる。
理由3:デバッグしにくい
外部ファイルなら「この画像が壊れている」と分かる。Base64は「この長い文字列のどこかがおかしい」としか分からない。
理由4:HTTP/2時代にはメリットが薄い
「リクエスト数を減らせる」はHTTP/1.1時代の話。HTTP/2では並列取得が効率化されている。
この記事で判断がつかない場合
| 知りたいこと | 読むべき記事 |
|---|---|
| 何KBまで埋め込んでいいか | Base64埋め込みのサイズ目安 |
| Base64でエラーが出た | Base64でよくあるエラーと対処法 |
| Data URIの使い方 | Data URIの使いどころ |
| URLエンコードとの違い | Base64とURLエンコードの違い |
| ツールの使い方 | Base64エンコード/デコードの使い方 |
結局どうするか
Base64は「便利な技術」ではなく「仕方なく使う技術」。
10KB以下のアイコン、インライン必須の場面でのみ使う。それ以外は外部ファイル。
迷ったら外部ファイル。Base64は最終手段。