Web サイトの画像を次世代フォーマット WebP で軽量化し、適切に配信する運用を PHP で自動化 するコンセプト実装です。
最もポピュラーな Web サーバー構成である Apache + PHP 向けのプログラムで、共用レンタルサーバーから VPS まで幅広い環境で利用可能です。
従来フォーマット ⇄ WebP の双方向変換と、ブラウザの対応状況に応じた配信機能を提供します。
- 🚀 WebP 対応ブラウザで従来フォーマット(JPEG/PNG/GIF)の画像をリクエスト → 軽量な WebP に変換して配信
- 🔄 WebP 非対応ブラウザで WebP 画像をリクエストすると PNG に変換して閲覧可能に
- ⚡ 変換結果をキャッシュして高速化
- 🔒 パストラバーサル攻撃を防ぐセキュアな実装
- 🏠 レンタルサーバーでも動作 - root権限不要で共用サーバーでも利用可能
- Linux x86_64 / Linux ARM64 (aarch64)
- 主要なレンタルサーバーで動作確認済み
- 他の環境も
libwebp
の追加インストールにより対応可能
- Apache 2.x
- 要 Rewrite モジュール
- .htaccess または conf ファイルによる設定変更ができること
- PHP
- 対応バージョンは
.github/workflows/cicd.yml
で管理 - 現在対応: 5.6 / 7.0 / 7.1 / 7.2 / 7.3 / 7.4 / 8.0 / 8.1 / 8.2
- 対応バージョンは
多くの共用レンタルサーバーで追加料金なしでWebP配信が可能になります:
- Releases から最新版の ZIP ファイルをダウンロード
- FTPまたはファイルマネージャーで
phpwebp-concept
ディレクトリをアップロード .htaccess-example
を参考に.htaccess
を設定
対応確認済みのレンタルサーバー例:
- さくらのレンタルサーバ
- エックスサーバー
- ロリポップ!
- その他 Apache + PHP が動作する環境
💡 メリット: root権限不要、追加モジュール不要、既存サイトに簡単導入可能
次の PHP プログラムを実行し、ディレクトリ名を確認します(例: winnt-amd64
)。
<?php echo strtolower(PHP_OS . '-' . php_uname('m'));
CLI であれば次のコマンドでも代替可能です。
php -r "echo strtolower(PHP_OS . '-' . php_uname('m'));"
phpwebp-concept/bin
以下に、上記名称のディレクトリを作成し、libwebp に同梱される次のプログラムファイルを実行可能なファイル
として配置してください。
- cwebp
- dwebp
- webpinfo
- gif2webp
ブラウザの開発者ツールの Network
タブ等で確認してください。
WebP 対応ブラウザの開発者ツール Network
タブ等で確認してください。
- 従来フォーマット(JPEG/PNG/GIF)の画像レスポンスの
Content-Type
ヘッダがimage/webp
になっていること。 - 従来フォーマット(JPEG/PNG/GIF)の画像レスポンスのデータサイズや
Content-Length
ヘッダが元画像より小さくなっていること。
WebP 非対応ブラウザで開発者ツール Network
タブなどとあわせて確認してください。
- WebP 画像を閲覧できること。
- WebP 画像レスポンスの
Content-Type
ヘッダがimage/png
になっていること。
このプログラムは MIT ライセンスに同意して利用ください。
- 追加費用なし - 既存のホスティングプランのまま画像を最適化
- 転送量削減 - 画像サイズを25-35%削減し、転送量制限を有効活用
- 表示速度向上 - Google PageSpeed Insights のスコア改善
- SEO効果 - Core Web Vitals の改善により検索順位向上の可能性
- 🐳 Docker
- 🐹 Go 1.21以上
- 📝 Make
本プロジェクトを clone
してください:
git clone https://github.com/ideamans/phpwebp-concept.git
cd phpwebp-concept
Go言語で実装されたテストスイートを使用します。dockertestを使用してPHPコンテナを動的に起動し、テストを実行します。
# 単一のPHPバージョンをテスト(デフォルト: 8.1)
make test
# 特定のPHPバージョンをテスト
PHP_VERSION=7.4 make test
# すべてのPHPバージョンを順次テスト
make test-all
次のコマンドでリリースパッケージをビルドします。
# デフォルトバージョン(v1.0.0)でビルド
make build
# 特定のバージョンでビルド
VERSION=v1.0.1 make build
リリースパッケージは built/
ディレクトリに生成されます。
# テストキャッシュとDockerコンテナをクリーンアップ
make clean
- Docker Hub で利用可能なPHPバージョンを確認
.github/workflows/cicd.yml
のmatrixに追加- ローカルでテスト:
PHP_VERSION=X.X make test
- テストが通ったらPRを作成
- 現在のバージョンを確認:
cat .libwebp-version
- Google Developers から新バージョンをダウンロード
- バイナリを更新して
.libwebp-version
を更新 make test-all
で全PHPバージョンでテスト
- 画像サイズを平均25-35%削減(JPEG比)
- キャッシュにより2回目以降のアクセスは高速化
- WebPが元画像より大きい場合は元画像を配信
- Apache の mod_rewrite が有効か確認
.htaccess
が正しく配置されているか確認phpwebp-concept/bin/
内のバイナリに実行権限があるか確認
PHPのエラーログまたはApacheのエラーログを確認してください。