
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対応で構築する必要があるみたいです!
同じ環境に陥った方はぜひ参考にしてみてください!