2026年7月19日

2026年7月19日

EWWW Image Optimizerのエラー対処:ツール未検出・WebP未配信・一括最適化の失敗

EWWW Image Optimizer(以下 EWWW)のトラブルは、多くが「サーバー上で最適化ツールを実行できない」「WebP ファイルは作られているのに配信の設定が無い」「一括処理が PHP の時間制限で止まる」のどれかです。この記事では症状ごとに原因を切り分け、公式ドキュメント(docs.ewww.io)に載っている設定だけを使って直す手順をまとめます。内容は2026年10月時点の EWWW 8.9 系で確認しています。

症状と原因の対応表

症状 主な原因 見る場所
設定画面に jpegtran・optipng・gifsicle・cwebp が「見つからない」と出る PHP の exec() が無効、wp-content/ewww/ を作れない、ツールに実行権限が無い 手順1・2
WebP ファイルはあるのにブラウザには JPEG/PNG が届く WebP の配信方式を選んでいない、Nginx なのに .htaccess 方式を選んでいる、Cloudflare などの CDN が元画像をキャッシュしている 手順3
特定の画像だけ画質が落ちる・最適化したくない 除外設定をしていない 手順4
一括最適化(Bulk Optimize)が途中で止まる ブラウザ経由の処理が PHP の実行時間やメモリの上限に当たる 手順5

手順1:最適化ツールが動かない原因を確かめる

EWWW の無料の「サーバー上での最適化」は、jpegtran・optipng・gifsicle・cwebp などのコマンドを PHP の exec() で呼び出して動きます。公式の説明では、プラグインがこれらのツールを wp-content/ewww/ フォルダーに自動で置き、そのために wp-content フォルダーへ Web サーバーのユーザーが書き込める必要があります。

まず、次の3点をサーバー上で確認します。

# 1) exec が disable_functions に入っていないか
#    (CLI と Web で php.ini が別のことがあるため、Web 側の値は phpinfo() の表示でも確認する)
php -i | grep -i disable_functions

# 2) wp-content/ewww/ が作られているか、ファイルに実行権限(x)があるか
ls -l /var/www/html/wp-content/ewww/

# 3) wp-content があるファイルシステムが noexec でマウントされていないか
findmnt -T /var/www/html/wp-content -o TARGET,OPTIONS
  • disable_functions に exec が含まれていれば、サーバー上の最適化は使えません。レンタルサーバーでは変更できないことが多いので、後述の Compress API(クラウド最適化)に切り替えます。
  • wp-content/ewww/ が無い場合は、フォルダーを自分で作るか wp-content の権限を見直します(公式ドキュメントの案内)。FTP でツールを手動アップロードした場合は、FTP クライアントの転送モードをバイナリにしないとファイルが壊れます。
  • OPTIONS に noexec が出る場合、そのファイルシステム上のプログラムは実行できません。

確認が済んだら、WordPress 管理画面の「設定」→「EWWW Image Optimizer」を開き直し、ツールの検出状態が変わったかを見ます。

手順2:ツールを用意する、またはクラウド最適化に切り替える

root 権限があるサーバーでパッケージを入れる

Ubuntu / Debian では、次のパッケージに各ツールが含まれます。

sudo apt update
sudo apt install libjpeg-turbo-progs optipng gifsicle webp
which jpegtran optipng gifsicle cwebp

OS のパッケージを使わせたい場合は、wp-config.php の「編集はここまで」の行より上に次を書きます。この定数は、同梱版の代わりにシステムのツールを使わせる公式の設定です。ただし公式ドキュメントは同梱版の利用を勧めており、この設定は推奨していません。

<?php
// wp-config.php の「編集はここまで」より上に追加する
define( 'EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true );

PHP の open_basedir で実行できるパスが制限されている環境では、EWWWIO_OPEN_BASEDIR にツールの場所をコロン区切りで指定できます(例: '/usr/bin/:/usr/local/bin/')。

exec が使えないサーバーでは Compress API を使う

exec() が無効なレンタルサーバーでは、ツールを置いても動きません。この場合は EWWW の Compress API(ewww.io のクラウド最適化)の API キーを設定画面に入れて使います。無料で使える範囲と有料プランの内容は変わることがあるため、契約前に ewww.io の料金ページで確認してください。

手順3:WebP が配信されないときの直し方

「WebP 変換」を有効にしても、作られるのは image.jpg.webp のような別ファイルだけです。ブラウザに WebP を返すには、次のどれかの配信方式を選ぶ必要があります。

方式 向いている環境 注意点
.htaccess のリライトルール(Apache / LiteSpeed) Apache・LiteSpeed で .htaccess が有効なサイト mod_rewrite と mod_headers が必要。Cloudflare を使うサイトでは公式に非推奨
Nginx の map ルール Nginx プラグインからは書き込めないので手で設定する
JS WebP Rewriting CDN やプロキシの後ろにあるサイト JavaScript で URL を書き換える。テーマやプラグインと衝突することがある
<picture> WebP Rewriting JavaScript を増やしたくないサイト CSS の背景画像には効かない。テーマの見た目が崩れることがある
Easy IO CDN を使うサイト 有料の画像 CDN サービス

Apache で .htaccess 方式が効かない場合

  • .htaccess に Web サーバーのユーザーが書き込めないと、ルールが挿入されません。書き込めない場合は、設定画面に表示されるルールを手で .htaccess に貼ります。マルチサイトでは WordPress のルールより上に置く必要がある場合があります。
  • mod_rewrite または mod_headers が無効だとエラーになります。Ubuntu の Apache なら sudo a2enmod rewrite headers のあと sudo systemctl reload apache2 で有効にできます。
  • 設定画面の WebP 欄に表示されるテスト画像が緑の WebP なら配信できています。赤い PNG のままなら、ページを再読み込みしてから再確認します。

Nginx で配信する場合

Nginx は .htaccess を読まないため、Apache 用のルールを挿入しても効果はありません。公式ドキュメントの方法は3か所の編集です。

# 1) http { } ブロック内(server { } より前)
map $http_accept $webp_suffix {
  default "";
  "~*webp" ".webp";
}

# 2) /etc/nginx/mime.types に無ければ追加
#    image/webp  webp;

# 3) server { } ブロック内
location ~* ^.+\.(png|jpe?g|gif)$ {
  add_header Vary Accept;
  try_files $uri$webp_suffix $uri =404;
}

編集後は sudo nginx -t で構文を確認してから sudo systemctl reload nginx で反映します。確認は、ブラウザの開発者ツールのネットワーク欄で画像のレスポンスの Content-Type が image/webp になっているかを見ます。

# WebP 対応ブラウザを装ってヘッダーだけ確認する(URL は自分のサイトの画像に置き換える)
curl -sI -H "Accept: image/webp" https://example.com/wp-content/uploads/2026/10/sample.jpg | grep -iE "content-type|vary"

CDN(Cloudflare など)を使っている場合、CDN が Vary: Accept を見ずに元の JPEG をキャッシュしていることがあります。設定を変えたら CDN のキャッシュも削除してください。

手順4:最適化から除外する・画質を調整する

定数で指定する(公式のオーバーライド)

EWWW の設定は、同じ名前の定数を wp-config.php に書くと上書きできます。真偽値や数値は引用符で囲みません。

<?php
// wp-config.php の「編集はここまで」より上に追加する

// 名前の一部が一致するフォルダー・ファイルを除外する(ワイルドカード不要)
define( 'EWWW_IMAGE_OPTIMIZER_EXCLUDE_PATHS', array( 'portfolio', 'private-uploads' ) );

// 指定したバイト数より小さい画像は処理しない(0 で制限なし)
define( 'EWWW_IMAGE_OPTIMIZER_SKIP_SIZE', 10240 );

// リサイズ・サムネイル・WebP に使う JPEG 品質(既定 82)
define( 'EWWW_IMAGE_OPTIMIZER_JPG_QUALITY', 82 );

// WebP の品質(既定 75)
define( 'EWWW_IMAGE_OPTIMIZER_WEBP_QUALITY', 75 );

定数で指定した項目は、管理画面から変更できなくなります。

フィルターで条件を付けて除外する

ファイル名から条件を判断したい場合は ewww_image_optimizer_bypass フィルターを使います。第1引数が「除外するか」、第2引数がサーバー上のファイルのフルパスで、true を返すとそのファイルは最適化されません。

<?php
// 子テーマの functions.php またはコードスニペット用プラグインに追加する
add_filter( 'ewww_image_optimizer_bypass', function ( $bypass, $filename ) {
	// uploads/originals/ 以下は元画像のまま残す
	if ( false !== strpos( $filename, '/uploads/originals/' ) ) {
		return true;
	}
	return $bypass;
}, 10, 2 );

手順5:一括最適化が止まるときは WP-CLI で実行する

「メディア」メニューにある一括最適化(Bulk Optimize)の画面はブラウザから処理を進めるため、画像が多いと PHP の実行時間やメモリの上限に当たって止まることがあります。SSH と WP-CLI が使えるなら、コマンドラインで実行するほうが安定します。

# WordPress のディレクトリで実行する
cd /var/www/html

# 使い方の表示
wp help ewwwio optimize

# メディアライブラリ(通常の一括最適化と同じ範囲)を処理する。--noprompt で確認を省略
wp ewwwio optimize media --noprompt

# 画像1枚ごとに5秒待ってサーバー負荷を抑える
wp ewwwio optimize media 5 --noprompt

公式ドキュメントでの主なオプションは次のとおりです。

  • --force:最適化済みの画像も含めて再処理する(一括最適化画面の「Force Re-optimize」と同じ)
  • --reset:画像を再スキャンして最初からやり直す(--force とは別物)
  • --noprompt:スキャン後の確認を省く。cron から実行するときに使う

長時間かかる処理は、SSH が切れても止まらないよう screen や tmux の中で実行してください。

注意事項

  • 最適化の前に、wp-content/uploads/ をバックアップしてください。非可逆圧縮(lossy)や PNG→JPG 変換は元に戻せない場合があります。
  • EWWW_IMAGE_OPTIMIZER_DELETE_ORIGINALS を有効にすると、形式変換後に元ファイルが削除され、記事内の古い URL が切れることがあります。
  • Easy IO は有料の CDN サービスです。料金や転送量の条件は ewww.io で最新の情報を確認してください。
  • 画像最適化プラグインを2つ同時に有効にすると、同じ画像を二重に処理したり、WebP の配信ルールが競合したりします。1つに絞ってください。

まとめ

  • 「ツールが見つからない」は、exec() の可否、wp-content/ewww/ の作成と実行権限、noexec マウントの順に確認する。exec() が使えなければ Compress API に切り替える
  • WebP は変換だけでは配信されない。Apache は .htaccess、Nginx は map ルール、CDN の後ろなら JS か <picture> の書き換えを選ぶ
  • 除外や画質は wp-config.php の公式オーバーライド定数か ewww_image_optimizer_bypass フィルターで指定する
  • 大量の画像は wp ewwwio optimize media --noprompt で処理する

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲