WordPress で HEIC を許可する MIME types 設定完全ガイド (2026年版)
結論: WordPressがHEICをブロックする理由は、image/heic が get_allowed_mime_types() のハードコードされた許可リストに含まれていないからです。最もクリーンな修正は子テーマの functions.php に5行の upload_mimes フィルタを追加することです。コードを編集できない場合は WP Add Mime Types プラグインを使います。wp-config.php の ALLOW_UNFILTERED_UPLOADS を恒久対策として有効化してはいけません。WordPressの全てのアップロード安全性チェックを無効化します。
エラーメッセージは「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」と表示されます。初めて見ると、WordPressが何か悪意あるものを検出したと当然思います。実際には違います。WordPressは、対応する形式の厳格な許可リストに対してファイル拡張子とMIMEタイプを照合しているだけです。HEICがその許可リストに入ったのは2024年末のWordPress 6.7からで、現在でも多くのホスティング環境では、PHPの画像ライブラリが実際にこの形式をデコードできないため拒否されます。
このガイドでは、2026年にWordPressでHEICアップロードを有効にする3つの本番運用テスト済み手法を、正確なコード、プラグインの代替案、各アプローチのセキュリティトレードオフ込みで解説します。読み終える頃には、どの方法があなたのホスティング環境に合うか、本当に機能したかを確認する方法がわかります。
なぜWordPressはデフォルトでHEICをブロックするのか
HEICは2017年のiOS 11でiPhoneのデフォルト写真フォーマットとして登場しました。WordPressコアがHEICを許可MIMEタイプリストに追加したのは、2024年11月のバージョン6.7です。この7年間のギャップが、「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」が2010年代後半から2020年代前半にかけて最も検索されたWordPressエラーメッセージの一つになった理由です。
内部的には、WordPressの全てのアップロードは wp_check_filetype_and_ext() を通過します。この関数はファイル拡張子と検出されたMIMEタイプの両方を、get_allowed_mime_types() が返すリストと比較します。どちらかがチェックに失敗すると、アップロードは wp-content/uploads に到達する前に拒否されます。リスト自体は wp-includes/functions.php 内の配列から生成されており、WordPress 6.7まではHEICは単純にそこに存在しませんでした。
「セキュリティ」という枠組みは本当ですが、狭い範囲です。WordPressは、PHPスクリプト、実行ファイル、または訪問者にコードとして配信される可能性のあるその他のコンテンツのアップロードを防ぐために許可リストを維持します。HEICファイルはそのリスクをもたらしません。libheifによってデコードされる静止画像です。しかし、許可リストはバイナリです。MIMEタイプはリストに含まれているか、含まれていないかのどちらかです。「おそらく安全」という中間状態はありません。
WordPressのアップロードパイプラインとiPhone HEICの位置づけの広い視点については、iPhoneのHEIC写真をWordPressにアップロードする方法 を参照してください。
現在許可されているMIMEタイプを確認する方法
HEICを追加する前に、WordPressインストールが現在何を受け入れるか確認してください。リストを調べる方法は3つあります。
方法1: サイトヘルス画面
WordPress管理画面で ツール、サイトヘルス、情報、メディア処理 に移動します。「Imagickがサポートするファイル形式」というラベルの行が表示され、基盤となるImageMagickビルドがデコードできる全てのMIMEタイプがリストされます。HEICまたはHEIFがそのリストに表示されている場合、サーバーはHEICファイルを処理できます。WordPressの許可リストにMIMEタイプを追加するだけです。
方法2: WP-CLI
シェルアクセスがある場合、最速のチェックは以下です:
wp eval 'print_r(get_allowed_mime_types());' これは現在許可されている拡張子とMIMEタイプの完全な配列をダンプします。heic または heif で終わるキーを探してください。それらが欠落している場合、フィルタ経由で追加する必要があります。
方法3: 使い捨てのPHPスニペット
これを functions.php に一時的に追加し、任意の管理ページを読み込みます:
add_action('admin_notices', function() {
$types = get_allowed_mime_types();
echo '<pre>' . print_r($types, true) . '</pre>';
}); 全ての管理ページの上部に配列がダンプされて表示されます。リストに何があるか確認したら、スニペットを削除してください。
方法1: functions.php 経由でHEICを追加 (推奨)
最もクリーンな修正は upload_mimes への小さなフィルタです。これを子テーマの functions.php または、より良くはテーマ更新で変更が消えないように小さなカスタムプラグインに追加します:
<?php
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
});
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if (in_array($filetype['ext'], ['heic', 'heif'], true)) {
$data['ext'] = $filetype['ext'];
$data['type'] = $filetype['type'];
}
return $data;
}, 10, 4); 最初のフィルタは heic と heif を許可リストに追加します。2番目のフィルタは微妙なバグを処理します: 一部のサーバーでは、PHPの finfo 拡張機能がHEICファイルを image/heic ではなく application/octet-stream として報告するため、拡張子が許可リストにあっても wp_check_filetype_and_ext() がアップロードを拒否します。2番目のフィルタは、ファイルが .heic または .heif で終わる場合、タイプ認識を強制します。
ファイルを保存し、メディアライブラリからHEIC写真のアップロードを試してください。サーバーにlibheifがコンパイルされたImageMagickがあれば、サムネイルは正常に生成されます。グレーのプレースホルダーとして表示される場合、サーバーは形式をデコードできません。下のトラブルシューティングセクションを参照してください。
なぜ子テーマまたはカスタムプラグインなのか?
スニペットを親テーマの functions.php に直接追加すると、次のテーマ更新でそれが上書きされ、HEICアップロードが静かに失敗し始めます。2行のカスタムプラグインでこれが解決します:
<?php
/**
* Plugin Name: HEIC Upload Support
* Version: 1.0
*/
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
}); wp-content/plugins/heic-upload-support/heic-upload-support.php として保存し、プラグイン画面から有効化すれば完了です。変更はテーマとWordPressコア更新から切り離されています。
方法2: プラグインを使用
PHPを編集したくない場合、いくつかのプラグインが upload_mimes フィルタを処理してくれます。本番運用テスト済みの2つの選択肢:
WP Add Mime Types
これはカテゴリで最もシンプルなプラグインです。有効化後、設定、Mime Type Settings に移動し、拡張子 heic とMIMEタイプ image/heic の行を追加します。heif と image/heif の2行目を追加します。保存。これがワークフロー全体です。
このプラグインは2014年から活発にメンテナンスされており、有効インストール数は8万を超えます。コードベースは小さく、2018年以来セキュリティアドバイザリは出ていません。
File Upload Types by WPForms
連絡フォームで既にWPFormsを使用している場合、同じベンダーが許可リストにチェックボックス駆動のインターフェイスを追加する無料のFile Upload Typesプラグインを出しています。リストで「HEIC」を検索し、チェックボックスをオンにして保存。WebP、AVIF、SVG、その他いくつかのあまり一般的でない形式も同じパターンで処理します。
両方のプラグインはフィルタが行うことを、UIを通して行うだけです。パフォーマンスに違いはありません。PHPファイルの編集が不安な場合はプラグインの道を、アクティブプラグイン数を低く保ちたい場合はフィルタの道を選んでください。
方法3: サーバーレベルの全許可 (上級者向け、要警告)
WordPressには許可リストを完全にバイパスする wp-config.php のエスケープハッチがあります:
define('ALLOW_UNFILTERED_UPLOADS', true); この定数を設定すると、管理者はHEICを含むあらゆるファイルタイプをアップロードできます。チェックは消え、MIMEタイプ検証も消えます。
本番環境では絶対にやってはいけません。この定数はWordPressの全アップロード安全性チェックを無効化します。管理者アカウントの侵害がサーバー侵害になります。攻撃者はPHPスクリプトを直接 wp-content/uploads にアップロードして実行できるからです。今日は安全に見えるセットアップでも、忘れられた「管理者ロールを持つ購読者」が後でどこかで判明することがよくあります。
ALLOW_UNFILTERED_UPLOADS の唯一の正当な用途は、アップロード挙動をデバッグしているローカル開発環境です。それでも、ステージングにプッシュする前にコメントアウトしてください。
HEICを有効化した後: ブラウザ表示の問題
許可リストにHEICを追加すれば、アップロードエラーは解決します。表示の問題は解決しません。SafariはHEIC画像をネイティブに描画しますが、Chrome、Firefox、Edge、Android標準ブラウザは描画できません。生のHEICファイルをアップロードして投稿に埋め込むと、ほとんどの訪問者は壊れた画像アイコンを見ます。
実用的な修正は3つあります:
プラグイン経由のサーバーサイド変換
ShortPixel、Imagify、EWWW Image Optimizer のような画像最適化プラグインは、HEICアップロードを傍受し、JPEGまたはWebPバリアントをオンザフライで生成できます。訪問者はブラウザがサポートする形式を取得し、HEICはオリジナルとしてサーバーに残ります。ShortPixelは「Adaptive Delivery」またはWebP/AVIF設定を有効にすることでこれを透過的に処理します。
カスタムコード経由のサーバーサイド変換
有料プラグインを使いたくない場合、このフィルタを追加してアップロード時にHEICをJPEGに自動変換します(libheifを含むImageMagickが必要):
add_filter('wp_handle_upload_prefilter', function($file) {
if (!in_array(strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), ['heic', 'heif'], true)) {
return $file;
}
$imagick = new Imagick($file['tmp_name']);
$imagick->setImageFormat('jpeg');
$imagick->setImageCompressionQuality(85);
$new_path = preg_replace('/\.(heic|heif)$/i', '.jpg', $file['tmp_name']);
$imagick->writeImage($new_path);
$imagick->destroy();
$file['tmp_name'] = $new_path;
$file['name'] = preg_replace('/\.(heic|heif)$/i', '.jpg', $file['name']);
$file['type'] = 'image/jpeg';
return $file;
}); これは全てのHEICアップロードをImageMagickに通し、オリジナルをJPEGに置き換え、JPEGをメディアライブラリに保存します。訪問者はブラウザに関係なくJPEGを取得します。
アップロード前のクライアントサイド変換
最も信頼できるアプローチは、ファイルがサーバーに到達する前にデバイス上で変換することです。SnapPress は iPhoneアップロードに対してまさにこれを行います。共有シートまたはアプリでHEIC写真を選択すると、iOS画像パイプラインを使用してデバイス上でデコードし、JPEGをWordPressサイトにアップロードします。サーバーはlibheifを必要とせず、upload_mimes フィルタはHEICを必要としません。到達するファイルは既に標準のJPEGだからです。これは iPhoneのHEIC写真をWordPressにアップロードする方法 ガイドで詳しく扱ったアプローチです。
よくあるエラーのトラブルシューティング
「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」がまだ表示される
upload_mimes フィルタが読み込まれていません。3つを確認してください: (1) フィルタを含むファイルが全リクエストで実際にインクルードされているか(子テーマに入れたが親テーマがアクティブな場合、実行されません); (2) フィルタが早期リターンや短絡していないか; (3) 一部のセキュリティプラグイン(Wordfence、Sucuri)はWordPressコアの上に独自のアップロード検証を追加します。プラグイン設定でもHEICをホワイトリストに登録してください。
ファイルはアップロードされるが、サムネイルがグレーのプレースホルダー
許可リストが正しいためサーバーはファイルを受け入れましたが、ImageMagickがlibheifなしでコンパイルされているためHEICをデコードできません。ホストにImageMagickビルドのアップグレードを依頼するか(KinstaやWP Engineのようなマネージドホストは既にデフォルトでlibheifを出荷しています)、上記のサーバーサイド変換フィルタを使ってアップロード時にJPEGに変換します。より深い診断は WordPressで画像がアップロードできないときの対処法8選 にあります。
拡張子が .heic なのに「このファイルタイプは許可されていません」
PHPの finfo モジュールがMIMEタイプを image/heic ではなく application/octet-stream として報告しました。これは方法1の2番目のフィルタが修正するバグです。推奨スニペットから wp_check_filetype_and_ext フィルタを追加すればエラーは消えます。
アップロードプログレスバーが100%に達してエラー
ファイルはサーバーに到達したが、WordPressが wp-content/uploads に書き込めなかったか、サムネイル生成中にPHPの memory_limit が枯渇しました。HEICのデコードはJPEGより約2〜3倍メモリ集約的なので、5MBのJPEGを快適に処理するサーバーが5MBのHEICファイルに苦戦することがあります。WP_MEMORY_LIMIT を256Mに上げて再試行してください。
iPhoneからこれら全てなしでアップロード
上記は全て、HEICファイルが直接WordPressサーバーに到達することを望む前提です。別のパス、そして私がサーバー設定変更なしで何千ものWordPressサイトに出荷したパスは、アップロード前にiPhone上で変換することです。
SnapPress はPhotosライブラリからHEICを読み込み、iOS画像パイプライン(Appleが各iOSリリースで維持・更新)を使用してデコードし、REST API経由でWordPressメディアライブラリにJPEGをアップロードします。functions.php は触りません。upload_mimes フィルタは触りません。サーバーに到達するファイルは、2003年以来全てのWordPressインストールがサポートしてきた標準のJPEGです。
これは、複数のWordPressサイトを管理する人、またはPHPの編集に不安がある人に推奨するパスです。iPhoneで一度設定し、アプリケーションパスワードを持つ任意のWordPressサイトに写真をプッシュし、「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」を二度と見ないようにします。
iPhoneからよく公開する場合は、スマホからWordPressに画像を一括アップロードする完全ガイド のワークフロー比較を参照してください。
まとめと推奨
WordPressがデフォルトでHEICをブロックする理由は、多くのセットアップで image/heic がハードコードされたMIMEタイプ許可リストに含まれていないからです。修正方法は3つ:
- functions.php フィルタ — 最もクリーンな本番修正。5行、プラグインオーバーヘッドなし、全てのWordPressインストールで動作。
- WP Add Mime Types プラグイン — ノーコードのパス。フィルタと同じ効果、プラグインスロットを1つ使用。
- ALLOW_UNFILTERED_UPLOADS — 本番では絶対に使用しない。WordPressの全アップロード安全性チェックを無効化。
どの方法を選んでも、HEICアップロードを許可することは問題の半分にすぎないことを忘れないでください。ほとんどの訪問者のブラウザはHEICを描画できないため、読者が実際に見るファイルがJPEGであることを確認するために、サーバーサイド変換(ShortPixel、カスタムImagickフィルタ)またはクライアントサイド変換(SnapPress、ショートカット)も必要です。
特にiPhone公開ワークフローでは、ホスティングプロバイダーのImageMagickビルドに依存しないため、デバイス上の変換が最も回復力のあるアプローチです。SnapPressを無料で開始、SnapPress Connect WordPressプラグイン 経由で接続すると、HEICは単に「アップロードした写真」になります。
よくある質問
なぜWordPressはデフォルトでHEICをブロックするのですか?
WordPressは全てのアップロードを get_allowed_mime_types() が返すハードコードされた許可リストで検証します。2024年末のバージョン6.7まで、image/heic と image/heif はそのリストに含まれていなかったため、ファイルがメディアライブラリに到達する前に拒否されていました。「セキュリティ上の理由」というメッセージは誤解を招きます。実際には、攻撃者が実行ファイルを画像に偽装してアップロードすることを防ぐ厳格な許可リストです。WordPress 6.7以降でも、多くの共有ホストでは独自ビルドが新しいMIMEタイプを除外しているため、手動で upload_mimes フィルタを追加する必要があります。
WordPressでHEICアップロードを許可するのは安全ですか?
はい。HEICはHEIF形式に基づく静止画コンテナで、実際のデコーダーはmacOS、iOS、Windows 10以降、ほとんどのLinuxディストリビューションで使用されている、十分に監査されたlibheifです。upload_mimes フィルタで image/heic を許可してもWordPressのセキュリティは弱まりません。ファイルは依然として wp_check_filetype_and_ext() の検証を通る必要があるためです。むしろ大きなリスクは逆で、人々が一つのHEICエラーを修正するために wp-config.php で ALLOW_UNFILTERED_UPLOADS を有効化し、それを忘れたまま全アップロードパイプラインを丸ごと開放してしまうことです。
アップロードを有効にした後、HEIC写真は全ブラウザで表示されますか?
いいえ。ほとんどのチュートリアルが省略している部分です。SafariはHEICをネイティブに描画しますが、Chrome、Firefox、Edge、Android標準ブラウザは描画できません。生のHEICファイルをアップロードして img タグで埋め込むと、訪問者の約70%が壊れた画像を見ることになります。Safari以外のユーザーにJPEGまたはWebPを配信するShortPixelのようなサーバーサイド変換プラグインを使うか、アップロード時にHEICをJPEGに変換してメディアライブラリに保存されるファイルが最初からWeb互換になるようにする必要があります。
アップロード前にHEICをJPEGに一括変換する方法は?
macOSではHEICファイルをプレビューにドラッグし、すべて1つのウィンドウで開き、ファイル、書き出す、JPEG品質85を選択します。Windows 11ではフォルダをエクスプローラで開き、すべてのHEICファイルを選択、右クリック、フォトアプリで開き、それぞれをJPEGとして保存します(遅い)。iPhoneには組み込みの一括変換ツールはありません。ショートカットアプリで「画像を変換」アクション一つで作るか、送信時に自動的に変換を処理するiPhoneネイティブのアップロードツールを使えば、ディスク上のファイルを扱う必要がなくなります。
HEICを有効化するとWordPressのパフォーマンスに影響しますか?
影響するのはアップロード時だけで、配信時には影響しません。image/heic を許可し、HEICファイルがサーバーに到達すると、WordPressはImageMagickまたはGDを介してサムネイルと中間サイズを生成します。libheifを通したHEICデコードはコーデックがより多くの作業を行うため、JPEGデコードよりも約2〜3倍遅くなります。単一のアップロードでは知覚できません。低価格の共有ホストで100枚の写真を一括アップロードすると、PHPの max_execution_time の上限に達する可能性があります。事前にJPEGに変換するか、デバイス上で変換するアップロードツールを使えば、これは完全に回避できます。
HEICとHEIFの違いは何ですか?
HEIF(High Efficiency Image Format)はHEVC圧縮を使用した基盤となる画像フォーマットです。HEIC(High Efficiency Image Container)は、Appleが単一のHEIF画像を包むために使用するファイル拡張子です。MIMEタイプはそれぞれ image/heic と image/heif です。upload_mimes フィルタにHEICを追加する際は、常にHEIFも追加してください。iPhoneは画像シーケンスやバーストで .heif ファイルを生成することがあり、これらを別のタイプとして扱うと微妙な形でアップロードが壊れます。WordPress 6.7は内部的に両方の拡張子を同じように扱いますが、許可リストは依然として各MIMEタイプを名前で確認します。