Slide 1

Slide 1 text

JavaScript Bootcamp 2020 2020, 7th April @ Recruit Technologies Kento TSUJI @maxmellon

Slide 2

Slide 2 text

΍Δ͜ͱɺ΍Βͳ͍͜ͱ ΍Δ͜ͱ ΍Βͳ͍͜ͱ ɾ ϥΠϒϥϦͷ࢖͍ํ ɾ build΍preprocessपΓ ɾ ϨΨγʔͳه๏ͷৄࡉ (஌͓ͬͯ͘͜ͱ͸ॏཁ) ɾ جຊతͳه๏ ɾ ΫϥΠΞϯτ࣮૷ ɾ View ͱ ϩδοΫͷ ੾Γ෼͚ ޙͰݟ͓ͯ͘ͱྑͦ͞͏ͳ΋ͷ https://github.com/asciidwango/js-primer js-primer Ͱݕࡧ

Slide 3

Slide 3 text

ϑϩϯτΤϯυΤϯδχΞͱ JavaScript • ϦΫϧʔτςΫϊϩδʔζͷ “ϑϩϯτΤϯυΤ ϯδχΞ” ͷఆٛ͸޿ͯ͘ਂ͍ • HTML/CSS/JSΛ۶ࢦͯ͠ΫϥΠΞϯτΛ࡞Δ͚ͩ Ͱ͸ͳ͍ • ϑϩϯτΤϯυͷͨΊͷαʔόʔ΍ύϑΥʔϚϯ ενϡʔχϯάɺϢʔβϏϦςΟ޲্ͳͲ༷ʑ

Slide 4

Slide 4 text

ࠓ೔ͷྲྀΕ 1. JavaScript ͷجຊ 2. JavaScript ΛͱΓ͋͑ͣ৮ͬͯΈΔ 3. JavaScript Ͱ؆୯ͳΞϓϦέʔγϣϯΛ ࡞ͬͯΈΔ

Slide 5

Slide 5 text

৮ͬͯΈΑ͏

Slide 6

Slide 6 text

ͱΓ͋͑ͣಈ͔ͯ͠ΈΔ PDF ͰΈ͍ͯΔํ΁ : gifΞχϝͳͷͰදࣔ͞Ε·ͤΜ

Slide 7

Slide 7 text

$ node -v v11.10.1 $ node > // ͜͜ͰJavaScriptΛ࣮ߦ͢Δ͜ͱ͕Ͱ͖·͢ undefined > 1 + 1; 2 > var test = "hoge"; undefined > test 'hoge' > function sample() { ... var num = 5; ... return num; ... } undefined > sample() 5

Slide 8

Slide 8 text

ϒϥ΢βͰ΋ಈ͔ͯ͠ΈΔ

Slide 9

Slide 9 text

Chrome Devtools ΞυϨεόʔ͔Β http://example.com ΁ΞΫηε ͜Ε

Slide 10

Slide 10 text

Node.js ͷ REPLͷΑ͏ʹ ࣮ߦͰ͖Δ ϩάग़ྗʹՃ͑ͯ࠷ޙͷࣜͷ݁Ռ͕දࣔ͞ΕΔ

Slide 11

Slide 11 text

௨৴಺༰ΛΈͯΈΔ

Slide 12

Slide 12 text

Chrome Devtools ͜Ε

Slide 13

Slide 13 text

͕͜͜੺͘ͳ͍ͬͯΔͷΛ֬ೝ͔ͯ͠ΒϦϩʔυ͢Δ C

Slide 14

Slide 14 text

JavaScript ͷ ϑΝΠϧΛ ࡞ͬͯಈ͔ͯ͠ΈΔ

Slide 15

Slide 15 text

Hello World PDF ͰΈ͍ͯΔํ΁ : gifΞχϝͳͷͰදࣔ͞Ε·ͤΜ

Slide 16

Slide 16 text

$ touch helloworld.js $ code helloworld.js $ node helloworld.js Hello World 01 02 console.log('Hello World');

Slide 17

Slide 17 text

αʔόʔαΠυͷ JavaScript ͱ ΫϥΠΞϯταΠυͷ JavaScript • Ұൠతʹ Node.js Ͱಈ͔͢ JavaScript Λ αʔόʔαΠυͷ JavaScript • ϒϥ΢βͰಈ͔͢ JavaScript Λ ΫϥΠΞϯταΠυͷ JavaScript ࡢ೔ͷલ൒ͷߨٛͰ΋঺հ͞Ε·ͨ͠Ͷ

Slide 18

Slide 18 text

JavaScript ͷ Syntax

Slide 19

Slide 19 text

Variable declaration ม਺ ɾ એݴ

Slide 20

Slide 20 text

Variable declaration είʔϓ ࠶୅ೖ Մมෆม DPOTU MFU WBS

Slide 21

Slide 21 text

Variable declaration είʔϓ ࠶୅ೖ Մมෆม DPOTU ϒϩοΫ ෆՄ Մม MFU ϒϩοΫ Մೳ Մม WBS ؔ਺ Մೳ Մม

Slide 22

Slide 22 text

είʔϓ let a = 1; if (a === 1) { let a = 2; console.log(a); // 2 } console.log(a); // 1 ϒϩοΫ var a = 1; if (a === 1) { var a = 2; console.log(a); // 2 } console.log(a); // 2 ؔ਺ (άϩʔόϧ)

Slide 23

Slide 23 text

࠶୅ೖ ͱ ՄมɺෆՄม ؔ਺ (άϩʔόϧ) const ͸ ࠶୅ೖෆՄೳ const a = 1 a = 2 Uncaught SyntaxError: Identifier 'a' has already been declared const ࠶୅ೖ͕Ͱ͖ͳ͍͚ͩͰॻ͖׵͑ΕΔ const a = [] a.push(1) console.log(a) // [1] a.pop() console.log(a) // []

Slide 24

Slide 24 text

ͲΕ͔ͭ͑͹͍͍ͷʁ • ࠶୅ೖ͸ϩδοΫΛෳࡶԽͤ͞Δ͜ͱ͕ଟ͍ → جຊతʹ const • Ͳ͏ͯ͠΋࠶୅ೖ͍ͨ͠ͱ͖ → let • var ͸ lint Ͱېࢭ͢Δ͜ͱ΋ଟ͍

Slide 25

Slide 25 text

ࣜͱจ

Slide 26

Slide 26 text

ࣜͱจ • JavaScript ͸ จ (Statement) ͱ ࣜ (Expression) ͔Βߏ੒͞Ε͍ͯΔ • ࣜ͸ධՁ͢Δͱ݁Ռͷ஋͕͋Δ • จ͸ॲཧͷ̍εςοϓ • ࣜ͸จʹͳΕΔ ʢࣜจ ޙड़ ʣ

Slide 27

Slide 27 text

ࣜ • ؆୯ʹݴ͏ͱม਺ʹ୅ೖͰ͖Δ΋ͷ • 13 ΍ ‘foo’ ͱ͍ͬͨϦςϥϧ • bar ͱ͍͏ ม਺ • ؔ਺ࣜ (ޙड़) ͳͲͳͲ

Slide 28

Slide 28 text

ࣜ // 1 ͸͔ࣜͩΒ୅ೖͰ͖Δ const a = 1 // JavaScript ͷੈքͰ͸ؔ਺΋ࣜ const doSomeThing = function() { console.log('doSomeThing') } // ؔ਺͕୅ೖ͞Ε͍ͯΔͷͰݺͼग़͢͜ͱ͕Ͱ͖Δ doSomeThing()

Slide 29

Slide 29 text

จ • จ͸ॲཧ͢Δ 1 εςοϓ • จ຤ʹ ; Λ͚ͭΔͱ จͷ۠੾ΓʹͳΔ • ; Λ͚ͭͳͯ͘΋ ASI ͕উखʹ ; Λ͍ΕΔ • if จ ΍ for จ ΋จ͔ͩΒ୅ೖͰ͖ͳ͍ ΦʔτηϛίϩϯΠϯαʔγϣϯ

Slide 30

Slide 30 text

ϒϩοΫจ • {, } Λ࢖ͬͯෳ਺ͷจΛؚΉจΛॻ͚Δ { console.log("hoge"); console.log("poge"); } if (true) { console.log("hoge"); console.log("poge"); } • ྫ : if จͱϒϩοΫจͷ૊Έ߹Θͤ

Slide 31

Slide 31 text

function

Slide 32

Slide 32 text

ؔ਺એݴͱؔ਺ࣜ function Greeting() { console.log('hello') } • จͱࣜͱ͍͏͜ͱ͕ҧ͏ • એݴ͸ר্͖͕͛ى͖Δ const Greeting = function() { console.log('hello') } ؔ਺એݴ ؔ਺ࣜ

Slide 33

Slide 33 text

ؔ਺ࣜͱΞϩʔϑΝϯΫγϣϯ • ୹͔͚͘Δ • ΞϩʔϑΝϯΫγϣϯ͸ this Λଋറ͠ͳ͍ ؔ਺ࣜͱΞϩʔϑΝϯΫγϣϯͷҧ͍ ୹͔͚͘ΔͷͰΞϩʔϑΝϯΫγϣϯΛ࢖͏৔໘͸ଟ͍ const Greeting = function() { console.log('hello') } const Greeting = () => { console.log(‘hello') }

Slide 34

Slide 34 text

JavaScript ʹ͓͚Δ this • Ξϩʔؔ਺Ҏ֎ͷؔ਺ • Ϋϥε • ΦϒδΣΫτ • bindؔ਺ this ͷ ίϯςΩετ ͕มΘΔ৔໘ ҰൠతͳݴޠͱUIJT͕ҧ͏ͱݴΘΕΔͷ͸ UIJTͷίϯςΩετ͕มΘͬͯ͠·͏͔Β https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/this ࠓ͸׬શͳཧղ͡Όͳͯ͘΋ྑ͍ Θ͔Βͳ͘ͳͬͨΒௐ΂Α͏

Slide 35

Slide 35 text

ΞϩʔϑΝϯΫγϣϯ const foo = (a, b) => { return a + b } ΞϩʔϑΝϯΫγϣϯͰ͸͕ࣜҰͭͷͱ͖ʹݶΓϒϩοΫΛলུ͔͚ͯ͠Δ const foo = (a, b) => a + b // ·ͨ͸ const foo = (a, b) => ( a + b
 ) ϒϩοΫΛলུͨ͠৔߹ɼͦͷࣜΛ࣮ߦͨ݁͠Ռ͕ return ͞ΕΔ

Slide 36

Slide 36 text

Ҿ਺ function doSomeThing(a, b, c = 0) {
 console.log('a %o', a) console.log('b %o', b) console.log('c %o', c) } doSomeThing(1, 2) // a 1 // b 2 // c 0 doSomeThing(...[1, 2, 3]) // a 1 // b 2 // c 3 function doSomeThing(...args) {
 console.log('args %o', args) } doSomeThing(1, 2, 3) // args [1, 2, 3] doSomeThing([1], 2, 3) // args [[1], 2, 3] doSomeThing(...[1, 2, 3]) // args [1, 2, 3] σϑΥϧτҾ਺ Մม௕

Slide 37

Slide 37 text

object

Slide 38

Slide 38 text

Objectͱ͸ • σʔλͱػೳͷू߹ • ϓϩύςΟͱϝιου͕ઃఆͰ͖Δ

Slide 39

Slide 39 text

ྫ const person = { name: ['Bob', 'Smith'], age: 32, gender: 'male', interests: ['music', 'skiing'], bio() { alert(`${this.name.join(' ')} is ${this.age} years old.`); }, greeting() { alert('Hi! I\'m ' + this.name[0] + '.'); } }

Slide 40

Slide 40 text

objectʹ͓͚Δmethod const person = { greeting() { alert('Hi!'); } }; const person = { greeting: function() { alert('Hi!'); } }; • ӈͷํ͕୹͔͚͘Δ • ҙຯ͸શ͘ಉ͡

Slide 41

Slide 41 text

const person = { _age: 25, _name: 'maxmellon', get age() { return this._age; }, get name() { return this._name; } }; ήολʔ΍ηολʔ͕࢖͑Δ

Slide 42

Slide 42 text

Object Λ࡞Δ const age = 26 const name = 'Kento TSUJI' const parson = { age: age, name: name, } ͜Ε͸ ͜͏͔͚Δ const age = 26 const name = 'Kento TSUJI' const parson = { age, name, }

Slide 43

Slide 43 text

Object ͔Β஋ΛऔΓग़͢ const age = parson.age const name = parson.name ͜Ε͸ ͜͏͔͚Δ const { age, name } = parson

Slide 44

Slide 44 text

Object Λίϐʔ͢Δ const copied = { ...parson } const copied = Object.assign({}, parson) Object.assign ʹΑΔ Shallow Copy εϓϨου ʹΑΔ Shallow Copy Object ͕ωετͨ͠ͱ͖ɼ ࢠͷObjectͷࢀর͸มԽ͠ͳ͍͜ͱʹ஫ҙ ԋࢉࢠ͡Όͳ͍͚ͲԿނ͔ εϓϨουԋࢉࢠͱΑ͘ݴΘΕ͕ͪ (MDN্΋Ұ࣌ظ͸ԋࢉࢠදهͩͬͨ) Object.assign ͱ εϓϨουߏจ ͸Ұݟྨࣅ͍ͯ͠Δ͕ҧ͍͕͋ΔͷͰ஫ҙ ಛʹ Object.prototype ͕ॻ͖׵͑ΒΕ͍ͯΔ৔߹ ಘΒΕΔ΋ͷ͕มΘ͖ͬͯ·͢ JavaScript ͷ࢓༷ ϨϕϧͰ શ͘ผͷૢ࡞Λߦ͍ͬͯ·͢ (assign ͸ Set, spread ͸ CreateDataPropertyOrThrow

Slide 45

Slide 45 text

Object ΛϚʔδ͢Δ const a = { foo: 1, hoge: 'a', } const b = { hoge: 'b', poge: 2, } const merged = { ...a, ...b } { foo: 1, hoge: 'b', poge: 2, } ϚʔδͰ΋ `spread` ͕࢖͑Δ

Slide 46

Slide 46 text

class

Slide 47

Slide 47 text

ΫϥεએݴͱΫϥεࣜ class Hoge { method() { 
 } } const Hoge = class { method() { } } • Ϋϥεએݴ͸ ר্͖͕͛ى͖ͳ͍ const Hoge = class Hoge { method() { } } Ϋϥεએݴ Ϋϥεࣜ ໊લ෇͖Ϋϥεࣜ

Slide 48

Slide 48 text

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } // ήολʔ get area() { return this.calcArea(); } // ϝιου calcArea() { return this.height * this.width; } } const square = new Rectangle(10, 10); console.log(square.area); // 100 square.height = 20; // 'aaaa' https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes ϝιουఆٛ

Slide 49

Slide 49 text

Tips • JavaScript͸prototypeϕʔεͷݴޠ • class ͸ prorotypeͱObjectΛ࢖ͬͨ දݱΛ؆ܿʹΘ͔Γ΍͘͢ॻͨ͘Ίͷ΋ͷ • ͳͷͰ͍ΘΏΔΠϯελϯεϝιου͸ AnyClass.prototype.method ͷΑ͏ʹදݱ͢Δ ↑ ͜Ε͸ new AnyClass().method() • ελςΟοΫؔ਺͸AnyClass.staticMethod ࣮࣭తʹ͸౶ҥߏจ͚ͩͲɼclassߏจͰॻ͔Εͨ΋ͷΛ prototype Ͱਖ਼֬ʹ࠶ݱ͢Δͷ͸ͪΐͬͱେม

Slide 50

Slide 50 text

༨ஊ private class field

Slide 51

Slide 51 text

Ϟμϯͳϒϥ΢βͰ͸private field ͕࢖͑Δ • ϨΨγʔϒϥ΢βͰ࢖͏ʹ͸ transpile ͳͲͷϓϦϓϩηε͕ඞཁ https://github.com/tc39/proposal-private-fields/blob/master/OLD_README.md class Point { #x = 0; #y = 0; constructor(x = 0, y = 0) { this.#x = +x; this.#y = +y; } get x() { return this.#x } set x(value) { this.#x = +value } get y() { return this.#y } set y(value) { this.#y = +value } }

Slide 52

Slide 52 text

Ϟμϯͳϒϥ΢βͰ͸private field ͕࢖͑Δ • ϨΨγʔϒϥ΢βͰ࢖͏ʹ͸ transpile ͳͲͷϓϦϓϩηε͕ඞཁ https://github.com/tc39/proposal-private-fields/blob/master/OLD_README.md class Point { #x = 0; #y = 0; constructor(x = 0, y = 0) { this.#x = +x; this.#y = +y; } get x() { return this.#x } set x(value) { this.#x = +value } get y() { return this.#y } set y(value) { this.#y = +value } }

Slide 53

Slide 53 text

ಉظ / ඇಉظ

Slide 54

Slide 54 text

΋͠ඇಉظ͕ͳ͔ͬͨΒͲ͏ͳΔ͔ • αʔόʔ͔ΒσʔλΛड͚औΔ·Ͱ ଞͷૢ࡞͕Ͱ͖ͳ͍ • ΫϦοΫ͢Δͱϒϥ΢β͕ݻ·Δ • ॲཧ͕Ұ͔ͭͣͭ͠Ͱ͖ͳ͍ Α͋͘Δצҧ͍ : γϯάϧεϨου === ಉظॲཧ͔͠ͳ͍ ࣮ࡍʹ͸Πϕϯτϧʔϓͱ͍͏΋ͷͰλεΫΛΩϡʔͰ؅ཧͯ͠ ͦͷ࣌఺࣌఺Ͱಈ͔͢΂͖ॲཧΛΩϡʔ͔ΒऔΓग़ͯ͠ॲཧ͍ͯ͠Δ

Slide 55

Slide 55 text

callback ʹΑΔඇಉظ taskA(() => { taskB(() => { taskC(() => { }) }) }) • ͍ͭऴΘΔ͔Θ͔Βͳ͍ taskA ʹ callback ؔ਺Λ ౉ͯ͠ऴΘ͔ͬͯΒ࣮ߦ͢ΔॲཧΛҠৡ͢Δ ωετ͕ͲΜͲΜਂ͘ͳͬͯ͠·͏

Slide 56

Slide 56 text

promise

Slide 57

Slide 57 text

promise new Promise((resolve, reject) => { asynchronizedTask((err, result) => { if (err) reject(err) resolve(result) }) }).then(res => console.log(res)) .catch(err => console.error(err)) • ඇಉظॲཧͷந৅Խ • then Ͱ ੒ޭͨ͠ͱ͖ͷϋϯυϥΛ ෇༩͢Δ ৽͍͠PromiseΛฦ͢ (ݫີʹ͸ࣦഊϋϯυϥ΋௥ՃͰ͖Δʣ • catch Ͱ ࣦഊϋϯυϥͷίʔϧόοΫΛ෇༩͢Δ

Slide 58

Slide 58 text

promise QSPNJTF UIFO IBOEMFS UIFO IBOEMFS DBUDI PO3FKFDUJPO FSSPSIBOEMJOH QSPNJTF UIFO IBOE UIFO IBOE DBUDI PO3FKF ଴ػঢ়ଶ ੒ޭ ࣦഊ promise͕ࣦഊͨ͠ͱ͖ thenͷୈೋҾ਺ͷhandlerͰྫ֎͕ग़ͨͱ͖ return return ੒ޭ ࣦഊ thenͷϋϯυϥ͸ඞͣPromiseΛฦ͢ͷͰ chainͰ͖Δ chainͰ͖Δ

Slide 59

Slide 59 text

example new Promise(resolve => { // 1ඵޙʹ ୈ1Ҿ਺ͷؔ਺Λ࣮ߦ͢Δ setTimeout(() => resolve(1), 1000) }) .then(res => { console.log(res) return res + 1 }) .then(res => { console.log(res) return res + 1 }) .then(res => { console.log(res) }) ࣮ߦ͢ΔͱͲΜͳϩάग़ྗ͞ΕΔʁ

Slide 60

Slide 60 text

fetch API const url = 'https://hacker-news.firebaseio.com/v0/item/ 2921983.json?print=pretty' fetch(url) .then(resp => resp.json()) .then(resp => console.log(resp)) • ྫ͑͹ɼhacker news ͷ API Λୟ͘ͱ͢Δ { "by" : "norvig", "id" : 2921983, "kids" : [ 2922097, 2922429, 2924562, 2922709, 2922573, 2922140, 2922141 ], "parent" : 2921506, "text" : "Aw shucks, guys ... you make me blush with your compliments.

Tell you what, Ill make a deal: I'll keep writing if you keep reading. K?", "time" : 1314211127, "type" : "comment" }

Slide 61

Slide 61 text

async / await

Slide 62

Slide 62 text

async function const url = 'https://hacker-news.firebaseio.com/v0/item/ 2921983.json?print=pretty' const fetchAsync = async () => { try { const resp = await fetch(url) return resp.json() } catch (err) { console.error(err) } } await fetchAsync() ಉظؔ਺ͷΑ͏ʹPromiseΛѻ͏ Promise Λ async / await Ͱॻ͚Δ

Slide 63

Slide 63 text

Module

Slide 64

Slide 64 text

Ϟδϡʔϧͷྺ࢙ • λά ΍ prototype.js ͳͲ…. • AMD (RequireJS) • Browserify • UMD • ESModules ࠓ͸׬શͳཧղ͡Όͳͯ͘΋ྑ͍ ࿩͢ͱΩϦ͕ແ͘ͳΔ ͍Ζ͍Ζ ͋ͬͨ

Slide 65

Slide 65 text

ࠓ೔ͷԋशͰ࢖͏΋ͷ Webଆ : ESModules APIଆ : CommonJS import doSomeThing from './doDomeThing.js' const a = 1 export default a const doSomeThing = require('./doSomeThing') const a = 1 module.exports = a Import / export ͸ಛʹෳࡶɼ໊લ෇͖ ΍ default, as ͳͲ৭ʑͰ͖Δ෼ෳࡶ ࡉ͔͘͸ԋशͰ࢖͍ͳ͕Βղઆ

Slide 66

Slide 66 text

DOM

Slide 67

Slide 67 text

DOM ͷ ૠೖ const parent = document.createElement("div"); const child = document.createElement("span"); parent.appendChild(child); console.log(parent); //
ଞʹ΋ insertBefore, replaceChild ౳͕͋Δ

Slide 68

Slide 68 text

DOM ͷ࡟আ // ਌ཁૉ͕ෆ໌ɺෆఆͷ৔߹ͷํ๏ Const node = document.getElementById("nested"); if (node.parentNode) { node.parentNode.removeChild(node); } DOM ʹؔ͢Δ API ͸ https://qiita.com/uhyo/items/1c565b61d934cbb88c2e ͳͲ͕Θ͔Γ΍͍͢

Slide 69

Slide 69 text

ࠔͬͨͱ͖Ͳ͏͢Δ͔

Slide 70

Slide 70 text

ࠔͬͨͱ͖ • ׂ͍͔ͭ͘Ѫͨ͠΋ͷ͕͋Γ·͢ ԋࢉࢠ : https://jsprimer.net/basic/operator/ σʔλܕ : https://jsprimer.net/basic/data-type/ ৚݅෼ذ : https://jsprimer.net/basic/condition/ ϧʔϓ : https://jsprimer.net/basic/loop/ ޙͰݟ͓ͯ͘ͱྑͦ͞͏ͳ΋ͷ https://github.com/asciidwango/js-primer js-primer Ͱݕࡧ

Slide 71

Slide 71 text

ex. JavaScript ͔Β DOMΛ࡞Γ͍ͨ • ҰൠͷهࣄΑΓ΋ ͳΔ΂͘ MDN ΛಡΉบΛ ʢݚमͱ͍͏ҙຯ΋ࠐΊͯʣ • ௐ΂ͯΘ͔Βͳ͔ͬͨͱ͖͸ ԿΛͨͯ͘͠ɼͲ͏ௐ΂͔ͨ ڞ༗ͯ͘͠ΕΔͱخ͍͔͠΋

Slide 72

Slide 72 text

ԋश 1. JavaScript ͷجຊ 2. JavaScript ΛͱΓ͋͑ͣ৮ͬͯΈΔ 3. JavaScript Ͱ؆୯ͳΞϓϦέʔγϣϯΛ ࡞ͬͯΈΔ

Slide 73

Slide 73 text

४උ $ npm install @recruit-tech/javascripting -g $ javascripting ↑ ͜ΕΛ࣮ߦ ↓ Έ͍ͨͳը໘͕ͰΕ͹ OK

Slide 74

Slide 74 text

೔ຊޠ΁ͷม͑ํ

Slide 75

Slide 75 text

ΨϯΨϯ ਐΊͪΌ͍ͬͯͩ͘͞

Slide 76

Slide 76 text

ޙ൒

Slide 77

Slide 77 text

ԋश 1. JavaScript ͷجຊ 2. JavaScript ΛͱΓ͋͑ͣ৮ͬͯΈΔ 3. JavaScript Ͱ؆୯ͳΞϓϦέʔγϣϯΛ ࡞ͬͯΈΔ

Slide 78

Slide 78 text

TODO ؅ཧ ͷ SPA Λ࡞੒͢Δ

Slide 79

Slide 79 text

SPAΛ࡞Δ্Ͱॏཁͳ͜ͱ • View ͱ ϩδοΫΛ੾Γ཭͢ 7JFX ϩδοΫ มߋස౓ : ߴ มߋස౓ : ௿ ςετ೉౓ : ߴ ςετ೉౓ : ௿ ViewͱϩδοΫ͕ີ݁߹ʹͳΔͱ ςετ͕ॻ͖ʹ͔ͬͨ͘Γ มߋʹऑ͘ͳͬͨΓ͢Δ

Slide 80

Slide 80 text

View ͱ ϩδοΫΛ੾Γ཭͢ • MVC (Model-View-Controller) • MVVM (Model-View-ViewModel) • Flux • ͳͲͳͲ… ViewͱϩδοΫΛ੾Γ཭ͨ͢Ίʹ༷ʑͳΞʔΩςΫνϟύλʔϯ͕༗Δ

Slide 81

Slide 81 text

ࠓճ͸ flux Ͱ࡞ͬͯΈΔ ͳͥ flux ͔ ͸͜ͷεϥΠυ͕Θ͔Γ΍͍͢ https://speakerdeck.com/geta6/reacttofluxfalsekoto?slide=39 7JFX %JTQBUDIFS 4UPSF "DUJPO

Slide 82

Slide 82 text

ίʔεબ୒ ϕʔγοΫίʔε νϟϨϯδίʔε TODOҰཡͱTODO࡞੒ ػೳ͕͢Ͱʹ࣮૷ࡁΈ طଘͷ࣮૷Λݟͳ͕Β TODO ͷ࡟আ ΍ TODO ͷߋ৽Λ࣮૷͍ͯ͘͠ HTML + CSS + API αʔόʔ͚ͩͷঢ়ଶ͔ΒϑϧεΫϥονͰ TODO ΞϓϦΛ࡞੒͢Δ ΞʔΩςΫνϟϨϕϧͷઃܭ͔Βࣗ෼Ͱ΍ͬͯΑ͍ (Flux ͡Όͳͯ͘΋͍͍) https://github.com/recruit-tech/bootcamp-2020-js

Slide 83

Slide 83 text

ϕʔγοΫίʔεͷ ݱঢ়ͷ࣮૷ΛಡΜͰݟΔ

Slide 84

Slide 84 text

͢Ͱʹ࣮૷͞Ε͍ͯΔػೳ(basic) ϕʔγοΫίʔε νϟϨϯδίʔε TODOҰཡͱTODO࡞੒ ػೳ͕͢Ͱʹ࣮૷ࡁΈ طଘͷ࣮૷Λݟͳ͕Β TODO ͷ࡟আ ΍ TODO ͷߋ৽Λ࣮૷͍ͯ͘͠ HTML + CSS + API αʔόʔ͚ͩͷঢ়ଶ͔ΒϑϧεΫϥονͰ TODO ΞϓϦΛ࡞੒͢Δ ΞʔΩςΫνϟϨϕϧͷઃܭ͔Βࣗ෼Ͱ΍ͬͯΑ͍ (Flux ͡Όͳͯ͘΋͍͍) • TODO Ұཡͷऔಘ • TODO ͷ࡞੒ ͜Ε͔Β࡞Δػೳ • TODO ࡟আ • TODO ͷ׬ྃঢ়ଶͷߋ৽

Slide 85

Slide 85 text

TODO࡟আ ΛεςοϓɾόΠɾεςοϓͰ࡞Δͱ͢Δͱ… ϕʔγοΫίʔε νϟϨϯδίʔε TODOҰཡͱTODO࡞੒ ػೳ͕͢Ͱʹ࣮૷ࡁΈ طଘͷ࣮૷Λݟͳ͕Β TODO ͷ࡟আ ΍ TODO ͷߋ৽Λ࣮૷͍ͯ͘͠ HTML + CSS + API αʔόʔ͚ͩͷঢ়ଶ͔ΒϑϧεΫϥονͰ TODO ΞϓϦΛ࡞੒͢Δ ΞʔΩςΫνϟϨϕϧͷઃܭ͔Βࣗ෼Ͱ΍ͬͯΑ͍ (Flux ͡Όͳͯ͘΋͍͍) • 1. ࡟আϘλϯΛԡͨ͠Βର৅ͷTODOͷIDΛ ϩάʹग़͢ • 2. ϩάग़ྗͷ୅ΘΓʹ Action Λ dispatch ͯ͠ store Ͱ ϩάΛग़ྗ • 3. API αʔόʔ͸ߋ৽ͤͣ Store ͷσʔλ্Ͱ ࣮ࡍʹ࡟আ • 4. API ʹ௨৴͢Δ෦෼Λ࣮૷

Slide 86

Slide 86 text

ͦΕͰ͸ ࣮ࡍʹ खΛಈ͔ͯ͠ߦ͖·͠ΐ͏