Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
gulpをv3系から v4系にアップデートした話
Search
nagasawaaaa
October 26, 2019
Programming
500
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
gulpをv3系から v4系にアップデートした話
update gulp v3 => v4
nagasawaaaa
October 26, 2019
More Decks by nagasawaaaa
See All by nagasawaaaa
勉強会を開いてよかった話
nagasawaaaa
0
690
CSS Transform Simulator を Vue.js で 作った話
nagasawaaaa
1
650
Vue meet up sapporo #1 VeeValidateの紹介
nagasawaaaa
1
400
Other Decks in Programming
See All in Programming
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
360
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
350
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
Verilogで学ぶCPU自作入門
uyuki234
8
4k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
setup-vp GitLab対応の裏側
naokihaba
0
150
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
140
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
640
dotNET_vulnclicker_intro.pdf
deka_morita
0
120
The Rails Doctrine Decade
koic
2
520
カツオ、ご期待ください
suneo3476
0
160
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
610
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
210
What's in a price? How to price your products and services
michaelherold
247
13k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
450
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
ラッコキーワード サービス紹介資料
rakko
1
5.2M
Docker and Python
trallard
47
4.2k
Chasing Engaging Ingredients in Design
codingconduct
0
350
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
320
Transcript
HVMQΛWܥ͔Β WܥʹΞοϓσʔτͨ͠ ᖒݡʢ!OBHBTBXBBBBʣ ΏΔ8FCษڧձ!ࡳຈ
ࣗݾհ w ໊લɿᖒݡʢͳ͕͞Θ͞ͱ͠ʣ w 5XJUUFSɿ!OBHBTBXBBBB w ॴଐɿגࣜձࣾύϯηΤϯδχΞ w ׆ಈɿ+48PSLTIPQ4BQQPSPʢ+BWB4DSJQUͷษڧձʣ 7VFKT/VYUKT͘͘ձ
ΏΔ8FCษڧձ!ࡳຈ
ࠓ͢͜ͱ w HVMQWʹͳͬͯศརͩͳͱࢥͬͨՃػೳͷհ w HVMQWHVMQWͷॻ͖ํͷҧ͍ ΏΔ8FCษڧձ!ࡳຈ
ຊͷαϯϓϧίʔυ IUUQTHJUIVCDPNOBHBTBXBBBBHVMQWUPW ΏΔ8FCษڧձ!ࡳຈ
ͦͦHVMQͱʁ ΏΔ8FCษڧձ!ࡳຈ
ݱͰ͑ΔHVMQೖୈճHVMQͱԿ͔c$PEF(SJE IUUQTBQQDPEFHSJEOFUFOUSZHVMQ lHVMQ/PEFKTΛϕʔεͱͨ͠ϏϧυγεςϜϔϧύʔ Ͱ͢ɻҎલ$PEF(SJEͰհͨ͠(SVOUͱࣅͨతΛ ࣋ͬͯ࡞ΒΕͨπʔϧͰɺHVMQΛ͑͞·͟·ͳ࡞ ۀΛࣗಈԽ͢Δ͜ͱ͕Ͱ͖·͢ɻz ΏΔ8FCษڧձ!ࡳຈ
HVMQͰग़དྷΔ͜ͱ w FKTɺQVHɺ/VOKVDLTͳͲͷ)5.-ςϯϓϨʔτΤϯδϯΛͬͨIUNMͷϏϧυ w 4BTTɺ4UZMVTͳͲͷ"MU$44ͷίϯύΠϧ w ίϯύΠϧ࣌ʹ"VUPQSFpYFSͰϕϯμʔϓϨϑΟοΫεΛࣗಈ༩ w ը૾ͷѹॖ w
8FCQBDLΛͬͯ+4Λόϯυϧ w CBCFMΛͬͯ+4ΛτϥϯεύΠϧ w 1SFUUJFSͰ+4Λίʔυܗ w ϒϥβͷࣗಈϦϩʔυʢ#SPXTFS4ZODͳͲʣ w ͦͷଞ ΏΔ8FCษڧձ!ࡳຈ
ൿͷλϨͱԽ͢HVMQpMFKT ΏΔ8FCษڧձ!ࡳຈ
ൿͷλϨԽ͢ΔݪҼ w HVMQpMFKT୭͔͕࡞ͬͨͷΛଞͷϓϩδΣΫτ͔Βͷ͍ճ͕ͪ͠ w ৽ೖࣾһઌഐ͕ͬͯΔͷΛงғؾͰ͍ͬͯΔ w OQNJͯ͠OQNTUBSUୟ͚ͱΓ͋͑ͣಈ͔͘Βʙతͳʜ w Ξοϓσʔτ͠ͳͯ͘ຬ͍ͯ͠Δ w
ͦͦ࡞ͬͨਓ͕ୀ৬ͯ͠ϝϯςφϯε͢Δਓ͕͍ͳ͘ͳͬͨ ΏΔ8FCษڧձ!ࡳຈ
ͦͷ݁Ռ ΏΔ8FCษڧձ!ࡳຈ
Wܥͷ··ࠓࢸΔ ˞ઌఔͷݪҼʹهࡌͨ͠ҰྫฐࣾΛྫʹͨ͠༰Ͱ͋Γ·ͤΜ WFSTJPO͕Wܥͷ࠷ޙ ΏΔ8FCษڧձ!ࡳຈ
ͦͯ͠HVMQW͕݄ʹ ϦϦʔε͞Εͨͷͷ ۀ͕͗ͯ͢͠εϧʔ ΏΔ8FCษڧձ!ࡳຈ
/VYUԌ্ϓϩδΣΫτʹΑΓ Ҏ্ଟͷʑΛૹ͍͕ͬͯͨɺ ϦϦʔεΛऴ͑ͯۀʹ༨༟͕ग़Δ ΏΔ8FCษڧձ!ࡳຈ
༨༟Ͱ͖ͨ͠ ϑϩϯτܥʢओʹ੩తαΠτ༻ʣͷ ςϯϓϨʔτΛߋ৽͢Δͧ ΏΔ8FCษڧձ!ࡳຈ
WWͰେ͖͘มΘͬͨͱ͜Ζ ΏΔ8FCษڧձ!ࡳຈ
JNQPSUFYQPSUߏจΛ͑ΔΑ͏ʹͳͬͨ w FTN˞ϞδϡʔϧΛΠϯετʔϧ͢Δ w ϑΝΠϧ໊ΛHVMQpMFKTHVMQpMFFTNKTʹมߋ͢Δ CBCFMΛೖΕͨΓɺ5ZQF4DSJQUͰॻ͚·͕͢ɺ ࠷ۙͷ/PEFKTʢWҎ߱ͱ͔ʜ ʣͦΕΒ͕ఏڙ͢ΔߏจΛ αϙʔτ͍ͯ͠ΔͷͰFTNΛಋೖ͢Δ͚ͩͰྑ͍ͱݸਓతʹࢥ͍·͢ɻ ͨͩ͠ɺHVMQpMFKTΛܕ͖ݴޠͰॻ͘ͷͰ͋Ε
5ZQF4DSJQUΛಋೖ͢ΔͷΞϦͰ͢ɻ ΏΔ8FCษڧձ!ࡳຈ ˞FTNCBCFMෆཁɺόϯυϧෆཁͷ&4Ϟδϡʔϧϩʔμʔ ˞WܥͰFTNೖΕͨΒग़དྷ͔ͨ͠Ε·ͤΜ͕ະݕূʜ
໊લΛมߋ͢Δ͚ͩͰHVMQ͕ Α͠ͳʹͬͯ͘ΕΔͷͰHVMQpMFFTNKTʹ FTNΛSFRVJSFPSJNQPSU͢Δඞཁͳ͍Ͱ͢ ΏΔ8FCษڧձ!ࡳຈ
ͪͳΈʹ ΏΔ8FCษڧձ!ࡳຈ
CBCFMΛͬͯHVMQpMFKTΛॻ͜͏ͱ͢Δͱʁ w ϑΝΠϧ໊ΛHVMQpMFCBCFMKTʹมߋ͢Δ w ࣍ͷϞδϡʔϧΛΠϯετʔϧ͢Δ w !CBCFMDPSF !CBCFMSFHJTUFS !CBCFMQPMZpMM !CBCFMDPSFKT
w CBCFMSD˞Λ࡞͠ઃఆΛՃ JNPSUFYQPSUͱBTZODBXBJU͏߹όϕΔ˞߹ख͕͔͔ؒΔɻ HVMQެࣜυΩϡϝϯτʹHVMQpMFCBCFMKTʹมߋͯ͠!CBCFMSFHJTUFSೖΕΖͱ͍͏ ͜ͱ͚ͩॻ͍ͯ͋Δɻ ΏΔ8FCษڧձ!ࡳຈ ˞CBCFMΛͬͯτϥϯεύΠϧ͢Δ͜ͱ ˞CBCFMͷઃఆϑΝΠϧ
5ZQF4DSJQUͦͦࢲ͕ ීஈۀͰॻ͍͍ͯͳ͍ͷͰ ࠓճׂѪʜ ΏΔ8FCษڧձ!ࡳຈ
JNPSUFYQPSUߏจWWൺֱ const gulp = require('gulp'); const runSequence = require('run-sequence'); gulp.task('css',
() => { console.log('css'); }); gulp.task('js', () => { console.log('js'); }); gulp.task('imagemin', () => { console.log('imagemin'); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); }); WHVMQpMFKT import gulp from 'gulp'; async function css () { console.log('css'); } async function js () { console.log('js'); } async function imagemin () { console.log('imagemin'); } const build = gulp.parallel(css, js, imagemin); export default build; WHVMQpMFFTNKT ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ
λεΫͷ࡞ํ๏͕γϯϓϧʹͳͬͨ w HVMQUBTL ͰλεΫΛొ͠ͳͯ͘େৎʹͳͬͨ w ؔͷฦΓΛ1SPNJTFʹ͢ΔɺTUFSBNΛฦ͢ɺίʔϧόοΫؔ Λͯؔ͠ͰൃՐͤ͞ΕHVMQͷλεΫʹͳΔ˞ ΏΔ8FCษڧձ!ࡳຈ ˞ଞʹ͋Γ·͕͢ৄ͘͠υΩϡϝϯτΛࢀর͍ͩ͘͞ ɹɹIUUQTHVMQKTDPNEPDTFOHFUUJOHTUBSUFEBTZODDPNQMFUJPO
λεΫͷ࡞ํ๏WWൺֱ ΏΔ8FCษڧձ!ࡳຈ WHVMQpMFFTNKT import { src, dest, parallel } from
'gulp'; // steram を返す従来に似たパターン function streamCss () { return src('src/**/*.css') .pipe(dest('public_html')); } // Promiseを返すパターン1 async function asyncJs () { console.log('js'); } // Promiseを返すパターン2 function promiseImagemin () { console.log('imagemin'); return Promise.resolve('resolveの値は無視される') } // 何も返さない代わりにError-first callbacksを発火させるパターン function callbackHtml (cb) { console.log('html'); cb(); } const build = parallel(streamCss, asyncJs, callbackHtml, promiseImagemin); export default build; WHVMQpMFKT const gulp = require('gulp'); const imagemin = require('gulp-imagemin'); const runSequence = require('run-sequence'); gulp.task('css', () => { return gulp.src('src/**/*.css') .pipe(gulp.dest('public_html')); }); gulp.task('js', () => { return gulp.src('src/**/*.js') .pipe(gulp.dest('public_html')); }); gulp.task('imagemin', () => { return gulp.src('src/**/*.{gif,jpg,png,svg}') .pipe(imagemin()) .pipe(gulp.dest('public_html')); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); }); ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ
ύϒϦοΫλεΫͱϓϥΠϕʔτλεΫʹ ͚Δ͜ͱ͕ग़དྷΔΑ͏ʹͳͬͨ w HVMQpMFKTͰFYQPSU͠ͳ͚ΕϓϥΠϕʔτλεΫʹͳΔ w ϓϥΠϕʔτλεΫΤϯυϢʔβʔ͕࣮ߦͰ͖ͳ͍ w ύϒϦοΫʹొ͢ΔʹHVMQpMFKTͰFYQPSU͢Δ ΏΔ8FCษڧձ!ࡳຈ ࢀߟɿIUUQTHVMQKTDPNEPDTFOHFUUJOHTUBSUFEDSFBUJOHUBTLT
ύϒϦοΫλεΫͱϓϥΠϕʔτλεΫ ΏΔ8FCษڧձ!ࡳຈ import { series, parallel } from 'gulp'; import
clean from './tasks/clean'; // プライベート async function css () { console.log('css'); } // プライベート async function js () { console.log('js'); } // プライベート async function imagemin () { console.log('imagemin'); } // パブリック const build = series( clean, parallel(css, js, imagemin) ); // exportすることによってコマンドラインから使えるようになります export default build; export const cleanDir = clean; ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ ˞QBDLBHFKTPOͷTDSJQUTʹHVMQΛՃ͍ͯ͠ΔఆͷͰ͢ɻ ӈͷΑ͏ͳHVMQGVMFFTNKTͷ߹ɺ FYQPSU͍ͯ͠ΔCVJME σϑΥϧτλεΫ ͱ DMFBO%JSͱ͍͏λεΫ͕ίϚϯυϥΠϯ͔Βୟ͘͜ ͱ͕Ͱ͖ΔύϒϦοΫλεΫͱͯ͠ొ͞Ε·͢ɻ ͦΕҎ֎ͷDTTɺKTɺJNBHFNJOͳͲ FYQPSU͍ͯ͠ͳ͍ͨΊɺ࣍ͷΑ͏ͳίϚϯυ͕௨Γ ·ͤΜɻ $ npm run gulp $ npm run gulp css Task never defined: css // エラーとなる $ npm run gulp cleanDir
ྻॲཧɺฒྻॲཧʹ SVOTFRVFODF͕ෆཁʹͳͬͨ w ྻॲཧ͢ΔTFSJFT ϝιου͕Ճ͞Εͨ w ฒྻॲཧ͢ΔQBSBMMFM ϝιου͕Ճ͞Εͨ ΏΔ8FCษڧձ!ࡳຈ ࢀߟɿIUUQTHVMQKTDPNEPDTFOBQJTFSJFT
IUUQTHVMQKTDPNEPDTFOBQJQBSBMMFM
QBSBMMFM TFSJFT ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ WHVMQpMFFTNKT import { series, parallel }
from 'gulp'; async function css () { console.log('css'); } async function js () { console.log('js'); } async function imagemin () { console.log('imagemin'); } const build = series( imagemin, parallel(css, js) ); export default build; WHVMQpMFKT const gulp = require('gulp'); const imagemin = require('gulp-imagemin'); const runSequence = require('run-sequence'); gulp.task('css', () => { return gulp.src('src/**/*.css') .pipe(gulp.dest('public_html')); }); gulp.task('js', () => { return gulp.src('src/**/*.js') .pipe(gulp.dest('public_html')); }); gulp.task('imagemin', () => { return gulp.src('src/**/*.{gif,jpg,png,svg}') .pipe(imagemin()) .pipe(gulp.dest('public_html')); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); });
ιʔεϚοϓͷग़ྗʹϓϥάΠϯ͕ෆཁʹͳͬͨ ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ WHVMQpMFFTNKT import { src, dest } from
'gulp'; import sass from 'gulp-sass'; async function scss () { return src('src/**/*.scss', { base: 'src', sourcemaps: true }) .pipe(sass()) .pipe(dest('public_html', { sourcemaps: './' })); } export const buildSass = scss; WHVMQpMFKT const gulp = require('gulp'); const sass = require('gulp-sass'); const sourcemaps = require('gulp-sourcemaps'); gulp.task('sass', () => { return gulp.src('src/**/*.scss', { base: 'src' }) .pipe(sourcemaps.init()) .pipe(sass()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('public_html')); }); WܥͰTSDϝιουͱEFTUϝιουͷୈҾͷΦϓγϣϯʹ TPVSDFNBQTϓϩύςΟΛͤΔΑ͏ʹͳͬͨɻ USVFʹઃఆ͢ΔͱJOMJOFͰग़ྗ͞Εɺग़ྗ͢ΔύεΛจࣈྻͰઃఆ͢Δͱ֎෦ϑΝΠϧͰग़ྗ͞ΕΔɻ ࢀߟɿIUUQTHVMQKTDPNEPDTFOBQJTSDTPVSDFNBQT
ଞʹ͋Δ͚Ͳৄ͘͠ ެࣜυΩϡϝϯτΛݟͯͶ IUUQTHVMQKTDPNEPDTFOBQJDPODFQUT
·ͱΊ
·ͱΊ w πʔϧ͍͚͕େࣄɻHVMQπʔϧͷ̍ͭɻ HVMQ͕ಘҙͳ͜ͱHVMQʹɻ XFCQBDL͕ಘҙͳ͜ͱXFCQBDLʹΒͤΔɻ w Ϟμϯͳ+4Ͱॻ͚ͯɺࠓ·ͰϓϥάΠϯͰิ͍ͬͯͨػೳ͕ Ճ͞ΕͨHVMQWʹΞοϓσʔτ͠Α͏ɻ w 1BSDFMಋೖ؆୯ͰૉΒ͍͠πʔϧ͚ͩͲɺ
8&#αΠτ੍࡞ք۾ͰHVMQ·ͩ·ͩݱɻʢͷɺͣʜʣ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠