プログラミング

プログラミング

PR

プログラミング初心者でも使える!CSS変換ツール「PostCSS」を使って、JavaScriptプラグインでCSSを簡単に変換する方法

KeyCDN

We are a Swiss registered company headquartered in Winterthur, Switzerland. We’re a passionate team operating a high-performance content delivery network (CDN).

本記事は、PostCSS - Transforming Your CSS with JavaScript
翻訳・再構成したものです。
配信元または著者の許可を得て配信しています。

3,881 views

読了時間 : 約8分19秒

CSSをより早く、効率的にする為のツールは、次々と新しいものが作られています。PostCSSは2013年に発表されました。しかし、バズが多くあり、2015年の半ばまで使われませんでした。2018年には、多くの開発者に使われるようになりました。プロジェクト自体は、今でも多くの人に支持されています。

 

今回、PostCSSとは何かという簡単な説明と、あなたのワークフローを合理化するためにどう使えばいいかをお教えします。あわせて、CSSプリプロセッサーとの違いについて書いてある Sass vs LESS.の記事も見てください。

 

 

PostCSSとはなにか?

 

PostCSSは、 Andrey SitnikとAutoprefixerを開発した人達で作られた、CSSをJavaScriptで使ったり、形を変えたりするためのものです。一般的に後処理に使われますが、PostCSSを前処理に使う人もいます。David Clark がその事についてまとめています。

 

ツール自体もプラグインもSass LESSとは違います。開発者が使いやすいスタールシートを見やすいCSSに変えるプラグインなので、プリプロセッサーに使うものを持っているかもしれない。

 

なにがあっても、この違いを知って、どのように動くかを知ることが大切です。 PostCSSは、Sass や LESSを変換する必要がありません。あなたが好きなものを使うことができ、プラグインと一緒にPostCSS を使うことができます。(これは、ワークフローを複雑にしてしまうかもしれません)PostCSS自体は、基本的にAPIです。これらのプラグインは、あなたのCSSを精査し、 variables、mixins、transpile future CSS syntax、inline imagesなどをサポートします。それを考えると、モジュール式のセットアップといえます。

 

PostCSSは、開発に12ヶ月以上かかりました。下の npmを見ると、ダウンロード数が日増しに多くなっているのがわかります。合計で、2014年12月31日から2016年1月28日の間に、21,757,724 ダウンロードされています。

 

 

 

そして、Googleトレンドを見ると、急上昇しています。

 

 

 

従来のプリプロセッサーの欠点

 

従来のプリプロセッサーには、Sass、 LESS、 Stylusのようにいくつか欠点や制限があります。それらには、次のようなことがあります

 

  • たいていのプリプロセッサーは、W3Cと互換性がありません。
  •  Sass やLESSは、重くなります。そして、使っていないコードを削除しなければいけません。
  • 他に追加したいものが出てきた時、拡張することができません。他のプロセスを作らなければいけません。

 

 

 

PostCSSを使う利点

 

 

一度、CSSを覚えると、プリプロセッサーにPostCSSを使う時に便利で、他に何も必要なくなります。第一に、CSSを新しく構築するのが楽です。一番大きい利点は、plugin ecosystemが入っている事です。200以上のプラグインがあり、全リストがここで見れます。

 

 

 

 

その他のPostCSSを使う利点は、独自のプラグインと機能をつくり、機能を拡張することが簡単にできることです。CSSを好きなように変えて、ワークフローに入れることができます。

 

他の利点は、PostCSSが信じられないくらい速いことです。編集する際、あなたは気がつかないと思いますが、言っておかなければいけない点です。

 

PostCSS:   36 ms
libsass:   110 ms  (3.0 times slower)
Less:      157 ms  (4.3 times slower)
Stylus:    286 ms  (7.9 times slower)
Ruby Sass: 1092 ms (30.1 times slower)

 

PostCSS にはモジュールも入っています。

 

 

 

CSSをインプットする

 

.name {
    color: gray;
}

 

CSSをアウトプットする

 

.Logo__name__SVK0g {
    color: gray;
}

 

最後に、CSSのエラーを削除できます。スタイルリントを使って削除することができます。下の例を見てください。

 

CSSをインプットする

 

a {
    color: #d3;
}

 

CSSをアウトプットする

 

app.css
2:10 Invalid hex color

PostCSSとプリプロセッサーの違い

 

あなたが心配している、PostCSSとSassをどう使い分けるかについて、例をお見せします。一般的にSassは、remのように単一で変換するときに使います。

 

/* input */
.selector { margin-bottom: rem(20px); }

/* output, assuming base font size is 1rem */
.selector { margin-bottom: 1.25rem; }

 

 

PostCSS のpostcss-pxtorem プラグインを使うと、コードを使う必要がなくなります。そして、自動的に変換してくれます。

 

/* input */
.selector { margin-bottom: 20px; }

/* output, assuming base font size is 1rem */
.selector { margin-bottom: 1.25rem; }

PostCSSを使い始める

 

Grunt or Gulpをもう使わないのであれば、PostCSSをはじめやすいです。2ステップだけではじめることができます。

 

 

  1. ワークフローにPostCSSの拡張子を入れる。 GulpやGruntなどであっても入れてください。
  2. プラグインを選んで、PostCSSに入れる。

 

 

Gulp

 

PostCSSをGulpと一緒にセットアップする時は、このコマンドで使えるようになります。これは、gulp-postcssを使っています。もちろん、Node.js、NPM、 Git がインストールされている事が必要です。

 

npm install --save-dev gulp-postcss

 

 

 

そして、わけたPostCSSプラグインをインストールしてください。たとえば、次のようにしてください。

 

var postcss = require('gulp-postcss');
var gulp = require('gulp');
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');

gulp.task('css', function () {
    var processors = [
        autoprefixer({browsers: ['last 1 version']}),
        cssnano(),
    ];
    return gulp.src('./src/*.css')
        .pipe(postcss(processors))
        .pipe(gulp.dest('./dest'));
});

Grunt

 

 

PostCSS を Gruntと一緒にセットアップする時は、次のコマンドを入れてください。これは、 grunt-postcssを使います。もちろん、 Node.js,、NPM、 Gitがインストールされている事が必要です。

 

npm install grunt-postcss --save-dev

 

 

一度、プラグインをインストールしておくと、Gruntファイルを使えないようにする必要がなくなります。

 

grunt.loadNpmTasks('grunt-postcss');

 

そして、PostCSSプラグインをインストールします。たとえば、次のようになります。

 

npm install grunt-postcss pixrem autoprefixer cssnano
grunt.initConfig({
    postcss: {
        options: {
            map: true, // inline sourcemaps

            // or
            map: {
                inline: false, // save all sourcemaps as separate files...
                annotation: 'dist/css/maps/' // ...to the specified directory
            },

            processors: [
                require('pixrem')(), // add fallbacks for rem units
                require('autoprefixer')({browsers: 'last 2 versions'}), // add vendor prefixes
                require('cssnano')() // minify the result
            ]
        },
        dist: {
            src: 'css/*.css'
        }
    }
});

 

 

 

 

PostCSS の例

 

 

いくつかPostCSSプラグインを紹介します。どのようにCSSを変えるか見てください。

 

 

autoprefixer

 

autoprefixerを紹介します。このプラグインは、とても正確です。これは、あなたのCSSを解析して、 Can I UseからCSSにベンダーを入れてくれます。いちいち乱数を覚えておく必要がありません。

 

CSSにインプットする

 

.example {
    display: flex;
    transition: all .5s;
    user-select: none;
    background: linear-gradient(to bottom, white, black);
}

 

CSSにアウトプットする

 

.example {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-transition: all .5s;
    transition: all .5s;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background: -webkit-linear-gradient(top, white, black);
    background: linear-gradient(to bottom, white, black);
}

 

 

 

 

cssnext

 

cssnext を使ったPostCSSプラグインの例を紹介します。これは、CSSの互換性を高めます。なので、ブラウザのサポートを待っている必要がなくなります。

 

 

 

CSSをインプットする

 

:root {
    --red: #d33;
}
a {
    &:hover {
        color: color(var(--red) a(54%));
    }
}

 

 

CSSをアウトプットする

 

a:hover {
    color: #dd3333;
    color: rgba(221, 51, 51, 0.54);
}

 

イメージ、フォント、リンター、シンタックス、可読性など、それぞれのカテゴリーで1000のプラグインがあります。これらを全部取り上げると、一日かかります。

 

 

 

Active Development

 

PostCSSはとても効果的で、 GitHubでは一般的です。10000以上のスターと500強のフォークがあります。

 

GitHub activity POSTCSS
# of open issues 20
# of pending pull requests 2
# of commits in the last 30 days 58

 

 

PostCSSのまとめ

 

これまで述べたように、PostCSSはCSSをJavaScriptに変換するのに、効果的なツールです。これは、プリプロセッサーの代わりに使ったり、一緒に使ったりすることができます。プラグインが大きい場合、開発チームにコードを教えるのが簡単になります。

おすすめ新着記事

おすすめタグ