WEB制作において、効率的な開発環境を整えることは非常に重要です。
整えてる人と整えていない人で何時間も何日も制作速度に差が出たりもします。
今回は、Gulp5を使用してローカルサーバーを構築し、自動リロードを行う方法をご紹介します。
これにより、SassファイルのコンパイルやPHPファイルの変更をリアルタイムに反映させることが可能になり確認作業などもかなり楽になります。
目次
Gulp5でのローカルサーバー構築とSCSSのコンパイル
Gulp5を使用することで、ローカルサーバーを簡単に立ち上げ、ブラウザの自動リロードを実現できます。
以前から知っていたはずなのになぜか私はxamppでサーバーを立ててgulpでコンパイルしてといったような2度手間を取っていました。
以下に示すコードを使用すれば、Sassファイルのコンパイルやファイル変更の監視が自動化され、効率的な開発環境を構築することが可能です。
import gulp from 'gulp'; // gulpをインポート
const { series, src, dest, watch } = gulp; // series, src, dest, watchがそのまま使えるように
// プラグインのインポート
import plumber from 'gulp-plumber'; // エラーが発生してもタスクを停止しない
import notify from 'gulp-notify'; // エラー発生時にデスクトップ通知を行う
import browserSync from 'browser-sync'; // ローカルサーバーを起動し、ブラウザの自動リロードを行う
import gulpSass from 'gulp-sass'; // Sassファイルをコンパイルする
import sass from 'sass'; // Dart Sass
import sassGlob from 'gulp-sass-glob'; // Sassのimport文を簡潔に書くためのプラグイン
import csscomb from 'gulp-csscomb'; // CSSプロパティをソートする
import connect from 'gulp-connect-php'; // PHPサーバーを立ち上げる
import sourcemaps from 'gulp-sourcemaps'; // ソースマップを作成する
import postcss from 'gulp-postcss'; // PostCSSを利用する
import autoprefixer from 'autoprefixer'; // ベンダープレフィックスを付与する
const browser = browserSync.create();
const sassProcessor = gulpSass(sass);
// 参照元パス
const srcPath = {
scss: 'src/scss/**/*.scss', // Sassファイルのソース
};
// 出力先パス
const destPath = {
css: 'dist/css', // CSSファイルの出力先
};
// PHPサーバーを立ち上げ、BrowserSyncでプレビュー表示するタスク
function connectSync(done) {
connect.server({
port: 8080, // サーバーのポート番号
base: 'dist/' // サーバーのベースディレクトリ
}, function() {
browser.init({
proxy: 'localhost:8080', // Proxy設定をlocalhostに変更
baseDir: 'dist/' // ベースディレクトリを設定
});
});
done();
}
// ブラウザをリロードするタスク
function reload(done) {
browser.reload(); // BrowserSyncを使ってブラウザをリロードする
done();
}
// Sassをコンパイルし、CSSを生成するタスク
const sassTask = () => (
src(srcPath.scss) // Sassファイルのソース
.pipe(plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })) // エラー時に通知
.pipe(sourcemaps.init()) // ソースマップを初期化
.pipe(sassGlob()) // Sassのimport文をまとめる
.pipe(sassProcessor().on('error', sassProcessor.logError)) // Sassをコンパイル
.pipe(csscomb()) // CSSプロパティを整形
.pipe(postcss([
autoprefixer('last 2 versions'), // ベンダープレフィックスを付与
mqpacker(), // メディアクエリをまとめる
discardComments({ removeAll: true }), // CSSコメントを削除
cssnano() // CSSを圧縮
]))
.pipe(sourcemaps.write('.')) // ソースマップを書き出す
.pipe(dest(destPath.css)) // 出力先
.pipe(browser.stream()) // ブラウザをリロード
);
// ファイルの変更を監視するタスク
const watchFiles = (done) => {
watch(srcPath.scss, sassTask); // Sassファイルが変更されたらコンパイルする
watch(srcPath.php, reload); // PHPファイルが変更されたらリロードする
watch(srcPath.html, reload); // HTMLファイルが変更されたらリロードする
done();
};
// デフォルトタスク(Gulpを実行した際に動くタスク)
export default series(connectSync, watchFiles);
// 個別タスクをエクスポート
export { sassTask };
PHPサーバーの設定と自動リロード
PHPサーバーを立ち上げ、BrowserSyncを使ってブラウザを自動リロードする設定です。
ポートやらプロキシやら詳しくなくてもとりあえず下記のように記載しちゃえば動いちゃったりします。
特に変わったことをしていなければほぼ皆さん同じ記載のようになるかと思います。
// PHPサーバーを立ち上げ、BrowserSyncでプレビュー表示するタスク
function connectSync(done) {
connect.server({
port: 8080, // サーバーのポート番号
base: 'dist/' // サーバーのベースディレクトリ
}, function() {
browser.init({
proxy: 'localhost:8080', // Proxy設定をlocalhostに変更
baseDir: 'dist/' // ベースディレクトリを設定
});
});
done();
}
SassのコンパイルとCSSの生成
Sassファイルをコンパイルし、CSSを生成するタスクです。このタスクでは、エラーが発生した場合に通知を行い、ソースマップを作成し、ブラウザをリロードします。
ソースマップやベンダープレフィックスなども入れていますが、お好みによって外してしまってもいいかと思います。
javascriptコードをコピーするconst sassTask = () => (
src(srcPath.scss) // Sassファイルのソース
.pipe(plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })) // エラー時に通知
.pipe(sourcemaps.init()) // ソースマップを初期化
.pipe(sassGlob()) // Sassのimport文をまとめる
.pipe(sassProcessor().on('error', sassProcessor.logError)) // Sassをコンパイル
.pipe(csscomb()) // CSSプロパティを整形
.pipe(postcss([
autoprefixer('last 2 versions'), // ベンダープレフィックスを付与
]))
.pipe(sourcemaps.write('.')) // ソースマップを書き出す
.pipe(dest(destPath.css)) // 出力先
.pipe(browser.stream()) // ブラウザをリロード
);
追加で便利な圧縮機能
本当に好みになってしまうと思いますが、Googleのページスピードテストでもよく注意されるような、CSSを圧縮などに関心ても簡単に追加できます。
上部で下記コードでインポートを行います。
import cssnano from 'cssnano'; // CSSファイルを圧縮する
import mqpacker from 'css-mqpacker'; // メディアクエリをまとめる
import discardComments from 'postcss-discard-comments'; // CSSのコメントを削除する
ベンダープレフィックスのところにコードを追加するだけで完了です。
.pipe(postcss([
autoprefixer('last 2 versions'), // ベンダープレフィックスを付与
mqpacker(), // メディアクエリをまとめる
discardComments({ removeAll: true }), // CSSコメントを削除
cssnano() // CSSを圧縮
]))
これを入れるだけでガッチガチに圧縮されちゃいます。
未使用セレクタの削除もできます
ちょっと使い方によってはリスクもあるかもしれませんが、未使用セレクタを自動で探して削除してくれる機能も追加することができます。
他と同様まずはインポートをします。
import purgecss from 'gulp-purgecss'; // 未使用のCSSセレクタを削除する
参照元パスにチェックしたいhtmlとphpとjsのパスをいれます。
ここでjsを入れていないと、jsでアニメーションを作成されている方や、jQueryのプラグインを使用されている方などは動かなくなってしまう可能性もありますので、お気をつけください。
// 参照元パス
const srcPath = {
scss: 'src/scss/**/*.scss', // Sassファイルのソース
js: 'src/js/**/*.js', // JSファイルのソース
php: 'dist/**/*.php', // PHPファイルのソース
html: 'dist/**/*.html' // HTMLファイルのソース
};
あとは下記コードを追加するだけです。
.pipe(purgecss({ // 未使用のCSSセレクタを削除
content: [srcPath.html, srcPath.php, srcPath.js]
}))
圧縮などの追加機能を書いた下にでも別途追加したら大丈夫と思います。
機能の追加の注意点
簡単に追加することができますが、各プラグインのインストールを忘れないようにお願いします。
基本的にインポートしている部分の名前のものをインストールしたら動きます。
ファイルの変更を監視するタスク
ファイルの変更を監視し、変更があった場合に対応するタスクを実行します。
これのおかげでファイルを編集しているだけでブラウザに反映されたりコンパイルを自動でやってくれるので、とても作業が楽になります。
// ファイルの変更を監視するタスク
const watchFiles = (done) => {
watch(srcPath.scss, sassTask); // Sassファイルが変更されたらコンパイルする
watch(srcPath.php, reload); // PHPファイルが変更されたらリロードする
watch(srcPath.html, reload); // HTMLファイルが変更されたらリロードする
done();
};
デフォルトタスクの設定
Gulpを実行した際に動くデフォルトタスクです。connectSync
タスクとwatchFiles
タスクを順番に実行します。
// デフォルトタスク(Gulpを実行した際に動くタスク)
export default series(connectSync, watchFiles);
まとめ
Gulp5を使用することで、ローカルサーバーの構築と自動リロードを簡単に実現できます。PHPサーバーの設定やSassのコンパイル、ファイルの変更監視など、効率的な開発環境を整えるためのツールを提供します。
さらに、PostCSSを使用してCSSの最適化を行うことで、より洗練されたスタイルシートを生成できます。ぜひ一度試してみてください。
この設定を導入することで、日々のWEB制作がより快適になり、効率的に作業を進めることができるでしょう。