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で処理する
関連記事: