フロントエンド - CSS・スタイリング

PostCSS ぽすとしーえすえす

CSS変換AutoprefixerプラグインビルドツールTailwind CSSトランスパイル
PostCSSについて教えて

簡単に言うとこんな感じ!

CSSを「プラグインで自由に加工できる変換ツール」だよ!「古いブラウザ用の書き方を自動補完して」「未来の書き方を今使えるようにして」みたいな作業を、差し込むプラグイン次第でなんでもやってくれる、CSS版の魔法の工場なんだ!


PostCSSとは

PostCSSとは、JavaScriptで書かれたCSSの変換ツールで、CSSファイルを読み込んでプラグインで処理し、変換後のCSSを出力するプラットフォームです。2014年にAndrey Sitnikによって公開され、現在では世界中のフロントエンド開発で広く使われています。

PostCSSそのものは「CSSをASTに変換して、プラグインが加工し、また文字列CSSに戻す」というパイプラインを提供するだけで、実際の機能はすべてプラグインが担います。そのため「何でもできる」と同時に「何もしない素の状態でも動く」という柔軟な構造が特徴です。

実務での使われ方はさまざまで、ベンダープレフィックスの自動付与未来のCSS構文の変換コードの最適化(ミニファイ)Tailwind CSS の処理など、現代のWeb開発に欠かせないツールのほとんどがPostCSSを内部で利用しています。


PostCSSの仕組みと構造

PostCSSの処理フローは「読み込み → 解析 → プラグイン加工 → 出力」の4ステップです。

ステップ内容
Parse(解析)CSSテキストをAST(抽象構文木)に変換する
Transform(変換)各プラグインがASTを操作・加工する
Stringify(文字列化)加工されたASTを再びCSSテキストに戻す
Output(出力)変換済みCSSをファイルに書き出す

AST(Abstract Syntax Tree:抽象構文木) とは、CSSの構造をツリー状のデータとして表したもので、プログラムから扱いやすい形になっています。PostCSSはこのASTをプラグインが受け取り、ルールを追加・削除・書き換えする仕組みです。

覚え方

PostCSS」の「Post」は「後処理(ポストプロセス)」のこと。CSSを書いた後に変換・最適化を行うツール、と覚えると名前の意味がつかめるよ!

代表的なプラグイン一覧

プラグイン名役割
Autoprefixer-webkit-などベンダープレフィックスを自動付与
postcss-preset-env最新のCSS仕様を古いブラウザ向けに変換
cssnanoCSSの空白・コメントを削除してファイルを軽量化
Tailwind CSSユーティリティクラスをCSSに変換(内部でPostCSSを使用)
postcss-modulesCSSクラス名をスコープ化(CSS Modules
stylelintCSSの構文・スタイルをチェック

歴史と背景

  • 2013年 — Andrey Sitnik(Evil Martians所属)がプロトタイプを開発開始
  • 2014年 — PostCSS v1.0 として公開。Autoprefixerがキラープラグインとして話題に
  • 2015年 — Webpack・Gulp・Grunt など主要ビルドツールとの連携プラグインが充実
  • 2016年 — Bootstrap 4がSassからPostCSSへの移行を検討(最終的にはSassを継続)
  • 2017〜 — Create React App(CRA)にAutoprefixerがデフォルト統合され一気に普及
  • 2019年 — Tailwind CSS 1.0 がPostCSSプラグインとしてリリース。爆発的に普及
  • 2021年ViteNext.jsなどモダンフレームワークがPostCSSをビルトインで採用
  • 現在 — 週間ダウンロード数は数千万を超え、フロントエンドのデファクトスタンダードに

SassやCSS-in-JSとの比較

PostCSSはしばしばSass(SCSS)やCSS-in-JSと比較されますが、役割が異なります。

ツールカテゴリ特徴
PostCSSCSSポストプロセッサ既存CSSをプラグインで変換。何でもできる汎用基盤
Sass / SCSSCSSプリプロセッサ変数・ネスト・ミックスインなど独自構文でCSSを拡張
CSS-in-JSJS統合スタイリングJavaScript内でCSSを記述。コンポーネントと一体化
Lightning CSS高速CSSツールRust製の高速変換ツール。PostCSSの後継候補の一つ

プリプロセッサ(Sassなど)は「CSSを書く前」に特殊な構文を通常のCSSに変換するのに対し、PostCSSは「CSSを書いた後」に変換・最適化を行います。実際にはSassとPostCSSを組み合わせて使うプロジェクトも多く、競合ではなく補完関係です。

以下はPostCSSの処理フローを図解したものです。

入力 source.css 元のCSSファイル source.scss Sass変換後も可 tailwind.css Tailwind等 PostCSS 処理パイプライン ① Parse(AST変換) CSSを構文ツリーに分解 ② Autoprefixer プレフィックス自動付与 ③ preset-env 最新CSS→旧ブラウザ対応 ④ Stringify(出力) ASTを再びCSSテキストへ 出力 output.css 変換済みCSS プレフィックス付 ブラウザ互換 output.min.css cssnano圧縮済み

postcss.config.js の基本形

// postcss.config.js(プロジェクトルートに置く設定ファイル)
module.exports = {
  plugins: [
    require('autoprefixer'),          // ベンダープレフィックス自動付与
    require('postcss-preset-env')({   // 最新CSS構文を変換
      stage: 2
    }),
    require('cssnano')({              // 本番ビルド時に圧縮
      preset: 'default'
    })
  ]
}

関連する規格・RFC

この用語に関連するIETF RFC・ISO・IEEE規格はありません。PostCSSはW3Cが定めるCSS仕様(CSS Working Group)に準拠しつつ動作しますが、PostCSS自体はオープンソースプロジェクトであり特定の標準規格番号は存在しません。


関連用語

  • Sass / SCSS — CSSプリプロセッサ。変数・ネスト・ミックスインなど独自構文でCSSを拡張
  • Tailwind CSS — ユーティリティファーストのCSSフレームワーク。内部でPostCSSを使用
  • Webpack — JavaScriptのモジュールバンドラー。postcss-loaderと組み合わせて使う
  • Vite — 高速なフロントエンドビルドツール。PostCSSをビルトインでサポート
  • CSS Modules — CSSクラス名をコンポーネントスコープに限定する仕組み
  • Autoprefixer — ベンダープレフィックスを自動付与するPostCSSプラグイン
  • AST(抽象構文木) — プログラムやCSSの構造をツリー状に表現したデータ構造
  • Lightning CSS — Rust製の高速CSS変換ツール。PostCSSの代替候補