iPhoneのHEIC写真をWordPressにアップロードする方法 ― 変換の手間なく
2017年以降に発売されたすべてのiPhoneは、デフォルトでHEICフォーマットで写真を撮る。そして2024年より前に構築されたほぼすべてのWordPressサイトは、HEICファイルのアップロードを拒否していた。この食い違いは、自分が15年間WordPressサイトを作ってきた中で、一番多く混乱を引き起こしたフォーマット問題だった。
2024年後半にWordPress 6.7がHEICのネイティブサポートを追加して、状況は改善した。でも「改善」と「解決」は同じじゃない。HEICアップロードが無言で失敗するホスティング環境もあるし、このフォーマットで動かなくなるプラグインもあるし、フォーラムには相反するアドバイスがあふれている。
ここでは、実際に何十ものクライアントサイトでこの問題に対処してきた経験をまとめます。
HEICって何なのか
HEIC(High Efficiency Image Container)はHEIF画像フォーマットをH.265圧縮で包んだもの。AppleがiOS 11で採用した理由は、同じ見た目の画質でJPEGより約40〜50%小さいファイルを作れるから。JPEGだと6MBになる標準的なiPhoneの写真が、HEICなら約3MBで済む。
このサイズ差は、モバイル回線でアップロードするときに効いてくるし、WordPressサーバーのストレージにも影響する。小さいファイル、同じ画質。フォーマット自体にデメリットはない。
デメリットは互換性。長い間、Appleのエコシステム以外ではHEICファイルをほぼ何も開けなかった。Windowsは2018年に対応。Androidは2019年。WordPressが対応したのは2024年後半のバージョン6.7で、しかもサーバーに適切な画像処理ライブラリがインストールされていることが条件。
WordPress 6.7のHEICサポート:何が変わったか
6.7より前は、.heicファイルをWordPressにアップロードすると「セキュリティ上の理由からこのファイル形式は許可されていません」というエラーが出た。対処法は、すべての写真をアップロード前にJPEGに変換する(面倒)か、functions.phpにMIMEタイプをホワイトリストに追加するコードスニペットを書く(サーバーが実際にファイルを処理できない場合はリスクあり)か、のどちらかだった。
WordPress 6.7は、HEICを許可されたファイルタイプの一覧に追加し、HEICファイルからサムネイルを生成する基本的なサポートも含めた。サーバーのImageMagickがHEIFサポート付きでコンパイルされている(またはGD用にlibheifがある)なら、WordPressがHEICをネイティブに処理できるようになった。
この「なら」がポイント。
動く環境
最近のマネージドホスティング(Cloudways、Kinsta、SiteGroundの新しいインフラなど)は、たいていHEIFサポート付きのImageMagickが入っている。これらのホストでWordPress 6.7以降を使っているなら、HEICアップロードはそのまま動くはず。
動かない環境
古いインフラの共有ホスティングは当たり外れがある。格安ホストの多くは古いバージョンのImageMagickを使っていて、HEIFサポートが含まれていない。アップロード自体は成功する(ファイルはサーバーに届く)けど、WordPressがサムネイルを生成できない。メディアライブラリにフルサイズのHEICファイルが入って、サムネイルの部分はどこも壊れた表示になる。
このとき、わかりやすいエラーメッセージは出ない。メディアライブラリにプレビューの代わりに汎用アイコンが表示されるだけ。クライアントから「写真がアップロードできない」と報告を受けたけど、実際にはアップロードは成功していて、ただ管理画面で壊れて見えていただけ、ということが何度もあった。
サーバーがHEICに対応しているか確認する方法
WordPress管理画面でツール > サイトヘルス > 情報 > メディア処理に移動する。ImageMagickのバージョンとサポートされているフォーマットを確認。一覧に「HEIC」か「HEIF」があればOK。
なければ、またはImageMagickの代わりにGDを使っている場合は、HEICのサムネイルは生成されない。選択肢は2つ。ホスティング会社にImageMagickのアップグレードを依頼するか、アップロード前に写真を変換するか。
変換の問題
HEICをJPEGに変換してからアップロードする、と言うと簡単に聞こえる。PCではその通り。macOSのプレビューなら数秒でバッチ変換できるし、Windowsのフォトアプリでもできる。
iPhoneだと話が違う。一括変換する標準機能がない。カメラの設定をHEICからJPEGに変更することはできる(設定 > カメラ > フォーマット > 互換性優先)。でもそうすると、WordPressに送る写真だけじゃなく、すべての写真で40〜50%のファイルサイズのメリットを失うことになる。
ショートカットアプリでHEIC→JPEGコンバーターを作る人もいる。動くけど、ワークフローに手動ステップがまたひとつ増えるし、変換後のファイルは大きくなる。ある問題を別の問題に置き換えているだけ。
本当にやっかいなのは、iPhoneが一部の状況ではこの変換を自動でやっていること。メールで写真を送ったり、Windows PCにAirDropしたりするとき、iOSは自動でJPEGに変換する。でもブラウザやWordPressアプリ経由でアップロードするときは、元のHEICファイルをそのまま送る。この動作を変更する設定はない。
SnapPressのHEIC対応
SnapPressを作るとき、HEICの扱いは最初に解決しないといけないことのひとつだった。アプローチはシンプル。アプリが元のHEICファイルを読み込んで、iPhone上でローカルにJPEGに変換してから、JPEGをWordPressにアップロードする。
つまり、サーバーの構成に関係なくどのWordPressサイトでも動く。ホスト側にImageMagickのHEIFサポートは不要。WordPressが6.7である必要もない。サーバーに届くのは標準的なJPEGで、バージョン1.0以来すべてのWordPressが扱える。
変換はデバイス上で行われ、1枚あたりほんの一瞬で終わる。変換が見えることもないし、設定することもない。写真を選んでアップロードをタップすると、メディアライブラリにサムネイルもプレビューも正常なJPEGファイルが表示される。
これが「正しい」方法かどうかは、何を重視するかによる。ファイルサイズを極限まで小さくしたいなら、対応サーバーにネイティブHEICをアップロードするほうが技術的には有利。サーバー設定を確認しなくてもどのWordPressサイトでも動くものがほしいなら、自動変換のほうが確実。
自分は理論的な最適化よりも信頼性を選んだ。経験上、ほとんどのWordPressユーザーは自分のホストのImageMagickのバージョンを知らないし、気にしない。写真がちゃんと表示されればそれでいい。
もうひとつ出会うフォーマット:HEIFとAVIF
HEICは技術的にはHEIF画像をラップするコンテナフォーマット。.heicの代わりに.heif拡張子のファイルを見かけることもある。WordPress 6.7は両方を同じように扱う。
AVIFはウェブで勢いを増している新しいフォーマット(Netflixや多くのCDNが画像配信に使っている)。WordPressはバージョン6.5でAVIFサポートを追加した。新しいiPhoneの一部はAVIFで写真を撮れるけど、まだデフォルトにはなっていない。
今のところ、iPhoneの写真をアップロードするなら99%はHEICを扱うことになる。でもAVIFは要チェック。HEICよりさらに高い圧縮率で、クロスプラットフォームのサポートも広い。
自分のおすすめ
ホスティングがHEICに対応していて(サイトヘルスで確認)、WordPress 6.7以降を使っているなら、HEICファイルをそのままアップロードしよう。小さいファイルサイズの恩恵を受けられる。
ホスティングがHEICに対応していない場合、または複数サイトを異なるホストで管理していてひとつずつ確認したくない場合は、自動で変換してくれるツールを使おう。SnapPressはこれを自動でやってくれる。SnapPress Connectプラグインがサイト接続を担当し、アプリがフォーマット変換を裏で処理する。
WordPressで一度トラブルが出たからといって、iPhoneのカメラ設定をJPEGに変えないでほしい。HEICのほうがいいフォーマット。カメラ設定じゃなくて、アップロードツール側が対応すべき話だから。