Gulpのすすめ

f:id:tani-gaki:20161120120639p:plain

お疲れ様です。谷垣です。
今回(といっても初回ですが)はタスクランナーのgulpが便利でよいですよということで紹介をしたいと思います。

gulp.js - the streaming build system


1. なにができるの?

簡単に言うとコーディングのあれやこれやを自動でやってくれる「無くてもいいんだけどあったら便利だよね」という感じのツールです。

プラグインを突っ込んで機能を追加する形になりますが、僕の環境では

  1. css周り(Sass, 自動プレフィックス)
  2. ファイル保存時にブラウザでリアルタイムプレビュー
  3. phpみたいにhtml(ejs)をパーツ化→インクルード
  4. html, css, jsのソースを圧縮・整形
  5. スタイルガイドの作成(試行中)

という用途で使用しています。

その他にも画像を自動で圧縮してくれたり、構文をチェックしてくれたり、cssで使われていないゴミセレクタを削除してくれたり、いろんなプラグインがあります。


2. 使ってみて実際どう?

便利だなーと思ってます。
特にブラウザの自動更新とejsが良い。
新規サイトを作るときには毎回gulpプラグインのインストールが必要ですが、その手間を考えても積極的におすすめしたいレベル。


3. やってみる

3-1. node.jsをインスコ

node.jsが必要なのでいれてください。
バージョンによってプラグインのエラーが出たりするので、nodistでインスコすると便利です。

参考
node.js インストール備忘録(windows7) - Qiita


3-2. gulpをグローバルにインスコ

コマンドプロンプト立ち上げて

npm install -g gulp

と打ってエンター。
無事インストールされると

gulp -v

でバージョンが表示されます。


3-3. gulpをプロジェクトフォルダにインスコ

グローバルにインストールしたのとは別に、プロジェクトのフォルダ単位でもgulpをインストールします。

プロジェクトのルートにしたいフォルダで
「shift + 右クリック」→「コマンドウィンドウをここで開く」して、

npm install gulp --save-dev

と打ってエンターマン。
「node_modules」とかいうフォルダが生成されます。

これより以下のコマンドは全部、このルートにしたいフォルダで打ち込んでください。


3-4. package.jsonを作成

次にpackage.jsonを作成します。
この後入れていくプラグインの情報などがこのファイルに書かれていきます。

コマンドプロンプト

npm init

と叩くと色々聞かれるので、とりあえずエンターレンダーしましょう。
無事ファイルが作成されたらOKです。
一度作ったファイルは使い回しできるので、自分用のpackage.jsonを作っておくと幸せです。


3-5. プラグインインスコ

ではいよいよプラグインを入れましょう。
とりあえず試しにSassを使えるようにしてみます。
コマンドプロンプト

npm install gulp-sass --save-dev

と叩きます。
これでgulp-sassがインストールされました。


3-6. gulpfile.jsを作成

最後にプラグインを動かすための記述を、gulpfile.jsというファイルを作ってそこに書いていきます。
Sassのコンパイルを行う最低限のソースを書いてみました。ディレクトリ構造も下記の通り合わせて下さい。

gulpfile.js

var gulp = require('gulp'), // gulp本体
  sass = require('gulp-sass'); // sassプラグイン

gulp.task('default', function() { // タスクのコマンド名(gulp)
  gulp
    .src('src/scss/**/*.scss') // 'src/scss/'以下の全ての.scssファイルを対象にして、
    .pipe(sass()) // Sassコンパイルするよ。
    .pipe(gulp.dest('dist/css')); // コンパイルしたのは'dist/css/'以下に吐き出すよ。
});
プロジェクトフォルダ/
│ ├ package.json
│ └ gulpfile.js
├ src/ (作業フォルダ)
│ └ sass/
│   └ hoge.scss
└ dist/ (出力フォルダ)
  └ css/

これで準備OKです。


3-7. タスクを動かしてみる

'src/sass/hoge.scss'に適当に何か書いて、コマンドプロンプト上で

gulp

と打ち込んで下さい。
うまくいくと'dist/css/hoge.css'が作成されます。

タスクを走らせるコマンド名は自由に変えることができて、
'default'の場合は'gulp'だけでタスクを呼び出せます。
例えば'default'を'sass'に変えた場合は、コマンドは

gulp sass

になります。
使うタスク毎にコマンド名を変えておくと良い感じですね。


4. もう少し便利に

今のままだといちいちコマンド打ってコンパイルしなきゃいけないので、
自動コンパイルにもしてみましょう。
gulpfile.jsを書き換えます。

var gulp = require('gulp'), // gulp本体
  sass = require('gulp-sass'); // sassプラグイン

gulp.task('sass', function() { // タスクのコマンド名(sass)
  gulp
    .src('src/scss/**/*.scss') // 'src/scss/'以下の全ての.scssファイルを対象にして、
    .pipe(sass()) // Sassコンパイルするよ。
    .pipe(gulp.dest('dist/css')); // コンパイルしたのは'dist/css/'以下に吐き出すよ。
});

gulp.task('default', function(){ // タスクのコマンド名(gulp)
  gulp.watch('src/scss/**/*.scss', ['sass']); // 'src/scss/'以下の.scssファイルに変更があったら、コマンド'sass'を走らせるよ。
});

'gulp.watch'はファイルの変更を監視する機能です。

タスクを実行してみます。

gulp

これでファイルの監視が始まりました。
'src/sass/hoge.scss'を編集して保存すると、自動的に'dist/css/hoge.css'が更新されます。


5. もっと便利に

じゃあBrowsersyncも入れてみます。
Browsersyncはブラウザでのプレビュー環境をつくり、監視しているhtmlやcss、jsに変更があると自動的に更新をかけてくれるやつです。

npm install browser-sync --save-dev

でインストールします。
gulpfile.jsとディレクトリ構造は以下。
ついでにブラウザ表示用のindex.htmlも作っておいてください。

var gulp = require('gulp'), // gulp本体
  sass = require('gulp-sass'), // sassプラグイン
  browser = require('browser-sync'); // Browsersyncプラグイン

gulp.task('server', function() { // タスクのコマンド名(server)
  browser({ // Browsersyncを起動
    server: {
      baseDir: 'dist' // このディレクトリをルートとする。
    }
  });
});

gulp.task('sass', function() { // タスクのコマンド名(sass)
  gulp
    .src('src/scss/**/*.scss') // 'src/scss/'以下の全ての.scssファイルを対象にして、
    .pipe(sass()) // Sassコンパイルするよ。
    .pipe(gulp.dest('dist/css')) // コンパイルしたのは'dist/css/'以下に吐き出すよ。
    .pipe(browser.reload({ // ブラウザのリロードを有効にする。
      stream: true
    }));
});

gulp.task('watch', function() { // タスクのコマンド名(watch)
  gulp.watch('src/scss/**/*.scss', ['sass']); // sassファイルの監視コマンド
});

gulp.task('default', ['watch', 'server']); // タスクのコマンド名(gulp)
プロジェクトフォルダ/
│ ├ package.json
│ └ gulpfile.js
├ src/ (作業フォルダ)
│ └ sass/
│   └ hoge.scss
└ dist/ (出力フォルダ)
  ├ index.html
  └ css/


「gulp」を叩くと、localhost:3000をURLにしてブラウザが立ち上がります。
index.htmlが正しく書かれていたら、それが表示されているはずです。
この状態でhoge.scssを変更・保存すると、自動的にブラウザがリロードされて新しく書いたスタイルが適応されます。


6. まとめ

Sassのコンパイルやベンダープレフィックスの追加、ブラウザでのライブプレビューなどが機能としてあるエディターもありますが、「エディターは編集するもの」と「タスクランナーは便利機能を追加するもの」と住み分けをすることで、エディターの種類に囚われずに制作環境を保持できるのは大きなメリットかなーと思っています。
最近のエディターは打鍵の早さに追いついてこないものもあったりなかったりするらしいので…。

次回は僕の使っているgulpのプラグインを紹介しようと思います。