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
my tools
Search
Yuta Hiroto
August 10, 2016
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
my tools
8/10の社内勉強会資料
Yuta Hiroto
August 10, 2016
More Decks by Yuta Hiroto
See All by Yuta Hiroto
Node8.3.0について
abouthiroppy
1
3.2k
ECMAScript
abouthiroppy
0
710
reflow/repaint
abouthiroppy
0
210
OSSを楽しむ話
abouthiroppy
0
200
React Nativeを触ってみた話
abouthiroppy
0
190
Other Decks in Technology
See All in Technology
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
980
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
4k
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
0
210
AI時代に顧客へ最速で価値を 届けるための試行錯誤 〜「AI × マネジメント」領域におけるmentoのケース〜
posterkeisuke
0
110
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
170
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
ASTを使って影響範囲を特定する
nealle
0
180
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
180
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Unsuck your backbone
ammeep
672
58k
Abbi's Birthday
coloredviolet
3
9.9k
Navigating Weather and Climate Data
rabernat
0
510
Navigating Team Friction
lara
192
16k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Thoughts on Productivity
jonyablonski
76
5.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
The agentic SEO stack - context over prompts
schlessera
0
920
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
࠷ۙͷࣗͷ πʔϧࣄ frontier-dev-jsษڧձ
ҙ • ࠓճwebϑϩϯτΤϯυدΓͷΛ͠·͢ • ϑϨʔϜϫʔΫςετϥϯφʔͷ ͠·ͤΜ • 8ׂͰ͢(དྷिެ։͠·͢ɻɻ)
ࣗݾհ Github abouthiroppy times_about_hiroppy
ࠓͬͯͳ͍πʔϧͱ ࠓ͍ͬͯΔπʔϧ ͷ
ࠓͬͯͳ͍πʔϧ܈ etc.
ࠓ͍ͬͯΔπʔϧ܈ babel npm webpack eslint
ҠΓมΘΓ͕ ܹ͗ͯ͢͠Θ͔Βͳ͍…
࠷ݶɺ։ൃͰ΄͍͠ͷ • ύοέʔδཧπʔϧ • ৽͍͠ߏจͰॻ͍ͯݹ͍ϒϥβʹ ରԠͤ͞ΔΑ͏ʹ͢ΔτϥϯεύΠϥ • Ϟδϡʔϧղܾπʔϧ • lintπʔϧ(੩తݕূπʔϧ)
• ςετπʔϧ(࣌ؒͷ߹্ɺࠓճ͠·ͤΜ)
ύοέʔδཧ bower npm vs
bower vs npm • ੲϑϩϯτΤϯυbowerɺόοΫΤϯυ(node)npmͩͬͨ • ύοέʔδ͕྆ํ͋ΔͱݶΒͳ͍͠ɺόʔδϣϯҧ͏Մೳੑ͋ͬͨ • browserifyͷ͓͔͛Ͱnode.jsͱಉ͡ͰϑϩϯτΤϯυͷίʔυϞδϡʔϧػೳΛ͍ ॻ͚ΔΑ͏ʹͳͬͨͨΊɺnpmͰͷཧͷํָ͕ʹͳͬͨ
bower npm vs
τϥϯεύΠϥ traceur-compiler babel vs
τϥϯεύΠϥͱʁ • ৽͍͠ߏจΛࠓͷ࣌ͷ ϒϥβͰಈ͘Α͏ʹ ίʔυΛు͍ͯ͘ΕΔ πʔϧ • ϒϥβʹΑͬͯ৽͍͠ ߏจͷ࣮Ϩϕϧ͕ҟͳ Δ͕ɺ։ൃऀͦΕΛ
ؾʹ͠ͳͯ͘Α͘ͳΔ const post = (mail = 'tegami') => { const index = 0 } 'use strict'; var post = function post() { var mail = arguments.length <= 0 || arguments[0] === undefined ? 'tegami' : arguments[0]; var index = 0; };
࣌ES2015(ES6) େମαϙʔτ͞Ε͖͕ͯͨɺ աڈͷϒϥβIE11ͳͲͷରԠ͕͍ͷʹରͯ͠ ಈ͘Α͏ʹ͢Δ(ES5མͱ͢)ʹτϥϯεύΠϧΛ͢Δඞཁ͕͋Δ FYI: http://kangax.github.io/compat-table/es6/
ES2015 • ECMAScriptͱ͍͏JavaScriptͷඪ४ن֨Ͱ ES2015(ES6)ͱୈ6൛ͷϦϦʔε • arrows • classes • enhanced
object literals • template strings • destructuring • default + rest + spread • let + const • iterators + for..of • generators • unicode • modules • module loaders • map + set + weakmap + weakset • proxies • symbols • subclassable built-ins • promises • math + number + string + array + object APIs • binary and octal literals • reflect api • tail calls Ճ͞Εͨػೳ
traceur-compiler vs babel traceur-compiler babel vs • ϥϯλΠϜΛඞཁͱ͠ͳ͍ͷͰ࣮ߦ࣌ͷΦʔόϔου͕ͳ͍ • babelݸʑͷڥʹରͯ͠มΛ༗ޮɺແޮʹ͢Δ͜ͱ͕Ͱ͖Δ
• babelͷํ͕jsxͷαϙʔτ͕ૣ͔ͬͨ • ίϛϡχςΟ͕׆ൃ
Ϟδϡʔϧղܾ vs browserify webpack
ओͳϞδϡʔϧγεςϜ <script src="./index.js"></script> require('./book') define(function() { return function() {} });
import book from './book'; <script> CommonJS module AMD ES2015 module
࠷ۙͷಈ • ES2015 moduleͰॻ͖͍ͨʂ • cssͱ͔ը૾ͱ͔Λ·ͱΊ͍ͨʂ (importͯ͠JavaScriptͰѻ͍͍ͨ) • JavaScriptͰHTMLΛѻ͏reactͷӨڹ େ͖͍ͱࢥ͏
browserify vs webpack ͔͠͠ɺ͜ͷ2ͭత͕શ͘ಉ͡ͱ͍͏Θ͚Ͱͳ͍ͷͰ࣌ͱ߹ʹΑΔͱࢥ͏ • browserifyJavaScriptͷΈΛϞδϡʔϧͱͯ͠ѻ͏ͷ͕తͱ͢Δ͕ɺ webpackjs, css, imageͳͲΛͯ͢Ϟδϡʔϧͱߟ͑JavaScript͔Βݺͼग़͢͜ͱ͕Մೳ •
·ͨੜޙͷϑΝΠϧbrowserify1ͭʹͳΔ͕ɺwebpackׂ͠ੜ͢Δ͜ͱ͕ՄೳͰ͋Δ vs browserify webpack
webpack • σϑΥϧτͰAMDͱCommonJSΛαϙʔτ͍ͯ͠Δ • Sass, Less, Coffee, TypeScriptͳͲΛม • css,
imageͳͲΛϞδϡʔϧͱͯ͠ಡΈࠐΈ͜ͱ͕Մೳ • LoaderPluginΛ͏͜ͱʹΑΓ֦ு͕Մೳ • ެࣜͷϦετʹΑΔͱେମLoader228ݸ, Plugin56ݸଘࡏ͢Δ • ෳͷόϯυϧϑΝΠϧΛग़ྗ͢Δ͜ͱ͕Մೳ • ։ൃϓϩμΫγϣϯͷઃఆ͕σϑΥϧτͰ͋Δ(sourceMap, uglify…) • dev-serverެࣜͰఏڙ͞Ε͍ͯΔ ॻ͖͖Εͳ͍͙Β͍ͳΜͰͰ͖Δʂ
lint jshint eslint vs
jshint vs eslint • eslintϧʔϧͷՃઃఆ͕ࣗ༝ͰPlugin͕๛ • ·ͨɺ༷ʑͳελΠϧΨΠυΛ؆୯ʹ͍ΕΔ͜ͱ͕Ͱ͖Δ (༗໊Ͳ͜Ζͩͱairbnbgoogle) jshint eslint
vs
͋ΕλεΫϥϯφʔɾɾɾ? grunt gulp
λεΫϥϯφʔ • ࠷ۙnpm scriptsҠߦ͢Δಈ͖͕ଟ͍ • ͍͍ͩͨwebpackͰղܾͰ͖ΔͷͰઃఆϑΝΠϧΛ ॻ͘΄ͲͰͳ͍ • ϑΝΠϧࢹ, τϥϯεύΠϧ,
Ϗϧυ… • ͦͦgruntgulpͷઃఆϑΝΠϧΛॻ͘ͷ͕େม
npm-scripts "scripts": { "test": "ava", "test:watch": "ava -w", "lint": "eslint
src", "start": "webpack-dev-server", "build": "webpack --config ./webpack.production.config.js" } ͜ͷΑ͏ʹॻ͘͜ͱ͕ՄೳͰ͋Δ $ npm start $ npm run test:watch package.jsonʹίϚϯυΛॻ͘͜ͱ͕Ͱ͖Δ
։ൃͷྲྀΕ package.jsonΛ࡞Δ webpack, babel-loaderΛೖΕΔ webpack.config.jsΛॻ͘ ࠓճwebpackΛϕʔεͰ։ൃ͢ΔఆͰॻ͖·͢
package.jsonΛ࡞Δ $ npm init { "name": "test", "version": "1.0.0", "description":
"", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "abouthiroppy <
[email protected]
>", "license": "MIT" }
ϥΠϒϥϦΛೖΕΔ $ npm i webpack babel-loader -D # package.jsonՃ͞ΕΔ "devDependencies":
{ "babel-loader": "^6.2.4", "webpack": "^1.13.1" } -D(—-save-dev) option devDependenciesʹ Πϯετʔϧͨ͠ϥΠϒϥϦ ͕ొ͞ΕΔ
ઃఆϑΝΠϧΛॻ͘ 'use strict'; const path = require('path'); module.exports = {
// ҾͰ͢ͳΒentry, output, resolveॻ͔ͳͯ͘ྑ͍ entry: path.join(__dirname, 'index.js'), output: { filename: path.join(__dirname, 'bundle.js') }, resolve: { extensions: ['', '.js'] }, module: { loaders: [ { test: /\.js$/, loader: 'babel', exclude: path.join(__dirname, 'node_modules') } ] } } webpack.config.js
ಈ͔͢ { "scripts": { "test": "echo \"Error: no test specified\"
&& exit 1", "start": "webpack -w", "build": "webpack -p" } } ޙhtmlͰຒΊࠐΈϒϥβͰ͑Δঢ়ଶʹͳΓʂ package.jsonʹίϚϯυΛొ͢Δͱָ npm start Λߦ͏ͱϑΝΠϧࢹ͕Ͱ͖Δ npm run buildΛߦ͏ͱ ϓϩμΫγϣϯ༻ͷίʔυ͕ੜ͞ΕΔ
·ͱΊ babel npm webpack eslint
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·͢ʂ