1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

タスクランナーを使わないお手軽なCSSとJavaScriptの最小化(minify)

Posted at

意外と効くCSSとJavaScriptのminify

CSSとJavaScriptの最小化(minify)は、データの削減量としては地味ですがPageSpeed Insightsのスコア改善に意外と効果があります。これはPageSpeed Insightsのスコアがレンダリングブロックの時間に敏感だからです(もちろん保証はありません!)。

PageSpeed Insightsの点数はどのように計算されているか。100点をとるための条件
https://qiita.com/miyanaga/items/d38124cdd64a1999fed9

minifyはタスクランナーやフレームワークのアセットパイプラインで自動化するのが常套手段ですが、複数のメンバーで運用中のサイトに後から導入するのは一苦労です。

そこでVisual Studio Codeの機能拡張と、.htaccessファイルで稼働中のサイトに途中からCSSとJavaScriptのminifyを開始する方法を紹介します。

JS & CSS Minifier 拡張機能

Visual Studio Codeに次の拡張機能をインストールします。

JS & CSS Minifier
https://marketplace.visualstudio.com/items?itemName=olback.es6-css-minify

ワークスペースの設定にes6-css-minify.minifyOnSaveを追加します。

{
  "folders": [
    { "path": "." }
  ],
  "settings": {
    "es6-css-minify.minifyOnSave": "yes"
  }
}

これで任意の.cssファイルまたは.jsファイルを保存すると、その瞬間にminifyされた.min.css.min.jsが作成されるようになります。

  • 例: sample.cssを保存 → minifyされたsample.min.cssがとなりに自動作成されます。

既存の.cssファイルや.jsファイルを一括でminifyする機能拡張を探したのですが、見当たりませんでした(もしあったら教えてください!)。

minifyされたファイルがあれば優先する.htaccessファイル

HTML側の参照を.min.css.min.jsファイルに変更するところですが、ここでは.htaccessでRewriteモジュールを設定して振り分けをしてみます。

DocumentRootの.htaccessファイルに次の記述を行います。

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$1.min.$2 -f
RewriteRule ^([^.]+)\.(css|js)$ $1.min.$2 [L,NC]

これでブラウザからsample.csssample.jsが参照されたとき、もしsample.min.csssample.min.jsがあればApacheは実際にはそれらを返すようになります。

「HTML側を変えた方が早い!」という場合はもちろんそれでも。
個人的には.min.css.min.jsを消せば元に戻して検証しやすい点が気に入っています。

DocumentRoot以外に.htaccessを記述する場合

もし、.css.jsファイルが/assets/以下にしか存在しないのであれば、/assets/.htaccessファイルとして次の記述を行うと効率がよいです。

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/assets/$1.min.$2 -f
RewriteRule ^([^.]+)\.(css|js)$ /assets/$1.min.$2 [L,NC]

2箇所で**/assets/を補う必要があるので注意してください。** RewriteCondでファイルの有無を確認する都合上、RewriteBaseがうまく使えません。

バンドリング(1ファイルへの結合)とPageSpeed Insightsのスコア

タスクランナーやアセットパイプラインでは、CSSやJavaScriptの最小化と同時に各々を1ファイルにまとめてくれます。

これはリクエスト数を減らして無駄なオーバーヘッドを削減する措置ですが、経験上、適度にファイルが分割されている方が並列ダウンロードによりPageSpeed Insightsのスコアが上がります。HTTP/2も一般的になってきてますし。

ここで紹介した方法では1ファイルへの結合は行われませんが、その意味で効果を期待できます。ぜひ試してみてください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?