コンテンツにスキップ

開発者のためのファイル形式クイックリファレンス

カテゴリ:リファレンス

Webアプリケーションの開発では、ファイルのバリデーション、MIME タイプの判定、アップロード制限の設計など、ファイル形式に関する知識が頻繁に求められます。この記事では、開発現場でよく扱うファイル形式を一覧にまとめます。ブックマークしておけば、いつでも参照できるクイックリファレンスとしてご活用ください。

主要ファイル形式の使い分けマトリクス カテゴリ別ファイル形式と主な用途 画像 JPEG / JPG PNG (透過) WebP (Web推奨) AVIF (次世代) SVG (ベクター) GIF (アニメ旧式) ドキュメント PDF (配布) DOCX (Word) XLSX (Excel) PPTX (PowerPoint) ODT (OpenDoc) RTF (互換) アーカイブ ZIP (標準) TAR.GZ (Unix) 7Z (高圧縮) RAR (有償) XZ (LZMA) BZIP2 (旧) テキスト/データ JSON (API) CSV (表計算) XML (構造) YAML (設定) TOML (設定) TXT (素朴)
図1: 4カテゴリ別の主要ファイル形式

画像形式

拡張子 MIME タイプ 圧縮 透過 主な用途
.png image/png 可逆 対応 スクリーンショット、ロゴ、アイコン
.jpg / .jpeg image/jpeg 非可逆 非対応 写真、サムネイル
.gif image/gif 可逆 対応(1bit) アニメーション、シンプルな図
.webp image/webp 両方 対応 Web全般(PNGの後継候補)
.avif image/avif 両方 対応 次世代Web画像
.svg image/svg+xml なし(XML) 対応 ベクター画像、アイコン

注意:SVG はXMLベースのため、XSS(クロスサイトスクリプティング)のリスクがあります。ユーザーからアップロードされた SVG をそのまま表示するのは危険です。サニタイズ処理を必ず行いましょう。

ドキュメント形式

拡張子 MIME タイプ 内部構造 主な用途
.pdf application/pdf バイナリ 印刷用ドキュメント、帳票
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document ZIP(XML) Word 文書
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ZIP(XML) Excel スプレッドシート
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation ZIP(XML) PowerPoint プレゼンテーション

アーカイブ形式

拡張子 MIME タイプ 特徴 注意点
.zip application/zip 最も普及、OS標準対応 日本語ファイル名の文字化け(UTF-8 vs CP932)
.tar.gz application/gzip Unix/Linux 標準 Windows では展開ツールが必要な場合あり
.7z application/x-7z-compressed 高圧縮率 専用ツール(7-Zip)が必要
.rar application/vnd.rar 分割アーカイブ対応 プロプライエタリ形式

テキスト・データ形式

拡張子 MIME タイプ 用途 よくある問題
.csv text/csv データ交換、インポート/エクスポート 文字コード、改行コード、BOM
.json application/json API通信、設定ファイル UTF-8 必須(RFC 8259)
.xml application/xml 設定ファイル、データ交換 エンコーディング宣言との不一致
.txt text/plain ログ、メモ、README 文字コードの自動判定が不安定

MIMEタイプのバリデーション

ファイルアップロード機能を実装する際、拡張子だけでなく MIME タイプも検証することが重要です。ただし、MIME タイプはクライアント側で偽装できるため、サーバー側でのマジックバイト(ファイルヘッダー)チェックも併用しましょう。

// PHP でのマジックバイトによる判定
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($_FILES['upload']['tmp_name']);

$allowedTypes = [
    'image/png',
    'image/jpeg',
    'image/webp',
    'application/pdf',
];

if (!in_array($mimeType, $allowedTypes, true)) {
    throw new Exception('許可されていないファイル形式です');
}
// Node.js での file-type ライブラリを使った判定
import { fileTypeFromFile } from 'file-type';

const type = await fileTypeFromFile('upload.png');
console.log(type);
// { ext: 'png', mime: 'image/png' }

テスト用ファイルのダウンロード

各形式のバリデーション処理やアップロード機能のテストには、DevLab のテストファイルをご活用ください。

まとめ

ファイル形式の正しい理解は、安全で堅牢なアップロード機能を実装するための基礎です。拡張子だけでなく MIME タイプとマジックバイトの両方で検証し、適切なバリデーションを行いましょう。このリファレンスをブックマークして、開発時にいつでも参照できるようにしておくことをおすすめします。