fixmint
JA

Base64とは?データが大きくなる理由とデコードの方法

著 · · 2026年11月8日更新 · 5分で読めます

Base64は、バイナリデータをプレーンテキストとして表す方式です。使うのは64種類の文字(A〜Z、a〜z、0〜9、そして + と /)です。3バイトごとに4文字になるため、テキストは元のデータより約3分の1長くなります。Webページ内のデータURL、JSONのフィールド、メールの添付ファイルなど、形式がテキストしか受け付けない場合に使われます。

Base64 エンコード・デコードBase64の文字列を作りたい・読みたい無料で使う

テキスト形式にこの変換が必要な理由

多くの形式はテキストだけを扱うように作られています。メール本文、JSONファイル、CSSファイルは文字や記号を安全に保持できますが、生の画像やZIPファイルには、一部のシステムが変更したり、途中で切ったり、制御コードとして解釈したりしてしまうバイト値が含まれています。Base64はどのテキストシステムでも変更されずに通過する文字だけを使うため、データは壊れずに届きます。RFC 4648で定義されています。

Base64は暗号化ではなく、単なるエンコードです。鍵がなくても誰でもデコードできるため、パスワードや個人情報を隠すために使ってはいけません。

3バイトが4文字になる仕組み

例として単語 Man を取ります。これは3バイトで、10進数では 77、97、110 です。3バイトは合計24ビットになります。24ビットを6ビットずつ4つに分けると、それぞれが0から63の数値になり、アルファベット内の1文字を指します。Man は TWFu になります。

6ビットで表せるのは64通りだけなので、4文字で3バイトを運びます。そのため、改行を加える前の時点で、出力は入力より約3分の1大きくなります。

データが3バイトで割り切れない場合、エンコーダは末尾に = を付けて埋めます。2バイトの Ma は TWE= に、1バイトの M は TQ== になります。この埋め草から、デコーダは最後のまとまりに何バイト入っているかを判断できます。

まずテキストをUTF-8にする

Base64はバイト単位で処理しますが、テキストは文字でできています。é や ✓ のような文字は、Webで広く使われるUTF-8では1文字が複数バイトで保存されます。ブラウザの関数 btoa() は文字列を受け取り、各文字を1バイトとして扱うため、基本ラテン文字の範囲を超える文字で失敗します。チェックマークに対して呼び出すと InvalidCharacterError が発生します。

解決策は、まずテキストをUTF-8のバイトに変換し、その後でそのバイトをエンコードすることです。héllo ✓ というフレーズはUTF-8で10バイトになり、そのBase64は aMOpbGxvIOKckw== です。Base64ツールがこの手順を代わりに行います。デコード時は、バイト列をUTF-8として読み戻します。バイト列が有効なUTF-8テキストでない場合、ツールはそれをファイルとして扱い、ダウンロードを提供します。

URLセーフなBase64

標準のアルファベットには + と / が含まれます。URLでは + が空白を表すことがあり、/ はパスの区切りに使われるため、Base64の文字列がリンクを壊すことがあります。URLセーフ形式(RFC 4648のセクション5)は、代わりに - と _ を使い、通常は = のパディングを省略します。文字列をURL、ファイル名、トークンに入れる場合に使ってください。デコーダは、どちらの形式も、パディングの有無にかかわらず受け付けます。

Base64がリンクから取り出したものの場合は、先にURLをデコードします。リンク内でパーセントエンコードされた値は、Base64を読む前にデコードする必要があります。リンクのルールについては、パーセントエンコードのガイドで説明しています。

よくある例はログイン用トークンです。JSON Web Tokenは、ヘッダー、データ、署名という3つのBase64url部分がドットで区切られたものです。JWTデコーダーは、それを分割してヘッダーとデータを読みやすいJSONとして表示します。

データURLと画像

データURLは、ファイルをリンクそのものの中に入れます。形式は data:、メディアタイプ、;base64,、カンマ、データの順です。小さな画像は data:image/png;base64, に続けてエンコードされたバイトになります。Webページやスタイルシートはこの形式を受け付けるため、小さなアイコンのためのリクエストを省けます。

ただし、サイズが問題になります。データは約3分の1大きくなり、ブラウザがキャッシュできる別ファイルではなく、ページやスタイルシートの中に含まれて送られます。データURLは小さな画像に使い、大きな写真には使わないでください。写真が大きい場合は、エンコードする前に画像を圧縮してください。

ツールでBase64をデコードすると、データの先頭バイトを確認します。PNG、JPEG、GIF、WebPのファイルはそれぞれ既知のシグネチャで始まるため、ツールはプレビューを表示し、ダウンロードを提供します。画像タイプのデータURLも、画像として表示されます。

fixmintでの使い方

  1. テキストまたはBase64の上にあるエンコードかデコードを選び、テキストまたはBase64を貼り付けます。
  2. トークン、ファイル名、リンクの場合はURLセーフなアルファベット、= パディングなしにチェックを入れます。デコーダは、どちらの場合でも両方の形式を受け付けます。
  3. ファイルからデータURLを作るには、ファイルをドロップエリアにドラッグ&ドロップし、ファイル用:data: URLを出力にチェックを入れます。
  4. 結果をコピーします。デコードしたバイト列がテキストではなくファイルの場合は、ツールが提供するダウンロードを使ってください。

よくあるデコードエラー

  • 使えない文字が含まれています。 入力に、64文字の範囲外の文字が含まれています。たとえば、コピーした文章から入った引用符などです。テキストの出どころを確認してください。コピーしたテキストに含まれるゼロ幅スペースも同じエラーの原因になるため、見えない文字を削除してから再度試してください。見えない文字がどこから入るかは、見えない文字のガイドで解説しています。
  • 長さが正しくありません。 文字が欠けているか余分にあります。通常、コピーが途中で切れたことを意味します。
  • 改行と空白。 メール(MIME)では、Base64は76文字ごとに折り返されます。デコーダは空白と改行を取り除くため、折り返された文字列もそのまま貼り付けられます。
  • パディングがありません。 一部のシステムは = を省略します。デコーダが自動的に補います。

特殊なケース

  • デコード結果が意味不明に見えます。 テキストではなくファイルの可能性があります。ZIPファイル、PDF、プログラムは、テキストとして読めないバイト列にデコードされます。ツールはそれらをダウンロードとして提供します。
  • 非常に大きい入力。 エンコードやデコードの間、ファイル全体がブラウザ内に保持されるため、非常に大きいファイルは遅くなることがあり、スマートフォンでは失敗することがあります。

よくある質問

Base64は暗号化と同じですか?

いいえ。鍵を使わない可逆的なエンコードなので、誰でもデコードできます。

Base64の文字列がファイルより長いのはなぜですか?

3バイトごとに4文字になるため、テキストは約3分の1大きくなります。

コピーしたBase64の文字列がデコードできないのはなぜですか?

通常、コピー中に文字が欠けたか余分に入ったことが原因です。たとえば改行の位置が間違っている、または最後の文字が欠けている場合です。元の場所からもう一度コピーしてください。

英語原文をもとに、AIの支援を受けて翻訳しています。

コメント

    まだコメントはありません。最初のコメントを書いてみましょう。

    評価(任意)

    メールアドレスは表示も保存もされません。

    How to Remain Valuable When Intelligence Becomes Cheapの表紙How to Remain Valuable When Intelligence Becomes Cheap

    AIが認知作業の大半をこなせるようになっても希少であり続ける、人間ならではの強み、経済面と戦略面での優位性について解説した224ページのガイドです。

    $3.84Gumroadで入手英語版