今までSassやEJS、watchを試してきましたが、今回はそれ以外の便利そうなプラグインを色々インストールして試してみます。
今までのまとめ
今までやったことを簡単にまとめてみます。
作業ディレクトリに移動。
cd 作業ディレクトリ名
プロジェクトファイルの作成。
npm init
Gulp.jsをローカルにインストール。
npm install gulp@3.8.11 --save-dev
Sassのインストール。
npm install gulp-sass --save-dev
EJSのインストール。
npm install gulp-ejs --save-dev
gulp-plumberのインストール。
npm install gulp-plumber --save-dev
gulpfile.jsファイルを作成し、以下のように記述。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')); }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
watchの実行。
gulp watch
これで、SassやEJSファイルを変更すると自動でコンパイルされるようになります。
ベンダープレフィックスの自動追加
ベンダープレフィックスを自動で付与してくれるautoprefixerをインストールしてみます。
npm install gulp-autoprefixer --save-dev
gulpfile.jsファイルのSass処理部分にautoprefixerを追加します。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); var autoprefixer = require('gulp-autoprefixer'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')); }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
試しにdisplay: flex;とtransformを入力してコンパイルしてみます。
Sass
.test { display: flex; transform: translate(50px, 50px); }
コンパイル後は以下のようになります。
CSS
.test { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-transform: translate(50px, 50px); -ms-transform: translate(50px, 50px); transform: translate(50px, 50px); }
autoprefixerはCan I use… Support tables for HTML5, CSS3, etcのサイト情報をもとにベンダープレフィックスが必要かチェックしているそうです。
画像の最適化
画像(jpg,png,gif,svg)をロスレスで軽量化してくれるimageminをインストールしてみます。
npm install gulp-imagemin --save-dev
合わせて、より圧縮率の高いpngquantをインストールして使ってみます。
npm install imagemin-pngquant --save-dev
gulpfile.jsファイルにimageminの処理を追加します。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); var autoprefixer = require('gulp-autoprefixer'); var imagemin = require('gulp-imagemin'); var pngquant = require('imagemin-pngquant'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')); }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) }); // 画像圧縮処理 gulp.task('imagemin', function() { gulp.src('./img/**/*.+(jpg|jpeg|png|gif|svg)') .pipe(imagemin({ progressive: true, use: [pngquant({quality: '65-80', speed: 1})] })) .pipe(gulp.dest('./img/')); }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
これで使ってみたのですがなぜか、うまく軽量化されませんでした。
画像の最適化2
拡張子ごとに個別のプラグインを使用してみます。
gifの軽量化。
npm install imagemin-gifsicle --save-dev
jpgの軽量化。
npm install imagemin-jpegtran --save-dev
pngの軽量化。
npm install imagemin-optipng --save-dev
svgの軽量化。
npm install imagemin-svgo --save-dev
gulpfile.jsファイルに処理を追加します。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); var autoprefixer = require('gulp-autoprefixer'); var gifsicle = require('imagemin-gifsicle'); var jpegtran = require('imagemin-jpegtran'); var optipng = require('imagemin-optipng'); var svgo = require('imagemin-svgo'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')); }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) }); // 画像圧縮処理 gulp.task('image', function() { return gulp.src('./img/**/*') .pipe(gifsicle()()) .pipe(jpegtran()()) .pipe(optipng()()) .pipe(svgo()()) .pipe(gulp.dest('./img/')); }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
一応圧縮はできたのですが、実際に使う場合はオプションで圧縮率の調整がいりそうです。
ブラウザの自動更新
ブラウザの自動更新、複数のブラウザを同期するbrowser-syncをインストールしてみます。
npm install browser-sync --save-dev
gulpfile.jsファイルに処理を追加します。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); var autoprefixer = require('gulp-autoprefixer'); var gifsicle = require('imagemin-gifsicle'); var jpegtran = require('imagemin-jpegtran'); var optipng = require('imagemin-optipng'); var svgo = require('imagemin-svgo'); var browserSync = require('browser-sync'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')) .pipe(browserSync.reload({stream:true})) }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) .pipe(browserSync.reload({stream:true})) }); // 画像圧縮処理 gulp.task('image', function() { return gulp.src('./img/**/*') .pipe(gifsicle()()) .pipe(jpegtran()()) .pipe(optipng()()) .pipe(svgo()()) .pipe(gulp.dest('./img/')); }); // ブラウザ更新 gulp.task('browser-sync', function() { browserSync({ server: { baseDir: './' } }); }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); }); // デフォルト gulp.task('default', ['browser-sync'], function() { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
デフォルトのタスクも合わせて作成しました。
gulp
と入力すると、browser-syncが実行され、ブラウザでhttp://localhost:3000/が開かれます。
この状態で別ブラウザでもhttp://localhost:3000/を開くと、スクロールなどが同期されます。
watchも一緒に実行されているので、この状態でファイルを変更すると、ブラウザが自動で更新されるようになります。
スタイルガイドの作成
スタイルガイドジェネレータはいくつかあるみたいですが、今回はstyledoccoを使ってみます。
npm install gulp-styledocco --save-dev
gulpfile.jsファイルに処理を追加します。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); var ejs = require('gulp-ejs'); var autoprefixer = require('gulp-autoprefixer'); var gifsicle = require('imagemin-gifsicle'); var jpegtran = require('imagemin-jpegtran'); var optipng = require('imagemin-optipng'); var svgo = require('imagemin-svgo'); var browserSync = require('browser-sync'); var styledocco = require('gulp-styledocco'); // Sass処理 gulp.task('sass', function () { // Sassファイルのディレクトリ gulp.src('./sass/**/*.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./css')) .pipe(browserSync.reload({stream:true})) // スタイルガイド用 gulp.src('./styleguide/styleguide.scss') .pipe(plumber()) .pipe(sass()) .pipe(autoprefixer()) //コンパイル後のCSSファイル出力先 .pipe(gulp.dest('./styleguide')) .pipe(styledocco({ out: './styleguide', name: 'My Project', 'no-minify': true })) .pipe(browserSync.reload({stream:true})) }); // EJS処理 gulp.task('ejs', function() { // 対象にするファイル gulp.src(['./ejs/**/*.ejs', '!' + './ejs/**/_*.ejs']) .pipe(plumber()) .pipe(ejs()) // 出力先 .pipe(gulp.dest('./')) .pipe(browserSync.reload({stream:true})) }); // 画像圧縮処理 gulp.task('image', function() { return gulp.src('./img/**/*') .pipe(gifsicle()()) .pipe(jpegtran()()) .pipe(optipng()()) .pipe(svgo()()) .pipe(gulp.dest('./img/')); }); // ブラウザ更新 gulp.task('browser-sync', function() { browserSync({ server: { baseDir: './' } }); }); // watch処理 gulp.task('watch', function () { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); }); // デフォルト gulp.task('default', ['browser-sync'], function() { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('ejs/**/*.ejs', ['ejs']); });
今回はstyleguideディレクトリ内に専用のCSSを出力して、スタイルガイドを作成するようにしました。
ただページ用のCSSにスタイルガイド用のコメントが残ってしまうので、どうにかできないか考え中です。
スタイルガイド用の内容は、CSSのコメント(⁄**/)内にマークダウン記法で記述します。
とりあえず使いそうなものだけピックアップしてみます。
# | hXタグ。#の数がXの数になる。 |
---|---|
“` ~ “` | HTMLタグを記述する。複数行になってもOK。 |
今回サンプルで作ったSassは、コンパイル後以下のようになりました。
CSS
@charset "UTF-8"; /* ##レイアウト用モジュール ###画像+テキスト `.l-imgR`の説明文。 ``` <div class="l-imgR"> <img src="http://placehold.it/350x150" alt="" class="l-imgR-image"> <div class="l-imgR-textarea"> <p class="l-imgR-sentence">テキストテキストテキストテキストテキスト</p> </div> </div> ``` */ .l-imgR { overflow: hidden; } .l-imgR .l-imgR-image { float: right; margin: 0 0 15px 15px; } .mt10 { margin-top: 10px; }
とりあえず試してみただけなので、構成やファイルパスなどは使ってみながら調整したいと思います。
【参考サイト】
- Gulp.js入門 – コーディングを10倍速くする環境を作る方法まとめ | 株式会社LIG
- これからはじめるGulp(12):gulp-imageminプラグインを使ったJPEG,PNG,GIF,SVGの最適化 | Webデザイン、フロントエンド系の技術に関する備忘録 – whiskers
- gulp-imageminとpngquantを使って画像圧縮を効率化する | 技術コラム | つみきブログ
- gulp-imagemin
- imagemin-pngquant
- 俺だけのGulp(ガルプ) | ツクメモ – ウェブやアプリをツクるヒトのメモ
- imagemin-gifsicle
- imagemin-jpegtran
- imagemin-optipng
- imagemin-svgo
- これからはじめるGulp(11):ブラウザ間でスクロールやクリック操作を同期できるBrowserSync | Webデザイン、フロントエンド系の技術に関する備忘録 – whiskers
- HTML5 boilerplateをsassでgulpでstyledoccoな感じにしてみた
- » 美しいスタイルガイドが作れるstyleDoccoを使ってみる | isee ウェブに関するブログ
- gulp-styledocco
コメントが承認されるまで時間がかかります。