画像データをHTMLに埋め込んだり、バイナリデータをテキストとして扱ったり、開発現場でBase64を使う場面は意外と多いですよね。
この記事では、Base64の基本からエンコード・デコードの方法を、ツール・コマンドライン・プログラムの3つの視点から解説します。
Base64とは
概要
Base64は、バイナリデータをテキスト形式に変換するエンコード方式です。
特徴:
- 64種類の文字(A-Z, a-z, 0-9, +, /)を使用
- バイナリデータを安全にテキストとして扱える
- メールやJSON、URLなどテキストのみの環境で使える
Base64の用途
1. 画像のHTMLへの埋め込み
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA..." />メリット:
- HTTPリクエストを減らせる
- 外部ファイルへの依存をなくせる
2. API通信でのバイナリデータ転送
{
"filename": "document.pdf",
"content": "JVBERi0xLjQKJeLjz9MK..."
}メリット:
- JSONでバイナリデータを扱える
- REST APIで送受信できる
3. メール添付ファイル
MIMEエンコーディングで使用されます。
4. Basic認証
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=重要な注意点
⚠️ Base64は暗号化ではない
Base64はエンコード(符号化)であり、暗号化ではありません。
元データ: "password"
Base64エンコード: "cGFzc3dvcmQ="簡単にデコードできます:
echo "cGFzc3dvcmQ=" | base64 -d
# 出力: password用途:
- ✅ データ形式の変換
- ❌ セキュリティ保護(暗号化ではない)
📏 データサイズが約1.33倍になる
元データ: 100 KB
Base64エンコード後: 約133 KB理由:
- 8ビット(256種類)→ 6ビット(64種類)に変換
- 3バイトを4文字で表現
方法1:Webツールで変換(最も簡単)
最も手軽な方法は、Webツールを使うことです。
おすすめツール

👆 今すぐ試してみる(無料・登録不要)
使い方
エンコード(テキスト → Base64):
- 「エンコード」タブを選択
- テキストを入力
- 自動的にBase64に変換される
- 「コピー」ボタンでクリップボードにコピー
デコード(Base64 → テキスト):
- 「デコード」タブを選択
- Base64文字列を入力
- 自動的に元のテキストに変換される
- 「コピー」ボタンでコピー
メリット
- インストール不要
- ブラウザだけで完結
- リアルタイム変換
- エラーチェック機能付き
こんな時に便利
- 一時的な変換作業
- コマンドラインに慣れていない
- 複数人で共有したい
方法2:コマンドラインで変換
継続的に変換作業が必要な場合は、コマンドラインが便利です。
Linux/Mac(base64コマンド)
エンコード
# 文字列をエンコード
echo -n "Hello World" | base64
# 出力: SGVsbG8gV29ybGQ=
# ファイルをエンコード
base64 input.txt > output.txt
# 改行なしでエンコード(macOS)
echo -n "Hello World" | base64
# 改行なしでエンコード(Linux)
echo -n "Hello World" | base64 -w 0デコード
# 文字列をデコード
echo "SGVsbG8gV29ybGQ=" | base64 -d
# 出力: Hello World
# ファイルをデコード
base64 -d input.txt > output.txtmacOSの注意点:
- デコードオプションは
-D(大文字)
echo "SGVsbG8gV29ybGQ=" | base64 -DWindows(PowerShell)
エンコード
# 文字列をエンコード
$text = "Hello World"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
$base64 = [Convert]::ToBase64String($bytes)
Write-Output $base64
# 出力: SGVsbG8gV29ybGQ=
# ファイルをエンコード
$bytes = [System.IO.File]::ReadAllBytes("input.txt")
$base64 = [Convert]::ToBase64String($bytes)
[System.IO.File]::WriteAllText("output.txt", $base64)デコード
# 文字列をデコード
$base64 = "SGVsbG8gV29ybGQ="
$bytes = [Convert]::FromBase64String($base64)
$text = [System.Text.Encoding]::UTF8.GetString($bytes)
Write-Output $text
# 出力: Hello World
# ファイルをデコード
$base64 = [System.IO.File]::ReadAllText("input.txt")
$bytes = [Convert]::FromBase64String($base64)
[System.IO.File]::WriteAllBytes("output.txt", $bytes)方法3:プログラムで実装
アプリケーション内で変換が必要な場合は、各言語のライブラリを使います。
JavaScript(Node.js)
エンコード
// 文字列をエンコード
const text = "Hello World";
const base64 = Buffer.from(text).toString('base64');
console.log(base64);
// 出力: SGVsbG8gV29ybGQ=
// ファイルをエンコード
const fs = require('fs');
const fileContent = fs.readFileSync('input.txt');
const base64 = fileContent.toString('base64');
fs.writeFileSync('output.txt', base64);デコード
// 文字列をデコード
const base64 = "SGVsbG8gV29ybGQ=";
const text = Buffer.from(base64, 'base64').toString('utf-8');
console.log(text);
// 出力: Hello World
// ファイルをデコード
const fs = require('fs');
const base64 = fs.readFileSync('input.txt', 'utf-8');
const buffer = Buffer.from(base64, 'base64');
fs.writeFileSync('output.txt', buffer);JavaScript(ブラウザ)
エンコード
// 文字列をエンコード(ASCII文字のみ)
const text = "Hello World";
const base64 = btoa(text);
console.log(base64);
// 出力: SGVsbG8gV29ybGQ=日本語を含む場合(UTF-8対応)
モダンな方法(推奨):
// TextEncoderを使う方法(推奨)
function encodeBase64(text) {
const encoder = new TextEncoder();
const uint8Array = encoder.encode(text);
const binaryString = Array.from(uint8Array, byte => String.fromCharCode(byte)).join('');
return btoa(binaryString);
}
const text = "こんにちは";
const base64 = encodeBase64(text);
console.log(base64);
// 出力: 44GT44KT44Gr44Gh44Gvレガシーな方法(非推奨):
// unescape()は非推奨(Deprecated)
// 古いブラウザのみで使用
const text = "こんにちは";
const base64 = btoa(unescape(encodeURIComponent(text)));
console.log(base64);デコード
// 文字列をデコード(ASCII文字のみ)
const base64 = "SGVsbG8gV29ybGQ=";
const text = atob(base64);
console.log(text);
// 出力: Hello World日本語を含む場合(UTF-8対応)
モダンな方法(推奨):
// TextDecoderを使う方法(推奨)
function decodeBase64(base64) {
const binaryString = atob(base64);
const uint8Array = Uint8Array.from(binaryString, char => char.charCodeAt(0));
const decoder = new TextDecoder();
return decoder.decode(uint8Array);
}
const base64 = "44GT44KT44Gr44Gh44Gv";
const text = decodeBase64(base64);
console.log(text);
// 出力: こんにちはレガシーな方法(非推奨):
// escape()は非推奨(Deprecated)
const base64 = "44GT44KT44Gr44Gh44Gv";
const text = decodeURIComponent(escape(atob(base64)));
console.log(text);ブラウザ対応状況
TextEncoder / TextDecoder:
- Chrome 38+
- Firefox 19+
- Safari 10.1+
- Edge 79+
ほぼすべてのモダンブラウザで使用可能です。
レガシーブラウザ(IE11など)をサポートする必要がある場合のみ、unescape()/escape() を使用してください。
Python
エンコード
import base64
# 文字列をエンコード
text = "Hello World"
base64_bytes = base64.b64encode(text.encode('utf-8'))
base64_string = base64_bytes.decode('utf-8')
print(base64_string)
# 出力: SGVsbG8gV29ybGQ=
# ファイルをエンコード
with open('input.txt', 'rb') as f:
file_content = f.read()
base64_bytes = base64.b64encode(file_content)
with open('output.txt', 'wb') as f:
f.write(base64_bytes)デコード
import base64
# 文字列をデコード
base64_string = "SGVsbG8gV29ybGQ="
base64_bytes = base64_string.encode('utf-8')
text_bytes = base64.b64decode(base64_bytes)
text = text_bytes.decode('utf-8')
print(text)
# 出力: Hello World
# ファイルをデコード
with open('input.txt', 'rb') as f:
base64_bytes = f.read()
file_content = base64.b64decode(base64_bytes)
with open('output.txt', 'wb') as f:
f.write(file_content)PHP
エンコード
<?php
// 文字列をエンコード
$text = "Hello World";
$base64 = base64_encode($text);
echo $base64;
// 出力: SGVsbG8gV29ybGQ=
// ファイルをエンコード
$fileContent = file_get_contents('input.txt');
$base64 = base64_encode($fileContent);
file_put_contents('output.txt', $base64);
?>デコード
<?php
// 文字列をデコード
$base64 = "SGVsbG8gV29ybGQ=";
$text = base64_decode($base64);
echo $text;
// 出力: Hello World
// ファイルをデコード
$base64 = file_get_contents('input.txt');
$fileContent = base64_decode($base64);
file_put_contents('output.txt', $fileContent);
?>実例:よくある使い方
例1:画像をHTMLに埋め込む
手順
- 画像ファイルをBase64エンコード
base64 image.png > image.txt- HTMLに埋め込む
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA..." />メリット
- HTTPリクエストが不要
- 外部ファイルへの依存がない
デメリット
- HTMLファイルサイズが大きくなる
- キャッシュが効きにくい
例2:APIでPDFを送信
JSON例
{
"filename": "report.pdf",
"mimeType": "application/pdf",
"content": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC..."
}サーバー側(受信)
// Base64デコードしてファイル保存
const buffer = Buffer.from(content, 'base64');
fs.writeFileSync('report.pdf', buffer);例3:Basic認証のヘッダー生成
手順
- ユーザー名とパスワードを結合
username:password- Base64エンコード
echo -n "username:password" | base64
# 出力: dXNlcm5hbWU6cGFzc3dvcmQ=- HTTPヘッダーに設定
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=よくあるエラーと対処法
エラー1:「Invalid character」
原因:
- Base64文字列に不正な文字が含まれている
- 改行やスペースが混入している
対処法:
# 改行を削除してからデコード
echo "SGVs bG8g V29y bGQ=" | tr -d ' \n' | base64 -dエラー2:文字化け
原因:
- 文字エンコーディングの不一致
- UTF-8以外のエンコーディング
対処法(JavaScript):
// UTF-8を明示
const text = Buffer.from(base64, 'base64').toString('utf-8');エラー3:データが壊れる
原因:
- Base64文字列の途中で切れている
- パディング(=)が不足
Base64のパディング:
元データのバイト数を3で割った余りに応じて = を付ける
- 余り0: パディングなし
- 余り1: == を付ける
- 余り2: = を付ける
例:
"Hello" → "SGVsbG8=" (余り2)
"Hi" → "SGk=" (余り1)ユースケース別の選び方
Webツールを使うべき場合
- 一時的な変換作業
- 少量のデータ(〜100KB)
- チームメンバーと共有したい
- コマンドラインに慣れていない
コマンドラインを使うべき場合
- 大量のファイルを一括変換
- CI/CDパイプラインに組み込む
- スクリプトで自動化したい
- 大きなファイル(100MB以上)
プログラムで実装すべき場合
- アプリケーション内で動的に変換
- APIでバイナリデータを送受信
- リアルタイム変換が必要
- ユーザーからのアップロードを処理
セキュリティ上の注意
❌ 機密情報をBase64だけで保護しない
悪い例:
// パスワードをBase64エンコードして保存(危険)
const password = "secret123";
const encoded = btoa(password);
localStorage.setItem('password', encoded);なぜ危険か:
- Base64は簡単にデコードできる
- 暗号化ではない
良い例:
// ハッシュ化やAES暗号化を使う
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10);✅ 適切な使い方
Base64を使うべき場面:
- データ形式の変換(バイナリ→テキスト)
- API通信でのバイナリデータ転送
- HTMLへの画像埋め込み
使うべきでない場面:
- パスワードの保存
- 機密情報の保護
- データの暗号化
📦 その他の開発ツールもチェック
Handy Dev Toolsでは、他にも50種類以上の開発ツールを提供しています。
人気のツール
- 📊 Markdownテーブル生成 – Excel/CSVから一発変換
- 🔄 JSON→YAML変換 – 設定ファイルの変換に
- 🧪 テストデータ生成 – 50種類以上のダミーデータ
- 📝 正規表現テスター – リアルタイムでパターン確認
- 🗺️ 位置情報フォーマット変換 – GeoJSON/WKT/KML対応
すべて無料・登録不要・ブラウザで完結です。
まとめ
Base64エンコード・デコードの方法を3つ紹介しました:
- Webツール:最も簡単、インストール不要
- コマンドライン:大量処理、自動化に向いている
- プログラム:アプリケーション内で動的に変換
重要なポイント:
- Base64は暗号化ではない
- データサイズが約1.33倍になる
- セキュリティ保護には不向き
手軽に変換したい場合は、Webツールが便利です。

ブラウザだけで動作し、データはサーバーに送信されないので安心して使えます。
この記事が役に立ったら、ぜひツールも使ってみてください!
