PHPでGDモジュールにWebPサポートを有効化する手順

はじめに

お疲れ様です!アシスタントエンジニアの小原です!

ローカル環境でWebP画像を処理しようとしたところ、PHPのGDモジュールにWebPサポートが有効になっていないことが判明しました。この記事では、Docker環境でGDのWebPサポートを有効化する具体的な手順を共有します。


背景

ローカル環境とステージング環境で以下の差異がありました。

  • ステージング環境ではWebPサポートが有効で、GDを使用した画像処理が可能。
  • ローカル環境ではWebPサポートが無効で、GDがWebP画像を処理できない状態。

これを解決するために、GDモジュールをWebP対応で再構築する必要がありました。


手順

1. 必要なライブラリをインストール

GDがWebPをサポートするには、libwebp-dev という開発ライブラリが必要です。Dockerfileに以下を追加してインストールします。

Dockerfile

RUN apt-get update && apt-get install -y libwebp-dev

2. GDモジュールの再構築

次に、GDをWebPサポート付きで構築します。Dockerfileの docker-php-ext-configure gd 部分に以下のように

--with-webp=/usr/include/ \

を追加します

Dockerfile

RUN docker-php-ext-configure gd \
    --with-webp=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

3. Dockerイメージの再ビルド

Dockerのキャッシュが原因で新しい設定が反映されない可能性があります。そのため、以下のコマンドを使用してキャッシュを無効化し、新しいDockerイメージを作成します。

コンテナ上

docker-compose build --no-cache
docker-compose up -d

4. WebPサポートの確認

コンテナ内で以下のコマンドを実行し、GDモジュールがWebPサポート付きで構築されているか確認します。

コンテナ上

php -i | grep -i webp

期待される出力は次のとおりです。

WebP Support => enabled

これが表示されれば、GDモジュールがWebP対応になっています!


注意点

1. PHPのバージョン

GDのWebPサポートはPHP 7.4以降で安定しています。今回使用したPHP 8.0では問題なく動作しました。

2. 必要なライブラリのインストール

libwebp-dev を忘れるとGDのWebP対応は有効になりません。Dockerfileに確実に追加しましょう。

3. キャッシュのクリア

Dockerビルド時に古い設定が残ることを防ぐため、キャッシュをクリアして再ビルドすることが重要です。


結果

今回の作業により、ローカル環境でWebP形式の画像をGDでリサイズ・加工できるようになりました!


まとめ

PHPのGDモジュールでWebP画像を扱うには、適切なライブラリをインストールし、GDをWebP対応で構築する必要があるみたいです!

同じ環境に陥った方はぜひ参考にしてみてください!

Related article

おすすめ関連記事