WebPに対応して画像サイズを最適化する方法

この記事の要約
- Googleが提供する「Squoosh」でWebPへの変換が可能
- WebPを実装するなら
<picture>を使うか.htaccess側で制御するのが現実的 <picture>をIE11で使うにはpicturefill.jsを使う必要がある
Googleが主導となって開発している画像形式にWebPがあります。
ざっくり説明すると、PNGとJPGのいいとこ取りをしたような画像形式で、透過に対応しつつ圧縮率も高い夢のような画像形式です。
- PNG:透過が使えてキレイ
- JPG:圧縮率が高い
しかし、Google Chrome・Firefox・Edgeには対応しているものの、SafariやIEではまだ対応されていないのが問題です。
今回はウェブサイト上の画像をWebPに対応する手順についてまとめておきます。
ちなみにWordPressでウェブサイトを作成する場合は、EWWW Image OptimizerというプラグインでWebPに対応した方が手間もかからないのでそちらがオススメです。
WebPの変換方法
公式サイトで変換
Googleが提供する「Squoosh」なら、画像をドラッグアンドドロップするだけでWebPに変換できます。
Photoshopで変換
Photoshopはデフォルトだと未対応ですが、WebPに変換してくれるプラグインがあります。
WebPの実装方法
普通に<img>タグを使って書いても表示されますが、それだと対応していないブラウザだと表示されなくなってしまうので、従来の画像形式と共存させる必要があります。
現時点で対応方法は下記2つのうちどちらかになります。
- <picture>を使う
- .htaccess側で制御する
<picture>を使う場合
<picture>タグを使って下記のように記述すると、WebPに対応しているブラウザではWebPが表示され、対応していないブラウザでは従来通りの画像が表示されます。
<picture>
<!-- WebP画像 -->
<source srcset="sample.webp" type="image/webp">
<!-- 従来画像 -->
<img src="sample.jpg">
<picture>ただし、<picture>はIE11に対応していないため、picturefill.jsを使って使えるようにする必要があります。
picturefill.jsの設定方法
picturefill.jsを設定するためには下記のページからJavaScriptファイルをダウンロードします。
あとは下記のようにダウンロードしたJavaScriptファイルを読み込めばOKです。
<script src="./assets/js/picturefill.js"></script>これでIE11でも<picture>タグを使えるようになります。
.htaccess側で制御する場合
下記の記述を.htaccessへ追加すると、WebP対応ブラウザでユーザーがアクセスした場合にWebP画像を表示してくれます。
(このコードはWordPressプラグインのEWWW Image Optimizerと同じコードになります)
<IfModule mod_rewrite.c>
RewriteEngine On
# ブラウザから送信されるAcceptリクエストヘッダがimage/webpを含む場合のみ後続のRewriteRuleを適用する
RewriteCond %{HTTP_ACCEPT} image/webp
# WebP版のファイルがある場合のみ後続のRewriteRuleを適用する
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
# *.jpg、*.pngファイルを*.webpファイルに内部的にルーティングする
# Content-Typeはimage/webpにして環境変数acceptを1にする
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
# 環境変数acceptが真の(上記RewriteRuleで1が設定された)場合、
# CDNやキャッシュサーバーがWebPとJpeg/PNGをそれぞれキャッシュできるように
# VaryレスポンスヘッダにAcceptを追加する
Header append Vary Accept env=REDIRECT_accept
</IfModule>
<IfModule mod_mime.c>
# 拡張子.webpファイルはContent-Typeとしてimage/webpを返す
AddType image/webp .webp
</IfModule>
あとは、各画像ファイルがある場所に.webpの拡張子の画像も用意すれば、対応しているブラウザではWebPが表示されるようになります。
まとめ
まだ対応していないブラウザが多いため、WebPに対応するには今回紹介したような従来の画像形式との振り分け処理が必要になります。
ただ、それでもWebPにするとサイトの表示速度で1番の問題になる画像サイズの問題を大幅に改善できます。



Apacheのテストページを非表示にする方法
サーバーのアップロードファイルの最大容量の確認と変更方法
gulp-plumberとgulp-notifyでgulpエラー時にデスクトップで通知がくるようにする
効率的なマークアップが出来るようになるEmmetでCSSを書く時の基本
「epel-release」インストール後にyum installで「Cannot retrieve metalink for repository」と表示される場合の対処法
CSS疑似要素の「:empty」でタグの中身が空のときのスタイルを設定する
MAMPでローカル開発環境にWordPressをインストールする手順
Movable TypeでMTLoopを使ってkeyでソートしたときに、10個以上表示させると並びがおかしくなる
gulp 4.0から新しく加わったseriesとparallelについての備忘録
.htaccessを使って、httpからhttpsへリダイレクトする設定方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法