![見出し画像](https://assets.st-note.com/production/uploads/images/91792995/rectangle_large_type_2_142f458c58df57765b78adb12e7d6c15.png?width=800)
はじめてのGulp
はじめに
本記事はとりあえずGulpの環境を構築してみようという目的で構築手順を記載しています。Gulpには、色々な機能がありますが、最低限使用する機能を中心に構築しています。
動作環境
Mac M1
Mac Intel
概要
Web開発を効率を行うためのツールです。
Gulpを使うと以下の作業などを全部自動化してくれます。
Sassのコンパイル
CSSの圧縮
ブラウザシンク
(ファイルを編集したら即時にブラウザを更新&反映する自動リロード)ベンダープレフィックスの自動付与
画像の自動圧縮
Babelを使用したJSのコンパイル
webpackと一緒に使ってJSをバンドルして圧縮する
なぜGulpを使うのか?
1〜4のみであれば、VsCodeのDart Sass Complier で十分ですが、5〜7に関しては別のプラグインなどを入れるなど一手間加える必要があります。
また、Dart Sass Complierはエディタに依存するプラグインなので共同開発には向いてません。
その点、Gulpはpackage.jsonとgulpfile.jsを共有させすれば同じ環境設定で開発を行うことができるメリットがあります。
このような理由から共同開発するうえでほぼ必須とも言えます。
Gulpを使うには…
Gulpを使うには以下が必要です。
Gulpをインストールするには、Node.js → npm → gulp という順番で構築していきます。
Node.js
npm
gulp
Node.jsをインストールの前に…
Node.jsをインストールしていくのですが、インストールにはいくつか方法があります。
公式サイト
Homebrew
nodebrew などなど
本記事はHomebrewを使ってnodebrewをインストールしていきます。
nodebrewでNode.jsやnpmのバージョンを切り替えることが可能になり、案件ごとに切替が容易になります。
Homebrew
インストール
nodebrewを使うために、Homebrewというパッケージマネージャをインストールします。
Homebrewの公式サイトにアクセスすると以下の画面が表示されます。
![](https://assets.st-note.com/img/1668997019411-fQSBexyucX.png?width=800)
赤枠のコマンドをコピーして、ターミナルで実行することでhomebrewのインストールを行います。
「Installation successful!」 が表示されれば完了です。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
homebrewインストール後にパスを通すために、インストール時の「Next steps:」に記載されている箇所のコマンドを順次実行します。
以下は実行例になります。 ※○○○はUser名を表しています
$ echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/○○○/.zprofile
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/○○○/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
インストールされているかを確認するため、ターミナルを開き直すか、sourceコマンドで反映させてからバージョンを確認してみます。
バージョンが表示されていればインストール完了です。
$ brew -v
Node.js
Nodebrewのインストール
nodebrewをインストールします。
$ brew install nodebrew
nodebrewがインストールされているかを確認するために
以下のコマンドを実行してバージョンが表示されるかを確認します。
$ nodebrew -v
Node.jsのインストール
インストールするにあたってインストール可能なバージョンを確認します。
以下のコマンドで一覧を確認できます。
$ nodebrew ls-remote
インストールするバージョンを決めたら、以下のコマンドを実行してインストールを進めます。ここでは、19.0.0を入れる例を記載します。
「Installed successfully」 が表示されていれば完了です。
$ nodebrew install-binary v19.0.0
インストール時に以下のようなエラーが表示される場合
Fetching: https://nodejs.org/dist/v19.0.0/node-v19.0.0-darwin-arm64.tar.gz
Warning: Failed to open the file
Warning: /Users/〇〇〇/.nodebrew/src/v19.0.0/node-v19.0.0-darwin-arm64.tar.
Warning: gz: No such file or directory
download failed: https://nodejs.org/dist/v19.0.0/node-v19.0.0-darwin-arm64.tar.gz
対処方法
以下のコマンドを実行してから再度インストールすることで対処できます。
$ mkdir -p ~/.nodebrew/src
$ nodebrew install-binary stable
Node.jsを有効化する
まずは現在どのバージョンがインストールされているかを確認します。
以下は、19.0.0がインストール、有効化されていないことが確認できます。
$ nodebrew ls
v19.0.0
current: none
インストールされているNode.jsのバージョンを有効化してみます。
currentにバージョンが反映されていることが確認できます。
$ nodebrew use v19.0.0
$ nodebrew ls
v19.0.0
current: v19.0.0
Node.jsを使用できるように環境変数にパスを設定します。
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofile
Node.jsを使用できるかを確認するため、ターミナルを開き直すか、sourceコマンドで反映させてからバージョンを確認してみます。
バージョンが表示されていればインストール完了です。
$ node -v
npmのインストール
npmは、Node.jsをインストールした段階で自動でインストールされています。以下のコマンドで確認してみます。
$ npm -v
Gulp
Gulpの導入
Gulpを動作させる環境を作成します。
1. Gulpを格納するフォルダ構成を作成
+ gulp-test
+ _gulp
2. package.jsonの作成
npmコマンドでpackage.jsonを作成します。
$ cd gulp-test/_gulp
$ npm init -y
3. プラグインをインストール
GulpでSassをコンパイルするためには次の2つのモジュールが必要です。
gulp(Gulp本体)
gulp-dart-sass(Sassをコンパイルするためのプラグイン)
そのほかにも便利で必要なものがあるのでインストールします。
gulp-plumber
エラーが発生しても強制終了させないためのプラグインgulp-notify
エラー発生時やコンパイル成功時にアラートを出力するためのプラグインbrowser-sync
ブラウザリロードするためのプラグイン
これらをインストールするためにはコマンドから実行します。
$ npm i gulp gulp-dart-sass gulp-plumber gulp-notify browser-sync
実行すると以下のように package.jsonに記載が追加されます。
![](https://assets.st-note.com/img/1669031093578-orMXR4OYEl.png?width=800)
4. タスクの作成
自動化したいタスクをgulpfile.jsに記述します。
タスクとは、例えば以下のようなものです。
Sassのコンパイル
ファイルを編集したら即座にブラウザを更新して反映する自動リロード(ブラウザシンク)
ベンダープレフィックスの自動付与
画像の自動圧縮
Babelを使用したJSのコンパイル
webpackと一緒に使ってJSをバンドルして圧縮
_gulpフォルダ直下にgulpfile.jsを作成します。
gulpfile.jsファイルの設定として以下の例を記述します。
Dart Sass でコンパイル
コンパイルエラーでも継続実行
ブラウザシンク
//gulp本体
const gulp = require('gulp');
//sass
//Dart Sass はSass公式が推奨 @use構文などが使える
const sass = require('gulp-dart-sass');
// エラーが発生しても強制終了させない
const plumber = require("gulp-plumber");
// エラー発生時のアラート出力
const notify = require("gulp-notify");
//ブラウザリロード
const browserSync = require("browser-sync");
// 入出力するフォルダを指定
const srcBase = '../_static/src';
const assetsBase = '../_assets';
const distBase = '../_static/dist';
const srcPath = {
'scss': assetsBase + '/scss/**/*.scss',
'html': srcBase + '/**/*.html'
};
const distPath = {
'css': distBase + '/css/',
'html': distBase + '/'
};
// sass
const cssSass = () => {
return gulp.src(srcPath.scss, {
sourcemaps: true
})
.pipe(
//エラーが出ても処理を止めない
plumber({
errorHandler: notify.onError('Error:<%= error.message %>')
}))
//指定できるキー expanded compressed
.pipe(sass({ outputStyle: 'expanded' }))
.pipe(gulp.dest(distPath.css, { sourcemaps: './' })) //コンパイル先
.pipe(browserSync.stream())
.pipe(notify({
message: 'Sassをコンパイルしました!',
onLast: true
}))
}
// html
const html = () => {
return gulp.src(srcPath.html)
.pipe(gulp.dest(distPath.html))
}
// ローカルサーバー立ち上げ
const browserSyncFunc = () => {
browserSync.init(browserSyncOption);
}
const browserSyncOption = {
server: distBase
}
// リロード
const browserSyncReload = (done) => {
browserSync.reload();
done();
}
/**
* ファイル監視 ファイルの変更を検知したら、browserSyncReloadでreloadメソッドを呼び出す
* series 順番に実行
* watch('監視するファイル',処理)
*/
const watchFiles = () => {
gulp.watch(srcPath.scss, gulp.series(cssSass))
gulp.watch(srcPath.html, gulp.series(html, browserSyncReload))
}
/**
* seriesは「順番」に実行
* parallelは並列で実行
*/
exports.default = gulp.series(
gulp.parallel(html, cssSass),
gulp.parallel(watchFiles, browserSyncFunc)
);
5. 動作確認させるためのフォルダ構成を作成
以下のフォルダ構成を作成します。
今回作成したHTML/Sass ファイルは以下からダウンロードできます。
_gulpファイル以降のファイルは 1〜4で作成したファイルを使用します。
+ gulp-test
+ _assets
+ scss
+ modules
+ _c-title.scss
+ _index.scss
+ style.scss
+ _gulp
+ node_modules
+ ・・・
+ gulpfile.js
+ package-lock.js
+ package.js
+ _static
+ src
+ index.html
各ファイルに記述する内容は以下を参照
gulp-test/_static/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>はじめてのGulp</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1><span>Hello Gulp!</span></h1>
</body>
</html>
gulp-test/_assets/scss/modules/_c-title.scss
h1 {
color: blue;
span {
display: flex;
align-items: center;
position: relative;
&::before,&::after {
content: '';
display: block;
width: 30px;
height: 2px;
background-color: green;
}
&::before {
transform: rotate(45deg);
}
&::after {
transform: rotate(-45deg);
}
}
}
gulp-test/_assets/scss/modules/_index.scss
@use './c-title';
gulp-test/_assets/scss/style.scss
@charset "UTF-8";
@use './moduleds/index';
6. 動作確認
Gulpを起動して動作を確認します。
$ npx gulp
Gulpを起動すると以下のような出力されます。
[23:30:00] Using gulpfile ~/〇〇〇/〇〇〇/gulp-test/_gulp/gulpfile.js
[23:30:00] Starting 'default'...
[23:30:00] Starting 'html'...
[23:30:00] Starting 'cssSass'...
[23:30:00] Finished 'html' after 54 ms
[23:30:00] gulp-notify: [Gulp notication] Sassをコンパイルしました!
[23:30:00] Finished 'cssSass' after 75 ms
[23:30:00] Starting 'watchFiles'...
[23:30:00] Starting 'browserSyncFunc'...
[Browsersync] Access URLs:
-------------------------------------
Local: http://localhost:3000
External: http://192.168.1.19:3000
-------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
-------------------------------------
[Browsersync] Serving files from: ../_static/dist
また、ブラウザも立ち上がります。
![](https://assets.st-note.com/img/1669033096130-SXyWZ1AIhx.png?width=800)
この状態で、_c-title.scssを開き、h1のcolorをblueからredに変えて
command+Sで保存してみると、自動コンパイル&ブラウザリロードされ、
変化することを確認できます。
また、gulpを停止したい場合は ctrl + c で停止できます。
![](https://assets.st-note.com/img/1669033183485-23QKpfzaaO.png?width=800)
さいごに
今回はとりあえずGulpの環境を構築して動かしてみようという目的で手順を記載したため、gulpfile.js などの細かい設定の説明は省略しています。
gulpfile.jsへの記述やプラグインのインストールでカスタマイズでき、効率的に作業を進めることができます。積極的に使っていきましょう。
この記事が気に入ったらサポートをしてみませんか?