ブログ一覧

CSSの最適化アプローチ。インライン化、圧縮、そして削除

CSSの最適化には、昔から大きく3つのアプローチがあります。

  • 圧縮(minify)
  • 使われていないCSSの削除
  • インライン化

この記事はもともと2020年に書いたもので、当時は「VS Codeの拡張機能で圧縮する」「オンラインツールに貼り付ける」といった手作業の方法を紹介していました。2026年現在、そのやり方はほぼ過去のものになったので、現状に合わせて全面的に書き直しました。

結論から言うと、今は3つともビルドツールとフレームワークがほぼ自動でやってくれます。手作業での最適化が必要な場面は限られていて、大事なのは「自分の環境で何が自動化されているか」を知っておくことです。

圧縮(minify):ビルドツールが自動でやる時代

ViteやNext.js、Astroなど、現在主流のビルドツールは、本番ビルドでCSSを自動的に圧縮します。設定すら不要です。かつて紹介していたオンライン圧縮ツールやエディタ拡張の出番は、ビルド工程のない素のHTMLサイトくらいになりました。

ところで、圧縮でどれくらい小さくなるものなのか、Bootstrap 5.3.8のCSSで実測してみました。

bootstrap.css(元ファイル)     280,311 bytes(gzip後 33,860)
公式の bootstrap.min.css        232,111 bytes(gzip後 31,078)
Lightning CSS で圧縮            228,703 bytes(gzip後 30,728)
cssnano で圧縮                  230,447 bytes(gzip後 31,056)

ファイル単体では約18%小さくなりますが、gzip配信後の差は9%程度です。圧縮ツール同士の差(Lightning CSSとcssnano)に至っては誤差でした。サーバーがgzipやbrotliで配信しているなら、minifyの効果は「あるに越したことはない」程度。ツール選びで悩む時間がもったいないので、ビルドツールのデフォルトに任せれば十分です。

使われていないCSSの削除:フレームワーク側で解決された

2020年版では「BootstrapのようなCSSフレームワークを使うならPurgeCSSが事実上必須」と書きました。使われないユーティリティクラスが大量にファイルへ残るからです。

この問題は、フレームワーク側の進化でほぼ解決されました。Tailwind CSSはv3以降のJITエンジンで「実際に使ったクラスだけを生成する」方式になり、「削除」という工程そのものが不要になっています。

実例として、このブログはTailwind CSS(v4)で作っていますが、サイト全体のCSSは44KB、gzip配信後は約8KBです。Bootstrapをまるごと読み込むとgzip後でも30KB超あることを考えると、「あとから削除する」より「最初から作らない」方が圧倒的に効率的だと分かります。

古いプロジェクトでBootstrapなどを使い続けている場合は、今もPurgeCSSが選択肢になります。ただ、新規で作るなら「使った分だけ生成される」仕組みのフレームワークを選ぶ方が筋が良いと思います。

インライン化:これも自動化されている

最初に表示される画面に必要なCSSだけを<style>タグでHTMLに埋め込み、残りをあとから読み込む。いわゆるクリティカルCSSの考え方です。

これも現在は、フレームワークが面倒を見てくれる領域になりました。例えばAstroは、4KB未満のCSSをデフォルトで自動的にインライン化します(build.inlineStylesheets、デフォルト値はauto)。小さいCSSはHTTPリクエスト1回ぶん得をして、大きいCSSはキャッシュの効く外部ファイルのまま、という合理的な挙動です。

手動でクリティカルCSSを抽出する手法もありますが、管理の手間に対して効果が見合うケースは少なく、よほど表示速度がお金に直結する大規模サイトやLPでもない限り、フレームワークのデフォルトで十分です。

2020年にはこの3つはどれも「開発者が手を動かす作業」でしたが、2026年にはどれも「ツールの仕事」になりました。残った人間の仕事は、重いCSSを書かないことと、たまに計測して確認することくらいです。