autoprefixer、cssnano、postcss、purify-css はすべてCSSの処理・最適化に関わるnpmパッケージですが、それぞれ役割が異なります。postcss はCSSを変換するためのプラットフォームであり、autoprefixer と cssnano はそのプラグインとして動作し、それぞれベンダープレフィックスの自動付与とCSSの圧縮を担当します。一方、purify-css は未使用のCSSを削除するスタンドアロンツールでしたが、現在は非推奨となっており、新規プロジェクトでの使用は推奨されていません。これらのツールは、モダンなフロントエンドビルドパイプラインにおいて、CSSの互換性・サイズ・保守性を向上させるために重要です。
現代のフロントエンド開発では、CSSを効率的に処理・最適化することがパフォーマンスやメンテナンス性に直結します。ここでは、autoprefixer、cssnano、postcss、purify-css の4つの主要なnpmパッケージを、実際の開発現場での使い方を中心に深く比較します。
まず、これらのパッケージは互いに独立しているわけではありません。特に重要なのは PostCSS です。
postcss は、CSSを変換するためのプラットフォーム(エンジン)です。単体では何もしませんが、プラグインを組み込むことで強力な機能を提供します。autoprefixer と cssnano は、どちらも PostCSSのプラグインとして動作します。purify-css はPostCSSとは無関係で、未使用CSSを削除するスタンドアロンツールです(ただし、現在は非推奨)。つまり、実際のプロジェクトでは postcss を中心に、autoprefixer や cssnano をプラグインとして使うのが一般的です。
postcss は、CSSをAST(抽象構文木)として解析し、JavaScriptで操作できるようにするツールです。これにより、カスタムルールや既存プラグインを使ってCSSを変換できます。
// postcss.config.js
module.exports = {
plugins: [
require('autoprefixer'),
require('cssnano')
]
};
この設定だけで、ベンダープレフィックスの自動付与とCSSの圧縮が可能になります。PostCSS自体は「何をするか」を決めません — 全てはプラグイン次第です。
autoprefixer は、指定したブラウザサポート範囲に基づいて、必要なベンダープレフィックス(例:-webkit-、-moz-)を自動で追加します。
/* 入力CSS */
.example {
display: flex;
transition: all 0.3s;
}
/* 出力CSS(古いブラウザ向け) */
.example {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-transition: all 0.3s;
transition: all 0.3s;
}
ブラウザターゲットは .browserslistrc ファイルや package.json で定義します:
// .browserslistrc
> 1%
last 2 versions
Autoprefixerを使うことで、開発者は手動でプレフィックスを書く必要がなくなり、CSSが常に最新かつ安全になります。
cssnano は、不要な空白・コメント・重複ルールなどを削除し、CSSファイルを最小化します。これはプロダクションビルドでのみ有効です。
/* 入力CSS */
.button {
/* ボタンスタイル */
color: #ffffff;
background-color: #000000;
padding: 10px 20px;
}
.button {
color: white; /* 重複宣言 */
}
/* 出力CSS(圧縮後) */
.button{color:#fff;background:#000;padding:10px 20px}
cssnano はPostCSSプラグインとして動作し、以下のように設定します:
// postcss.config.js
module.exports = {
plugins: [
require('cssnano')({
preset: 'default'
})
]
};
注意点として、cssnano は「安全な最適化」のみを行うよう設計されていますが、一部の高度な最適化(例:calc() の簡略化)はオプトインが必要です。
purify-css は、HTMLやJavaScriptファイルをスキャンして、実際に使われているCSSセレクタだけを残し、それ以外を削除するツールでした。
// purify-css の使用例(非推奨)
const purify = require('purify-css');
purify(['index.html', 'app.js'], ['styles.css'], {
output: 'purified.css'
});
しかし、公式npmページおよびGitHubリポジトリによると、purify-css は現在非推奨(deprecated)であり、新規プロジェクトでの使用は推奨されていません。代わりに、より現代的で信頼性の高い代替手段(例:PurgeCSS)が広く使われています。
PurifyCSSには以下のような問題がありました:
class="btn-${type}")を正しく検出できないそのため、未使用CSSの削除が必要な場合は、PurgeCSS(PostCSSプラグインとしても利用可能)を検討すべきです。
典型的なビルドパイプラインでは、これらを以下のように組み合わせます:
Webpackでの例:
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
['autoprefixer', {}],
process.env.NODE_ENV === 'production' ? ['cssnano', {}] : null
].filter(Boolean)
}
}
}
]
}
]
}
};
このように、postcss をハブとして、autoprefixer と cssnano を条件付きで適用するのがベストプラクティスです。
もし未使用CSSの削除が必要なら、PurgeCSS を使うことを強く推奨します。これはPostCSSプラグインとしても利用でき、Vue CLIやTailwind CSSなど多くのツールで標準採用されています。
// postcss.config.js with PurgeCSS
module.exports = {
plugins: [
require('@fullhuman/postcss-purgecss')({
content: ['./src/**/*.html', './src/**/*.vue', './src/**/*.js'],
defaultExtractor: content => content.match(/[A-Za-z0-9-_:/]+/g) || []
})
]
};
PurgeCSSは動的クラスにも対応しており、安全性と精度が大幅に向上しています。
| パッケージ | 役割 | 推奨度 | 備考 |
|---|---|---|---|
postcss | CSS変換エンジン | ✅ 必須 | 他のツールの基盤 |
autoprefixer | ベンダープレフィックス自動追加 | ✅ 推奨 | PostCSSプラグイン |
cssnano | CSS圧縮 | ✅ 推奨(プロダクション時) | PostCSSプラグイン |
purify-css | 未使用CSS削除 | ❌ 非推奨 | 代わりにPurgeCSSを使用 |
postcss を導入し、その上に autoprefixer と cssnano を乗せる。purify-css は絶対に使わない。未使用CSSの削除が必要なら PurgeCSS を検討する。これらのツールを正しく組み合わせることで、高速で保守性の高いCSSワークフローを構築できます。
autoprefixer は、複数のブラウザでCSSが正しく動作するように、必要なベンダープレフィックスを自動で追加したい場合に選択します。特に、FlexboxやGrid、Transformなどの新しいCSS機能を使う際に必須です。PostCSSのプラグインとして簡単に統合でき、.browserslistrc でターゲットブラウザを一元管理できるため、チーム開発でも安全に使えます。
cssnano は、プロダクション環境でCSSファイルのサイズを最小化したい場合に選択します。空白・コメント・重複ルールの削除だけでなく、色の省略(white → #fff)や不要なゼロの削除など、安全な最適化を多数提供します。ただし、開発環境では可読性のため無効にするのが一般的です。
postcss は、CSSに対してプログラムによる変換や分析を行いたい場合に選択します。単体では機能しませんが、autoprefixer や cssnano など豊富なプラグインエコシステムを活用することで、Linting、変数定義、ネスト展開など多様な処理が可能です。モダンなCSSワークフローの基盤として、ほぼ全てのプロジェクトで導入が推奨されます。
purify-css は非推奨のパッケージであるため、新規プロジェクトでは使用しないでください。未使用CSSの削除が必要な場合は、代わりに PurgeCSS を検討すべきです。purify-css は動的クラス名やJavaScriptフレームワークとの連携に問題があり、長期間メンテナンスされていません。既存プロジェクトで使用している場合も、早急に代替ツールへの移行を検討してください。
PostCSS plugin to parse CSS and add vendor prefixes to CSS rules using values from Can I Use. It is recommended by Google and used in Twitter and Alibaba.
Write your CSS rules without vendor prefixes (in fact, forget about them entirely):
::placeholder {
color: gray;
}
.image {
width: stretch;
}
Autoprefixer will use the data based on current browser popularity and property support to apply prefixes for you. You can try the interactive demo of Autoprefixer.
::-moz-placeholder {
color: gray;
}
::placeholder {
color: gray;
}
.image {
width: -webkit-fill-available;
width: -moz-available;
width: stretch;
}
Twitter account for news and releases: @autoprefixer.
Read full docs here.