今まで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
コメントが承認されるまで時間がかかります。