【gulp4】gulp入門 使い方を学ぼう④ – watch – windows10版

html/css
この記事は約9分で読めます。
スポンサーリンク

はじめに

前回はgulpのseriesとparallelという機能を使って複数コマンドを実行させるところまで説明しました。

まだの方はこちらを参照してください。

今回はgulpのwatchという機能を使って任意のファイルを監視してタスクを実行させるやり方を説明していきます。

対象者
  • gulpの環境構築ができている方
  • gulpに興味がある方

その他gulpのおすすめのプラグインはこちら

gulpの使い方まとめについてはこちら。

gulpfile.jsのテンプレート紹介についてはこちら。

それではwatchの使い方に移ります。

スポンサーリンク

watchとは

watch機能は任意のファイルやフォルダを監視し、変更があったらタスクを実行してくれる機能になります。

何らかのファイルを変更した場合に、その都度手を止めてgulpのコマンドを実行するのは面倒ですよね。

watch機能を使えば一度実行すると勝手にファイルの変更を検出してくれて自動でコマンドを実行してくれるようになります。

スポンサーリンク

ディレクトリ構成

基本的には前回のディレクトリ構成と同じになります。

またsrcフォルダの中にindex1.html index2.html index3.html を作成します。

test
├ node_modules
├ dist
├ src
│ ├ index1.html
│ ├ index2.html
│ └ index3.html
├ gulpfile.js
├ package-lock.json
└ package.json

今回のゴールは以下です。

gulpのコマンドを実行してファイルの変更を検出するとdistフォルダの中にsrcフォルダindex1.html index2.html index3.html をコピーする

スポンサーリンク

gulpfile.jsを編集する

まずは完成形を記載しておきます。

//----------------------------------------------------------------------
//  モード
//----------------------------------------------------------------------
"use strict";

//----------------------------------------------------------------------
//  モジュール読み込み
//----------------------------------------------------------------------
const gulp = require("gulp");
const { src, dest, series, parallel, watch } = require("gulp");

//----------------------------------------------------------------------
//  関数定義
//----------------------------------------------------------------------
function copy1(done) {
  src("./src/index1.html")
  .pipe(dest("./dist/"));

  done();
}

function copy2(done) {
  src("./src/index2.html")
  .pipe(dest("./dist/"));

  done();
}

function copy3(done) {
  src("./src/index3.html")
  .pipe(dest("./dist/"));

  done();
}

//----------------------------------------------------------------------
//  watch関数定義
//----------------------------------------------------------------------
function watchTask(done) {
// watch( "監視したいファイル(またはフォルダ)を指定" , 処理 );
  watch("./src/**" , series(copy2,copy3));
}


//----------------------------------------------------------------------
//  タスク定義
//----------------------------------------------------------------------
exports.watch = series(copy1,watchTask);

/************************************************************************/
/*  END OF FILE                                                         */
/************************************************************************/

それではセクションごとに説明していきます。

関数定義

//----------------------------------------------------------------------
//  関数定義
//----------------------------------------------------------------------
function copy1(done) {
  src("./src/index1.html")
  .pipe(dest("./dist/"));

  done();
}

function copy2(done) {
  src("./src/index2.html")
  .pipe(dest("./dist/"));

  done();
}

function copy3(done) {
  src("./src/index3.html")
  .pipe(dest("./dist/"));

  done();
}

関数の定義をしています。

念のためそれぞれの関数の処理内容を以下にまとめておきます。

関数名処理内容
copy1index1.htmlをdistフォルダへコピー
copy2index2.htmlをdistフォルダへコピー
copy3index3.htmlをdistフォルダへコピー

watch関数定義

//----------------------------------------------------------------------
//  watch関数定義
//----------------------------------------------------------------------
function watchTask(done) {
// watch( "監視したいファイル(またはフォルダ)を指定" , 処理 );
  watch("./src/**" , series(copy2,copy3));
}

watch機能を使った関数を定義しています。

watch機能には以下2つを指定します。

  • 監視したいファイル(またはフォルダ)
  • 処理

ここではsrcフォルダ のいずれかが変更されるとcopy2タスク copy3タスク が実行されるようにしています。

watch機能で実行できるタスクは複数指定可能です。

タスク定義

//----------------------------------------------------------------------
//  タスク定義
//----------------------------------------------------------------------
exports.watch = series(copy1,watchTask);

実行するコマンドを「watch」としました。

「watch」コマンドを実行すると、「copy1」タスクと「watchTask」タスクを実行します。

「copy1」タスクを実行してから、ファイルの監視を始めます。

watch機能でファイル監視をする前にタスクを実行することも可能です。

ただしファイル監視後にタスクを定義しても実行されないので注意しましょう。

スポンサーリンク

コマンドを実行しよう

それではgulpでwatchコマンドを実行しましょう。

npx gulp watch

「npx」のコマンド使用時にエラーが出る方はこちらを参照してください。

gulpのインストール先が異なる可能性があります。

以下のように「copy1」タスクは実行完了していますが、「watchTask」タスクは完了せず監視状態に入ります

[00:00:00] Starting 'watch'...
[00:00:00] Starting 'copy1'...
[00:00:00] Finished 'copy1' after 14 ms
[00:00:00] Starting 'watchTask'...

正しくwatch機能が働いています。

この状態でsrcフォルダ のいずれかのファイルを変更してみましょう。

以下のように変更を検出してタスクが実行されるはずです。

[00:00:00] Starting 'copy2'...
[00:00:00] Finished 'copy2' after 6.37 ms
[00:00:00] Starting 'copy3'...
[00:00:00] Finished 'copy3' after 2.66 ms
スポンサーリンク

watch機能を終了させる

watch機能を使ってファイル監視をする方法について説明しました。

ファイル監視を終了させたい場合は以下のコマンドをターミナルで入力してください。

  1. 「Ctrl」 + 「c」キー
  2. 「y」 キー

それではファイル監視を終了させていきましょう。

ターミナルで「Ctrl」 + 「c」キーを入力すると以下のような表示がされます。

^Cバッチ ジョブを終了しますか (Y/N)?

「y」キーを入力してファイル監視を終了させましょう。

^Cバッチ ジョブを終了しますか (Y/N)? y
スポンサーリンク

おわりに

以上gulpのwatchという機能を使って任意のファイルを監視してタスクを実行させるやり方を説明しました。

いかがだったでしょうか。

watch機能を上手に使えば面倒な作業もgulp側で勝手に処理してくれるので非常に便利になります。

コメント

タイトルとURLをコピーしました