CrystalSnowman.com

あなたの時間節約につながる情報を提供します

WordPress 画像ファイル(png)を圧縮する方法

WordPressにアップロードしたpngファイルを圧縮しました。また毎日シェルで自動的に圧縮できるようにしました。ファイルの転送サイズを減らしてGoogleのPageSpeed Insightsから怒られないようにします。Googleからの評価が上がればSEO的に良い結果が得られるかもしれません。

PageSpeed Insightsからの提案

GoogleのPageSpeed Insightsで自分のブログをチェックしてみました。

page speed insights before

ファイルが圧縮できるよと言っています。
たくさんリストアップされているpngファイルを圧縮してみようと思いました。

方法

Google Developersのページで紹介されているOptiPNGを使ってみます。
画像を最適化する | PageSpeed Insights | Google Developers

CentOSにインストールします。

WordPressのファイルアップロード先に移動してpngファイルを圧縮します。

WordPressのファイルアップロード先はuploadsディレクトリで、アップロードした年と月でディレクトリが作成されます。

optipngの「-o7」は圧縮率のオプションを表し、7が最高レベルです。
またoptipngすると圧縮前のファイルは残りません。

実行するとこのように表示されます。

*.png」を指定したのでpngファイルがすべて圧縮の対象となります。
最高の圧縮レベルを指定したので思ったより時間がかかりました。

PageSpeed Insightsの結果

全てのディレクトリのpngファイルを圧縮して、再度PageSpeed Insightsを実行してみました。

page speed insights after

ほんの少し得点がよくなりました。
pngファイルサイズがそこまで小さくならなかったことと、jpgファイルやgifファイルは何もやってないのでこの程度の改善にとどまったのだと思います。

自動化の方法

WordPressにファイルをアップロードするたびにoptipngコマンドを実行するのは大変なので、cronで毎日optipngコマンドを実行する設定にします。

シェル作成

WordPressのファイルアップロードディレクトリ配下にある全てのpngファイルをoptipngで圧縮します。
ただ圧縮済みのファイルを再度圧縮する必要ないので、作成/変更されてから2日以内のファイルを対象とします。
一度圧縮済みのファイルは再び圧縮できないので、同じファイルがいつまでも対象となり続けることはありません。

cronで実行するシェルを作成します。

「optImageFile.sh」というファイル名で作成し、「chmod」で実行権限を付与しています。

「optImageFile.sh」の中身です。
CentOS7なのでbashで作成します。

WordPressのファイルアップロード先に移動します。
「find .」で移動したカレントディレクトリ配下のファイルをすべて探します。
「-name *.png」オプションでpngファイルのみ対象とします。
「-ctime -2」オプションでシェル実行時の2日前以降に作成/変更されたファイルのみ対象とします。

ctimeはx日前にファイルの中身とOwnerや権限などの属性が変更されたファイルを対象とするオプションです。
「-ctime 2」はちょうど2日前に変更されたファイルを対象とします。
「-ctime +2」は2日前以前に変更されたファイルを対象とします。
「-ctime -2」は2日前以降に変更されたファイルを対象とします。

ちなみにmtimeはx日前に変更されたファイルです。
atimeはx日前にアクセスされたファイルです。

「-exec optipng -o7」でfindした結果をoptipngします。
「{}」はfindした結果をoptipngする場合に指定します。
「+」は結果をoptipngにまとめて渡す時に指定します。

cronの設定

作成したシェルをcronに設定します。

中身は以下です。

毎朝5:30に実行するようにしました。

参考資料

今回は以下のサイトを参考にさせていただきました。

Google PageSpeed スコアを改善する方法(画像圧縮 OptiPNG) | あぱーブログ

find コマンド | コマンドの使い方(Linux) | hydroculのメモ

まとめ

optipngでpngファイルを圧縮しました。品質を落とさずに圧縮したので、ファイルサイズはそこまで小さくなりませんでした。
ただcronで自動化できたことが意味があったかなと思います。
次はjpegファイルでも圧縮できるようにしたいと思います。


Top