Slide 1

Slide 1 text

https://flic.kr/p/7g1xov ιʔεϨϏϡʔ͔ΒֶͿ +BWB4DSJQU  )5.-ϏΪφʔζ .VOFTBEB:PIFJ

Slide 2

Slide 2 text

About me 㾎 फఆ༸ฏ 㾎 גࣜձࣾϒοΫςʔϒϧ 㾎 !ZPIFJ.VOF 㾎 IUUQXXXZPIFJNOFU 㾎 )5.-ϏΪφʔζελοϑ 㾎 δʔεΞΧσϛʔϝϯλʔ 㾎 ࠷ۙͷڵຯɿ1ZUIPO ػցֶश ਺ֶ ౷ܭ

Slide 3

Slide 3 text

㾎 εϚϗ޲͚ిࢠॻ੶αΠτ 㾎 IUUQTEPLVTIPPKJLBOKQUPQ ✓ jQuery, Handlebars ✓ Single Page Architecture ಡॻͷ͓࣌ؒͰ͢

Slide 4

Slide 4 text

1PJOUPG7JFX ϨϏϡʔͰݟ͍ͯΔϙΠϯτ͸ʁ

Slide 5

Slide 5 text

1PJOUPG7JFX όά͕ͳͯ͘ಡΈ΍͍͢

Slide 6

Slide 6 text

1PJOUPG7JFX όά͕ͳͯ͘ಡΈ΍͍͢

Slide 7

Slide 7 text

1PJOUPG7JFX όά͕ͳͯ͘ಡΈ΍͍͢ νʔϜͷ੒௕

Slide 8

Slide 8 text

όά͕ͳ͍ίʔυʁ

Slide 9

Slide 9 text

όά͕ͳ͍ ᶃ࢓༷௨Γʹಈ͘ w ࢓༷ͷ௨Γʹಈ͘ w ແବͳ͜ͱ͸͠ͳ͍   w ͋Γ͑ΔΤϥʔέʔεʹରԠ͍ͯ͠Δ  ᶄ Ћ কདྷతʹ΋όάʹͳΓͮΒ͍ w ࠓޙ͋Γͦ͏ͳมߋʹ଱͑͏ΔઃܭͰ͋Δ   w ࠓ͸࣮૷͢Δඞཁ͸ͳ͍͚Ͳ

Slide 10

Slide 10 text

࢓༷௨Γʹಈ͘ model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 11

Slide 11 text

 ແବͳ͜ͱ͸͠ͳ͍όά͕ͳ͍ // OK model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 12

Slide 12 text

 ແବͳ͜ͱ͸͠ͳ͍όά͕ͳ͍ // NG model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { $(‘.mypage #btn’).addClass('enable'); ແବͳ͜ͱ callback(books[0]); }); }

Slide 13

Slide 13 text

 ΤϥʔέʔεʹରԠ͍ͯ͠Δόά͕ͳ͍ model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 14

Slide 14 text

 ΤϥʔέʔεʹରԠ͍ͯ͠Δόά͕ͳ͍ model.book.fetchOne = function (bookName, callback) { var url = ‘/api/book/search'; // 1. bookName͕ະࢦఆʁ var params = {name: bookName}; api(url, params).then(function (books) { // 2. ݕࡧ݁Ռͳ͠ʢnull͕ฦͬͯ͘Δʣʁ // 3. callback͕ະࢦఆʁ callback(books[0]); }); }

Slide 15

Slide 15 text

 ΤϥʔέʔεʹରԠ͍ͯ͠Δόά͕ͳ͍ model.book.fetchOne = function (bookName, callback) { var url = ‘/api/book/search'; // 1. bookName͕ະࢦఆʁ => ࠓճ͸ؾʹ͠ͳ͍ var params = {name: bookName}; api(url, params).then(function (books) { // 2. ݕࡧ݁Ռͳ͠ʢۭͷ഑ྻ͕ฦͬͯ͘Δʣ=> nullνΣοΫ // 3. callback͕ະࢦఆʁ => ؾʹ͠ͳ͍ callback(books && books[0]); }); }

Slide 16

Slide 16 text

 ࠓޙͷมߋʹڧ͍όά͕ͳ͍ model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 17

Slide 17 text

 ࠓޙͷมߋʹڧ͍όά͕ͳ͍ // ύϥϝʔλ͕૿͑Δʁ model.book.fetchOne = function (bookName, callback) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 18

Slide 18 text

 ࠓޙͷมߋʹڧ͍όά͕ͳ͍ // ύϥϝʔλ͕૿͑Δʁ => Ҿ਺Λ௥Ճ͢Δ model.book.fetchOne = function (name, callback, genre, author) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 19

Slide 19 text

 ࠓޙͷมߋʹڧ͍όά͕ͳ͍ // ύϥϝʔλ͕૿͑Δʁ model.book.fetchOne = function (name, callback, genre, author) { var url = '/api/book/search'; var params = {name: bookName}; api(url, params).then(function (books) { callback(books[0]); }); }

Slide 20

Slide 20 text

 ࠓޙͷมߋʹڧ͍όά͕ͳ͍ // ύϥϝʔλ͕૿͑Δʁ => ෳ਺ࢦఆՄೳʹ model.book.fetchOne = function (conditions, callback) { var url = '/api/book/search'; api(url, conditions).then(function (books) { callback(books[0]); }); } // ࢖͍ํ model.book.fetchOne({name:’φϧτ’}, callback: function () {});

Slide 21

Slide 21 text

3Fɿόά͕ͳ͍ ᶃ࢓༷௨Γʹಈ͘ w ࢓༷ͷ௨Γʹಈ͘ w ແବͳ͜ͱ͸͠ͳ͍   w ͋Γ͑ΔΤϥʔέʔεʹରԠ͍ͯ͠Δ  ᶄ Ћ কདྷతʹ΋όάʹͳΓͮΒ͍ w ࠓޙ͋Γͦ͏ͳมߋʹ଱͑͏ΔઃܭͰ͋Δ   w ࠓ͸࣮૷͢Δඞཁ͸ͳ͍͚Ͳ

Slide 22

Slide 22 text

ಡΈ΍͍͢ίʔυ https://flic.kr/p/aAvh9L

Slide 23

Slide 23 text

ಡΈ΍͍͢ίʔυʁ

Slide 24

Slide 24 text

ಡΈ΍͍͢ίʔυʁ  ೔ຊޠͷจষͱಉ͡

Slide 25

Slide 25 text

೑͡Ό͕ͷ࡞Γํ δϟΨΠϞͱਓࢀ͸େ͖Ίͷཚ੾Γʹͯ͠ۄͶ͗͸͘͠੾Γɺ͠ Β͖ͨ͸ચͬͯద౰ʹ͖Γ·͢ɻத՚ುʹ༉Λେ̎ೖΕڧՐʹ͠ɺ ೑ΛೖΕ৭͕มΘΔ·ͰᖱΊͨΒ̍΋ೖΕܰ͘ᖱΊ·̇ࣽ͢ोͷ ࡐྉΛೖΕ෸ಅͨ͠ΒփोΛऔΓനୌΛೖΕࠞͥதڧՐͷ··མ ֖͠Λࣽ͠ो͕ແ͘ͳΔ·Ͱ໿෼ఔࣽ٧Ί·͢ɻ෼ࣽ٧Ί ͨॴͰҰ౓ࠞͥɺ࠶౓མ֖͠Λͯࣽ͠ो͕ͳ͘ͳΔ·Ͱ༷ࢠΛݟ ͳ͕Βߋʹ෼Ґࣽ٧Ί͍͖ͯ·͢ɻࣽो͕ແ͘ͳͬͨΒՐΛࢭ Ίམ֖͠Λͨ͠··෼ؒɺৠΒ͠·̇͢ຯ͕ߋʹછΈࠐΈ· ͢ΐʂ͜͜େࣄʂͦͯ͠׬੒Ͱ̇͢ ʼʻɻɻɻ http://cookpad.com/recipe/1519259

Slide 26

Slide 26 text

೑͡Ό͕ͷ࡞Γํ Լ४උ ɹδϟΨΠϞ͸େ͖Ίͷཚ੾Γʹͯ͠ۄͶ͗͸͘͠੾Γɺ͠Β͖ͨ͸ચͬͯద౰ʹ͖Γ·͢ɻ ᖱΊΔ ɹத՚ುʹ༉Λେ̎ೖΕڧՐʹ͠ɺ೑ΛೖΕ৭͕มΘΔ·ͰᖱΊͨΒ̍΋ೖΕܰ͘ᖱΊ·̇͢ ࣽΔ ɹࣽोͷࡐྉΛೖΕ෸ಅͨ͠ΒփोΛऔΓനୌΛೖΕࠞͥதڧՐͷ··མ֖͠Λࣽ͠ो͕ແ͘ͳΔ·Ͱ໿ ෼ఔࣽ٧Ί·͢ɻ෼ࣽ٧ΊͨॴͰҰ౓ࠞͥɺ࠶౓མ֖͠Λͯࣽ͠ो͕ͳ͘ͳΔ·Ͱ༷ࢠΛݟͳ͕Β ߋʹ෼Ґࣽ٧Ί͍͖ͯ·͢ɻࣽो͕ແ͘ͳͬͨΒՐΛࢭΊམ֖͠Λͨ͠··෼ؒɺৠΒ͠·̇͢ຯ ͕ߋʹછΈࠐΈ·͢ΐʂ͜͜େࣄʂͦͯ͠׬੒Ͱ̇͢ ?Т? http://cookpad.com/recipe/1519259

Slide 27

Slide 27 text

ಡΈ΍͍͢೔ຊޠͷϙΠϯτ  ͭͷஈམʹ͸ͭͷ಺༰ʹߜΔ  μϥμϥͱ௕͍จষΛॻ͔ͳ͍  ൱ఆจΑΓ΋ߠఆจΛ࢖͏  ୹͘ॻ͘  ಡΈखʹ఻ΘΔݴ༿ΛબͿ

Slide 28

Slide 28 text

ಡΈ΍͍͢೔ຊޠͷϙΠϯτ  ͭͷஈམʹ͸ͭͷ಺༰ʹߜΔ ɹɹॲཧΛؔ਺ͱͯ͠੾Γग़͢୯Ұ੹೚ͷݪଇ  μϥμϥͱ௕͍จষΛॻ͔ͳ͍ ɹɹؔ਺͸࠷େߦҎ಺  ൱ఆจΑΓ΋ߠఆจΛ࢖͏ ɹɹOPU)FBWZ6TFS Ͱ͸ͳ͘JT)FBWZ6TFS   ୹͘ॻ͘ ɹɹࡾ߲ԋࢉࢠΛ࢖͏υɾϞϧΨϯͰ෼ׂ͢Δ  ಡΈखʹ఻ΘΔݴ༿ΛબͿ ɹɹద੾ͳม਺໊Λ࢖͏

Slide 29

Slide 29 text

ಡΈ΍͍͢ιʔείʔυΛॻ͘ʹ͸ʁ 㾎 ॲཧΛ෼ׂ͢Δ 㾎 Θ͔Γ΍͍͢ม਺໊Λ͚ͭΔ 㾎 ద੾ͳίϝϯτΛ͚ͭΔ 㾎 ΠϯσϯτΛద੾ʹͱΔ 㾎 ൱ఆΑΓ΋ߠఆΛ࢖͏ 㾎 ωετΛઙ͘͢Δ 㾎 ؆ܿʹॻ͘ 㾎 HPUPจΛ࢖Θͳ͍ 㾎 είʔϓͷൣғ͸࠷খݶʹ͢Δ 㾎 ୯Ұ੹೚ͷݪଇ 㾎 ίʔυΛখ͘͞อͭ 㾎 ࣮૷ͷҙਤΛ࢒͢ 㾎 ໊લ෇͖Ҿ਺ 㾎 Ҿ਺ͷ਺͸ͭ·Ͱ 㾎 ૬ޓࢀরΛආ͚Δ 㾎 ίʔϧόοΫ஍ࠈΛආ͚Δ 㾎 ΦϒδΣΫτͷґଘ౓ΛԼ͛Δ 㾎 ͳͲ

Slide 30

Slide 30 text

ࢀߟਤॻ

Slide 31

Slide 31 text

ಡΈ΍͍͢ιʔείʔυΛॻ͘ʹ͸ʁ 㾎 ॲཧΛ෼ׂ͢Δ 㾎 Θ͔Γ΍͍͢ม਺໊Λ͚ͭΔ 㾎 ద੾ͳίϝϯτΛ͚ͭΔ 㾎 ΠϯσϯτΛద੾ʹͱΔ 㾎 ൱ఆΑΓ΋ߠఆΛ࢖͏ 㾎 ωετΛઙ͘͢Δ 㾎 ؆ܿʹॻ͘ 㾎 HPUPจΛ࢖Θͳ͍ 㾎 είʔϓͷൣғ͸࠷খݶʹ͢Δ 㾎 ୯Ұ੹೚ͷݪଇ 㾎 ίʔυΛখ͘͞อͭ 㾎 ࣮૷ͷҙਤΛ࢒͢ 㾎 ໊લ෇͖Ҿ਺ 㾎 Ҿ਺ͷ਺͸ͭ·Ͱ 㾎 ૬ޓࢀরΛආ͚Δ 㾎 ίʔϧόοΫ஍ࠈΛආ͚Δ 㾎 ΦϒδΣΫτͷґଘ౓ΛԼ͛Δ 㾎 ͳͲ

Slide 32

Slide 32 text

෼͔Γ΍͍͢ม਺໊Λ͚ͭΔ // Is it an array? -> isArray -> Yes / No (True / False) function isArray (arrayObject) {} // Does this array contain the item ? => Yes / No (True / False) function contains(array, item) {} // ಈࢺ + ໨తޠ function fetchBooks () {} // ಈࢺΛબͿ => ӳޠྗ + ஌͕ࣝඞཁ function push() / append() / put() / add() / enqueue() / etc // ಈࢺ͡Όͳͯ͘΋໌֬ͳ৔߹΋ function api () {}

Slide 33

Slide 33 text

ಡΈ΍͍͢ιʔείʔυΛॻ͘ʹ͸ʁ 㾎 ॲཧΛ෼ׂ͢Δ 㾎 Θ͔Γ΍͍͢ม਺໊Λ͚ͭΔ 㾎 ద੾ͳίϝϯτΛ͚ͭΔ 㾎 ΠϯσϯτΛద੾ʹͱΔ 㾎 ൱ఆΑΓ΋ߠఆΛ࢖͏ 㾎 ωετΛઙ͘͢Δ 㾎 ؆ܿʹॻ͘ 㾎 HPUPจΛ࢖Θͳ͍ 㾎 είʔϓͷൣғ͸࠷খݶʹ͢Δ 㾎 ୯Ұ੹೚ͷݪଇ 㾎 ίʔυΛখ͘͞อͭ 㾎 ࣮૷ͷҙਤΛ࢒͢ 㾎 ໊લ෇͖Ҿ਺ 㾎 Ҿ਺ͷ਺͸ͭ·Ͱ 㾎 ૬ޓࢀরΛආ͚Δ 㾎 ίʔϧόοΫ஍ࠈΛආ͚Δ 㾎 ΦϒδΣΫτͷґଘ౓ΛԼ͛Δ 㾎 ͳͲ

Slide 34

Slide 34 text

νʔϜͷ੒௕Λଅ͢ https://flic.kr/p/7aFKv2

Slide 35

Slide 35 text

νʔϜͷ੒௕Λଅ͢ ᶃΈΜͳͰϨϏϡʔ͢Δ w ଞͷਓͷίʔυΛݟֶͯͿ w ଞͷਓͷࢦఠΛݟֶͯͿ w ࢦఠͰ͖Δྔ࣭ͷมԽ͔ΒεΩϧΞοϓ͕࣮ײͰ͖Δ

Slide 36

Slide 36 text

https://flic.kr/p/aAvcFL Summary

Slide 37

Slide 37 text

·ͱΊ ᶃόά͕ͳ͍ w ࢓༷௨Γʹಈ͖ɺΤϥʔέʔε΁ͷߟྀ΋͋Δ w কདྷతʹ΋όάʹͳΓͮΒ͍ ᶄಡΈ΍͍͢ w ೔ຊޠͷจষͱҰॹ w ͨ͘͞Μͷϊ΢ϋ΢͕ଘࡏ͢Δʢม਺໊ͷ෇͚ํͳͲʣ ᶅνʔϜͷ੒௕Λଅ͢ w ΈΜͳͰϨϏϡʔ͢Δ

Slide 38

Slide 38 text

One More Step

Slide 39

Slide 39 text

৘ใॲཧٕज़ऀࢼݧc*1"

Slide 40

Slide 40 text

$ISPNFΞοϓσʔτc$ISPNJVN#MPH

Slide 41

Slide 41 text

σβΠϯύλʔϯc5&$)4$03&

Slide 42

Slide 42 text

΋͏ͭϓϩάϥϛϯάݴޠΛ

Slide 43

Slide 43 text

Thank you http://www.yoheim.net @yoheiMune https://flic.kr/p/mzmQK2