見出し画像

【コピペで使える】Web制作に便利なGulpをとりあえず使ってみてくださいキット

静的なHTMLサイト制作に便利なツール「Gulp」(ガルプ)について調べたのでまとめてみました。

「Web制作初心者で、Gulpが便利だとは聞いてるけど……結局どうやって使うの?」

という方に向けて、Gulpの使い方と「とりあえずこれをコピペしてみてください」というものを用意しているので、ぜひご活用ください。

今回の内容でできるようになること

・HTML、Sass、JavaScriptを保存したらブラウザ側も自動的にリロード
・Sassが保存されたら自動でCSSにコンパイル
・CSSにベンダープレフィックスを自動で付与
・複数あるCSSを一つに結合
・CSS、JavaScriptのソースを圧縮
・画像を圧縮

******
私はWindows10、Gulpはver4.0、エディタはVSCodeを使っています。違うものをお使いの方は、操作等が違う部分があるかもしれません。
また、つぎはぎの知識なので、コードはあまりきれいではありません。徐々に改良していきたいとは思いますが、もしご意見あれば、ご連絡いただけたら嬉しいです。
******

Gulpのインストール

Gulpのインストールについては……すいません、こちらの記事がとても分かりやすいので、こちらをご覧ください。

コマンドプロンプトの起動方法がわからなければ、こちらをどうぞ。

プロジェクトごとの準備ー全部コピペ編ー

インストールがすんだら準備は完了。

ここからは2通りの方法があるので、簡単な方からご紹介します。

プロジェクト(作るWebサイト)ごとに以下の準備を行います。

1.作業フォルダ(開発するフォルダ)を作成。
2.作業フォルダ直下に、以下の2つのファイルを作成
3.コマンドプロンプトでそのフォルダに移動
4.必要なパッケージをインストール

1.作業フォルダの作成

作業フォルダを作成してください。フォルダの中身はまだ空でも結構です。

今回は例として以下の構成にしています。

テンプレート
├─dist  (実際のWebサイトのデータを置くところ)
│  ├─css (最終的に完成するcssファイル style.min.css)
│  ├─img (圧縮済みのイメージ)
│  ├─js (最終的に完成する圧縮されたJavaScriptファイル)
|  └─index.html
└─src   (開発用のファイルを置くところ)
   ├─concat (未圧縮のcssファイルが一時的に置かれる)
   ├─css (sassからコンパイルされたcssファイル)
   ├─img (圧縮前のイメージ)
   ├─js (JavaScriptのコーディングはこちらで)
   └─sass (sassのコーディングはこちらで)

***注意点***

・1枚のページを想定
・コーディングは dist/index.html、src/js、src/sassで行う
・sassは「_」をファイルの先頭につければコンパイルされない
・imgは dist/img に入れておいて、最後に一気に圧縮する(フォルダ移動は自動で行われる)

構成についてはこちらのサイトを参考にしました。

2.2つのファイルを作成

作業フォルダ直下に以下の2つのファイルをコピペして作成してください。

テンプレート
├─dist 
│  ├─css 
│  ├─img 
│  ├─js 
|  └─index.html
├─src   
|  ├─concat 
|  ├─css 
|  ├─img 
|  ├─js 
|  └─sass
├─package.json ← 追加!
└─gulpfile.js  ← 追加!

package.json

{
 "name": "sample",
 "version": "1.0.0",
 "description": "",
 "main": "gulpfile.js",
 "dependencies": {
   "gulp": "^4.0.2"
 },
 "devDependencies": {
   "autoprefixer": "^9.7.1",
   "browser-sync": "^2.26.7",
   "connect-ssi": "^1.1.1",
   "del": "^5.1.0",
   "gulp-concat": "^2.6.1",
   "gulp-cssmin": "^0.2.0",
   "gulp-imagemin": "^6.1.1",
   "gulp-notify": "^3.2.0",
   "gulp-plumber": "^1.2.1",
   "gulp-postcss": "^8.0.0",
   "gulp-rename": "^1.4.0",
   "gulp-sass": "^4.0.2",
   "gulp-terser": "^1.2.0"
 },
 "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "author",
 "license": "ISC"
}

gulpfile.js

var gulp = require('gulp'),
   autoprefixer = require('autoprefixer'),
   browserSync = require('browser-sync'),
   connectSSI = require('connect-ssi'),
   del = require("del"),
   concat = require("gulp-concat"),
   cssmin = require('gulp-cssmin'),
   imagemin = require('gulp-imagemin'),
   notify = require('gulp-notify'),
   plumber = require('gulp-plumber'),
   postcss = require('gulp-postcss')
   rename = require("gulp-rename"),
   sass = require('gulp-sass'),
   terser = require('gulp-terser');

var imageMainDir = 'dist/img/',
   imageOriginDir = 'src/img/',
   searchImage = '**/*.{png,jpg,gif,svg}',
   searchOriginImage = imageOriginDir + searchImage,
   sassDir = 'src/sass/',
   watchSass = sassDir + '**/*.scss',
   searchSass = [
     watchSass,
     '!' + sassDir + '_*'],
   cssOriginDir = 'src/css/',
   cssConcatDir = 'src/concat/',
   cssMainDir = 'dist/css/',
   searchOrigincss = cssOriginDir + '**/*.css',
   searchHTML = 'dist/*.html',
   searchJsOrigin = 'src/js/**/*.js',
   jsMainDir = 'dist/js';

//--imagemin--

// copy
gulp.task("copy", () =>
 gulp.src(imageMainDir + '**/*')
   .pipe(gulp.dest(imageOriginDir))
);

// del
function delTask(callback) {
 del.sync(imageMainDir + '*', { force: true })
 callback();
};
gulp.task('del', delTask);

// move
gulp.task('move', gulp.series('copy','del',));

// onlyimagemin
gulp.task('onlyimagemin', () => {
 return gulp.src(searchOriginImage)
 .pipe(imagemin([
   imagemin.gifsicle({interlaced: true}),
   imagemin.jpegtran({progressive: true}),
   imagemin.optipng({optimizationLevel: 4}),
   imagemin.svgo({
     plugins: [
       {removeViewBox: false}
     ]
   })
 ]))
 .pipe(gulp.dest(imageMainDir))
});

//imagemin
gulp.task('imagemin', gulp.series('copy', 'onlyimagemin'));

//--imagemin--

// jsmin
gulp.task('jsmin', () => {
 return gulp.src(searchJsOrigin)
 .pipe(plumber({
   errorHandler: notify.onError('Error: <%= error.message %>')
 }))
 .pipe(terser())
 .pipe(rename({suffix: '.min'}))
 .pipe(gulp.dest(jsMainDir))
 .pipe(browserSync.stream());
});

//html
gulp.task('html', function () {
 return gulp.src(searchHTML)
 .pipe(browserSync.stream());
});

//--css--

//sass
gulp.task('sass', function() {
 return gulp.src(searchSass)
   .pipe(plumber({
     errorHandler: notify.onError('Error: <%= error.message %>')
   }))
   .pipe(sass({outputStyle: 'expanded'}))
   .pipe(postcss([autoprefixer()]))
   .pipe(gulp.dest(cssOriginDir));
});

// concat
gulp.task("concat", () =>
 gulp.src(searchOrigincss)
   .pipe(concat("style.css"))
   .pipe(gulp.dest(cssConcatDir))
);
gulp.task("tryconcat", gulp.task("concat"));

// cssmin
gulp.task('cssmin', () => {
 return gulp.src(cssConcatDir + '*.css')
 .pipe(plumber({
   errorHandler: notify.onError('Error: <%= error.message %>')
 }))
 .pipe(cssmin())
 .pipe(rename({suffix: '.min'}))
 .pipe(gulp.dest(cssMainDir))
 .pipe(browserSync.stream());
});

function samplefunc() {
 return console.log('hello');
};
gulp.task('sample', samplefunc);

gulp.task('css', gulp.series('sass', 'concat', 'cssmin'));

//--css--

// watch
gulp.task('watch', () => {
 gulp.watch(searchHTML, gulp.task('html'));
 gulp.watch(watchSass, gulp.task('css'));
 gulp.watch(searchJsOrigin, gulp.task('jsmin'));
});

// browser-sync
gulp.task('browser-sync', () => {
 browserSync({
   server: {
     baseDir: 'dist',
     middleware: [
       connectSSI({
        ext: '.html',
        baseDir: 'dist'
       })
     ]
   }
 });
});

// default
gulp.task('default', gulp.parallel('watch', 'browser-sync'));

3.コマンドプロンプトで作業フォルダに移動

色々なパッケージをダウンロードするために作業フォルダに移動します。

コマンドプロンプトに以下のように入力してください。

cd 作業フォルダのパス

作業フォルダのパスは、例えば以下の部分をクリックすると取得できます。

画像1

4.必要なパッケージをインストール

次に必要な色々をインストールします。

npm i

と入力してください。

これでローカル環境(作業フォルダ)にgulpや便利なパッケージがもろもろインストールされました。

準備完了です。

作業開始!

以上で準備は完了。これで便利な機能が使えるようになりました。

実行の方法をご説明します。

1.作業開始前に毎回実行すること
2.すべての作業が終了したら、最後に画像を一気に圧縮

1.作業開始前に毎回実行すること

作業前に毎回行うことです。

コマンドプロンプトを開いて、作業フォルダに移動し、以下を入力します。

gulp

これで以下のことが自動で行われます。

画像2

コマンドプロンプトが作業を監視してくれるようになり、保存を行うと自動でブラウザの更新を行ってくれます。

また、コマンドプロンプトには何が実行されたかが記録され、エラーが起きた場合もそのログが残されます。

この間、コマンドプロンプトはいじれないようになってしまうので、作業をやめたり、他のコマンドを入力したくなったら「Ctrl + C」で監視を止めることができます。

2.画像の圧縮

これはすべての作業が終わって、Webサイトが完成する直前に行うことです。

コマンドプロンプトを開いて、作業フォルダに移動し、以下を入力します。

gulp imagemin

これで以下のことが自動で行われます。

画像を dist/img から src/img にコピー

dist/img の画像を削除

src/img にあるオリジナルの画像を圧縮して dist/img に

最終的に src/img にオリジナルの画像、 dist/img に圧縮された画像がある状態になります。

また、画像がフォルダの中に入っていても大丈夫です。

最後に

ということで、以上を行えばとりあえずgulpを使うことができるようになるはずです。

他にも便利な機能がいろいろあったり、共同開発する際にも有用らしいので、ぜひともこれをきっかけに使っていただけたらと思います。

詳しい解説と、もう一つの準備の方法については、後日あげます。

参考サイト

ps

コードの書き方等に統一性がなく、まだかなり見苦しい感じになっていますが、この手順でとりあえず動くと思います。

また、基本的に参考サイト様のコードのつぎはぎになっています。後日あげる予定ですが、早く詳しい解説が知りたいという方は、参考サイトをご覧ください。

もし間違っている部分や、この方がいいんじゃない? という部分があれば、ご意見いただけたら嬉しいです。


この記事が気に入ったらサポートをしてみませんか?