Slide 1

Slide 1 text

ϋϯζΦϯ ΞΫγϣϯ։ൃϑϩʔʹ͍ͭͯ Cloud Functions For Firebaseͷ֓ཁͱར༻ํ๏ Shinji Ichien (@1coin178) © 2018 Shinji Ichien 1

Slide 2

Slide 2 text

ϋϯζΦϯશମͷྲྀΕ 1. ʮ΍·ͼ͜ʯΞΫγϣϯΛ࡞ͬͯɺ։ൃͷྲྀΕΛ஌Ζ͏ʂ • ! ʲֶशϙΠϯτʳActions on GoogleͱDialogflowͷ࢖͍ํɾ࿈ܞํ๏ 2. Cloud Functions for FirebaseΛ࢖ͬͯಈతͳ͡ΌΜ͚ΜήʔϜΛ࡞ͬͯΈΑ͏ʂ • ! ʲֶशϙΠϯτʳΞΫγϣϯͷBEͱͳΔCloud Functions for Firebaseͷ׆༻ํ๏ 3. ΞΫγϣϯͷ༷ʑͳදݱํ๏(GUIɺSSML[߹੒Ի੠ૢ࡞]) • ิ଍ • ॻ੶ͷ2ষޙ൒~3ষલ൒ͱಉ༷ͷྲྀΕͰɺਐΊ͍͖ͯ·͢ɻ • ஫ҙ఺΍ิ଍ࣄ߲Λڧௐ͓ͯ͠࿩͍͚ͯ͠Ε͹ͱɻ © 2018 Shinji Ichien 2

Slide 3

Slide 3 text

ʮ΍·ͼ͜ʯΞΫγϣϯΛ࡞ͬͯɺ։ൃͷྲྀΕΛ஌Ζ͏ ΞδΣϯμ ࣄલ஌ࣝΠϯϓοτ - ΞΫγϣϯ։ൃͷΤίγεςϜΛ೺Ѳ͠Α͏ʂ ΍Δ͜ͱϦετ 1. Actions on GoogleͰϓϩδΣΫτ࡞੒ 2. Dialogflowͱ࿈ܞͤ͞Α͏ 3. IntentΛ࢖ͬͯɺ΍·ͼ͜ձ࿩Λ࡞Ζ͏ 4. GoogleΞγελϯτ γϛϡϨʔλͰಈ࡞֬ೝͯ͠ΈΑ͏ © 2018 Shinji Ichien 3

Slide 4

Slide 4 text

ΞΫγϣϯ։ൃͷΤίγεςϜΛ ೺Ѳ͠Α͏ʂ © 2018 Shinji Ichien 4

Slide 5

Slide 5 text

ࢀߟ: ʲGoogle HomeରԠʳεςοϓόΠεςοϓͰྗ͕ͭ͘ GoogleΞγελϯτΞϓϦ։ൃೖ໳ʢཬࢁೆ ਓʗҰԁਅ࣏ʣ | ॻ੶ ຊ | ιγϜ` © 2018 Shinji Ichien 5

Slide 6

Slide 6 text

࡞ΔΞϓϦ ~΍·ͼ͜ΞϓϦ~ Ϣʔβ͕࿩͔͚ͨϑϨʔζΛ ΍·ͼ͜ͷ༷ʹ ͦͬ͘Γͦͷ··Ԡ౴͢Δ © 2018 Shinji Ichien 6

Slide 7

Slide 7 text

1. Actions on GoogleͰ ϓϩδΣΫτͷ࡞੒ © 2018 Shinji Ichien 7

Slide 8

Slide 8 text

1. Actions on GoogleͰ ϓϩδΣΫτͷ࡞੒ • Actions on GoogleͷDeveloper Console ͔ΒɺϓϩδΣΫτΛ࡞੒͠ɺτοϓ ը໘Λදࣔ͢Δ • https://goo.gl/AZTY2y • ʮACTIONS CONSOLEʯϘλϯΛબ୒ © 2018 Shinji Ichien 8

Slide 9

Slide 9 text

1. Actions on GoogleͰ ϓϩδΣΫτͷ࡞੒ • ʮʴʯϘλϯ͔Β৽ن࡞੒ © 2018 Shinji Ichien 9

Slide 10

Slide 10 text

1. Actions on GoogleͰ ϓϩδΣΫτͷ࡞੒ • Project Name: ೚ҙͰ޷͖ͳͷΛઃఆ • σϑΥϧτݴޠ: Japanese • ࠃ: Japan • ࠷ޙʹɺʮCREATE PROJECTʯϘλϯ Λબ୒ © 2018 Shinji Ichien 10

Slide 11

Slide 11 text

1. Actions on GoogleͰ ϓϩδΣΫτͷ࡞੒ ϓϩδΣΫτ࡞੒ޙʹදࣔ͞ΕΔ Welcomeϖʔδ͸جຊεΩοϓͰେৎ෉ Ͱ͢ɻ • ӈ্ʹ͋ΔʮSKIPʯϘλϯΛબ୒͠· ͢ © 2018 Shinji Ichien 11

Slide 12

Slide 12 text

1. Actions on GoogleͰϓϩδΣΫτͷ࡞੒ ! ϓϩδΣΫτͷτοϓϖʔδ͕දࣔ © 2018 Shinji Ichien 12

Slide 13

Slide 13 text

2. Dialogflowͱ࿈ܞͤ͞Α͏ © 2018 Shinji Ichien 13

Slide 14

Slide 14 text

2. Dialogflowͱ ࿈ܞͤ͞Α͏ Intentͷ঺հ • Dialogflowͱ࿈ܞͤͯ͞ɺձ࿩ϑϩʔ࡞੒ • ձ࿩ϑϩʔߏஙʹ͸ɺIntentͷཧղ͕ඞཁ • Intentͱ͸? • Ϣʔβͷ໰͍͔͚ͱιϑτ΢ΣΞଆͷॲཧΛϚοϐϯά͢Δ࢓ ૊Έ • Ϣʔβͱͷձ࿩ͷ࠷খ୯Ґͱߟ͑Δͱྑ͍ ࢀߟ: ʲGoogle HomeରԠʳεςοϓόΠεςοϓͰྗ͕ͭ͘ GoogleΞγελϯτΞϓϦ։ൃೖ໳ʢཬࢁೆਓʗҰԁਅ࣏ʣ | ॻ੶ ຊ | ιγϜ` © 2018 Shinji Ichien 14

Slide 15

Slide 15 text

2. Dialogflowͱ ࿈ܞͤ͞Α͏ • Actions on Googleίϯιʔϧը໘ͷ ʮActionsʯΛબ୒ • ը໘தԝͷ ʮADD YOUR FIRST ACTIONʯΛબ୒ © 2018 Shinji Ichien 15

Slide 16

Slide 16 text

2. Dialogflowͱ ࿈ܞͤ͞Α͏ • දࣔ͞ΕΔμΠΞϩά͔ΒʮCustom IntentʯΛબ୒ • μΠΞϩάͷӈԼͷʮBUILDʯΛબ୒ • ※ ʮBUILDʯબ୒ޙɺ͓࢖͍ͷGoogle ΞΧ΢ϯτͰDialogflowΛॳΊͯར༻ ͢Δ৔߹͸ɺར༻ن໿ͷ֬ೝμΠΞϩ ά͕දࣔ͞ΕΔɺ಺༰Λ֬ೝͯ͠ ʮACCEPTʯΛબ୒ © 2018 Shinji Ichien 16

Slide 17

Slide 17 text

2. Dialogflowͱ ࿈ܞͤ͞Α͏ DialogflowΤʔδΣϯτͷ࡞੒ • ΤʔδΣϯτ໊Λઃఆ • ʮDEFAULT LANGUAGEʯΛ ʮJapanese-jaʯʹ • ʮCREATEʯΛબ୒ © 2018 Shinji Ichien 17

Slide 18

Slide 18 text

3. IntentΛ࢖ͬͯɺ ΍·ͼ͜ձ࿩Λ࡞Ζ͏ © 2018 Shinji Ichien 18

Slide 19

Slide 19 text

3. IntentΛ࢖ͬͯɺ΍·ͼ͜ձ࿩Λ࡞Ζ͏ ձ࿩Λߏ੒͢ΔIntentΛ࡞Δ ࡞੒͢ΔIntentҰཡ Intent໊ ໾ׂ Echo Ϣʔβ͔Βͷձ࿩Λͦͷ··Ԡ౴͢ Δɻ΍·ͼ͜ػೳɻ Default Welcome Intent ΞϓϦىಈ࣌ʹ࢖͍ํ΍આ໌Λ͢Δɻ © 2018 Shinji Ichien 19

Slide 20

Slide 20 text

Echo IntentΛ࡞Δ • ৽نIntentͷ௥Ճʹ͸ɺʮʴʯϘλϯΛબ୒ • Intent໊Λઃఆ͠ɺʮSAVEʯ © 2018 Shinji Ichien 20

Slide 21

Slide 21 text

Ϣʔβ͔Βձ࿩ϑϨʔζΛ நग़͢ΔͨΊ Parameter(ม਺)Λఆٛ • Intentฤूը໘ͷʮADD PARAMETERS AND ACTIONʯΛબ୒ © 2018 Shinji Ichien 21

Slide 22

Slide 22 text

Ϣʔβ͔Βձ࿩ϑϨʔζΛநग़͢ΔͨΊͷ Parameter(ม਺)Λఆٛ • Echo Intentฤूը໘Ͱɺநग़ͨ͠ϑϨʔζΛ֨ೲ͢ΔParameter(ม਺)Λ༻ҙ © 2018 Shinji Ichien 22

Slide 23

Slide 23 text

Entityͱ͸? • ༻ޠͷࣙॻ (ex: ༵೔ɺ৭ɺ೔ຊͷϩοΫόϯυ໊ɺ͡ΌΜ͚Μͷख) • Parameterͱ૊Έ߹ΘͤΔ͜ͱͰɺࣗવݴޠจ͔ΒΞΫγϣϯͰ൑ผՄೳͳม਺஋Λநग़͢ Δ͜ͱ͕Մೳ छྨ આ໌ ྫ γεςϜEntity Ұൠͷ֓೦޲͖ʹ Dialogflow͕ఏڙ ༵೔ɺ৭ ΧελϜEntity Ϣʔβ͕ಠࣗʹఆٛ ೔ຊͷϩοΫόϯυ໊ɺ͡Ό Μ͚Μͷख © 2018 Shinji Ichien 23

Slide 24

Slide 24 text

Ϣʔβ͔Βձ࿩ϑϨʔζΛநग़͢Δ࢓૊Έ ࢀߟ: ʲGoogle HomeରԠʳεςοϓόΠεςοϓͰྗ͕ͭ͘ GoogleΞγελϯτΞϓϦ։ൃೖ໳ʢཬࢁೆਓʗҰԁਅ࣏ʣ | ॻ੶ ຊ | ιγϜ` © 2018 Shinji Ichien 24

Slide 25

Slide 25 text

Ϣʔβ͔Β ձ࿩ϑϨʔζΛநग़͢Δ • Training phraseʹԾͷϑϨʔζΛ௥Ճ • Parameterͱ࿈ܞ • σϞ͠·͢ © 2018 Shinji Ichien 25

Slide 26

Slide 26 text

நग़ͨ͠ϑϨʔζΛ ΍·ͼ͜ͱͯ͠Ԡ౴͢Δ • Text responseʹϢʔβʹԠ౴͢Δ಺༰ Λઃఆ • ࠓճ͸ParameterͰઃఆͨ͠ʮ$echoʯ Λೖྗ • ʮ$echoʯʹ͸Ϣʔβ͔ΒͷϑϨʔζ಺ ༰͕ͦͷ··֨ೲ͞Ε͓ͯΓɺ͜ΕΛ Ԡ౴͢Δ͜ͱͰ΍·ͼ͜ػೳΛ࣮ݱ © 2018 Shinji Ichien 26

Slide 27

Slide 27 text

Default Welcome Intentͷ ઃఆ • ΞΫγϣϯىಈ࣌ͷԠ౴಺༰Λ ʮResponseʯʹઃఆ • ๨ΕͣʹʮSAVEʯʂʂ • ͜͜·ͰͰ׬੒Ͱ͢ ! © 2018 Shinji Ichien 27

Slide 28

Slide 28 text

4. GoogleΞγελϯτ γϛϡϨʔλͰಈ࡞֬ೝ © 2018 Shinji Ichien 28

Slide 29

Slide 29 text

4. GoogleΞγελϯτ γϛϡϨʔλͰಈ࡞֬ೝ • ࠷৽ͷDialogflowΤʔδΣϯτΛ Actions on GoogleͷϓϩδΣΫτͱ౷ ߹͢Δඞཁ͕͋Δ • ʮIntegrationsʯ͔ΒGoogleΞγελϯ τͷʮINTEGRATIONS SETTINGʯΛબ ୒ © 2018 Shinji Ichien 29

Slide 30

Slide 30 text

4. GoogleΞγελϯτ γϛϡϨʔλͰಈ࡞֬ೝ • ʮTESTʯΛબ୒͠ɺActions on Googleͷϓϩ δΣΫτʹΞοϓϩʔυ • ʮUpdating Actions on Googleʯจݴදࣔޙɺγ ϛϡϨʔλը໘ʹભҠ ! ʮAuto-preview changesʯ͸ʮONʯʹ͓ͯ͘͠ͱ ྑ͍Ͱ͠ΐ͏ɻ͔͠͠ɺ໌ࣔతʹมߋͨ͠ Dialogflowͷঢ়ଶΛ֬ೝ͢ΔͨΊɺΞϓϦΛࢼ࣌͢ ͸ຖճɺΞοϓϩʔυखॱΛ࣮ࢪ͢Δ͜ͱΛΦεε ϝ͠·͢ʂ © 2018 Shinji Ichien 30

Slide 31

Slide 31 text

4. GoogleΞγελϯτγϛϡ ϨʔλͰಈ࡞֬ೝ • ։ൃ࣌ͱಉ͡GoogleΞΧ΢ϯτͰϩά Πϯͨ͠AndroidσόΠεɺiOS༻ GoogleΞγελϯτΞϓϦ͕͋Δํ ͸ɺ࣮ػ֬ೝ΋Ͱ͖·͢ © 2018 Shinji Ichien 31

Slide 32

Slide 32 text

Ұ୴ɺ·ͱΊ © 2018 Shinji Ichien 32

Slide 33

Slide 33 text

͜͜·Ͱͷ·ͱΊ • Actions on GoogleͱDialogflowΛ࿈ܞͤͯ͞ձ࿩ϑϩʔΛߏங • Dialogflowͷػೳͷ঺հ • Intent: Ϣʔβͷձ࿩ͱιϑτ΢ΣΞͷॲཧΛϚοϐϯά͢Δɻ஥հ໾ɻ • Entity: ༻ޠͷࣙॻ • Parameter: ࣗવձ࿩จ͔Β୯ޠɾݴ༿ͷநग़ɻEntityͱ૊Έ߹Θͤͯར༻ɻ • GoogleΞγελϯτ γϛϡϨʔλΛ࢖ͬͯΞϓϦͷಈ࡞֬ೝɾσόοά © 2018 Shinji Ichien 33

Slide 34

Slide 34 text

Cloud Functions for Firebase Λ࢖ͬͯ ಈతͳ͡ΌΜ͚ΜήʔϜΛ ࡞ͬͯΈΑ͏ © 2018 Shinji Ichien 34

Slide 35

Slide 35 text

Cloud Functions For Firebaseͱ͸? • HTTPϦΫΤετΛτϦΨʔʹͯ͠ɺ αʔόϨεͰ೚ҙͷॲཧΛ࣮ߦ • Firebaseͱ౷߹͞Ε͓ͯΓɺ࿈ܞ͕༰ қ • Firebase Realtime Databaseɺ Firebase Authentication etc.. • Dialogflowͱ͸ Intent໊ Ͱ࿈ܞ © 2018 Shinji Ichien 35

Slide 36

Slide 36 text

͡ΌΜ͚ΜήʔϜͷઆ໌ • ͡ΌΜ͚Μͷखʹର͠ɺಈతʹCloud Functions ଆͰखΛܾΊɺউͪෛ͚Λ൑அ͢Δ • Intent঺հ Intent໊ ໾ׂ Match ͡ΌΜ͚ΜήʔϜͷॲ ཧɻ͡ΌΜ͚Μͷखͱ উഊ൑அɻ Default Welcome Intent ΞϓϦىಈ࣌ʹ࢖͍ํ ΍આ໌Λ͢Δɻ © 2018 Shinji Ichien 36

Slide 37

Slide 37 text

͡ΌΜ͚ΜήʔϜͷશମ૾ ࢀߟ: ʲGoogle HomeରԠʳεςοϓόΠεςοϓͰྗ͕ͭ͘ GoogleΞγελϯτΞϓϦ։ൃೖ໳ʢཬࢁೆਓʗҰԁਅ࣏ʣ | ॻ੶ ຊ | ιγϜ` © 2018 Shinji Ichien 37

Slide 38

Slide 38 text

͡ΌΜ͚ΜήʔϜͷDialogflowΤʔδΣϯτΛ෮ݩ͢Δ ʲ1/3ʳDialogflowΤʔδΣϯτͷόοΫΞοϓϑΝΠϧͷμ΢ϯϩʔυ • αϯϓϧΞϓϦͷGithub(https://goo.gl/dm8jd3) ͔Β sample-3-4.zipΛμ΢ϯϩʔυ • ֤αϯϓϧΞϓϦͷσΟϨΫτϦͷߏ଄ <ϓϩδΣΫτϧʔτ> +- dialogflow/ # DialogflowͷΤʔδΣϯτͷόοΫΞοϓϑΝΠϧΛ഑ஔ͢ΔσΟϨΫτϦ | | | +- xxx.zip # DialogflowͷΤʔδΣϯτͷόοΫΞοϓϑΝΠϧ | +- functions/ # ʲಈతͷΈʳCloud Functions for Firebaseͷιʔείʔυ͕ೖΔσΟϨΫτϦ | +- .eslintrc.json # JavaScriptͷߏจνΣοΫπʔϧESLintͷઃఆϑΝΠϧ | +- package.json # ར༻͢Δ֎෦πʔϧ΍ϥΠϒϥϦͳͲΛઃఆ͢ΔϑΝΠϧ | +- index.js # functiosͷϝΠϯίʔυ © 2018 Shinji Ichien 38

Slide 39

Slide 39 text

͡ΌΜ͚ΜήʔϜͷDialogflowΤʔδΣϯτΛ෮ݩ͢Δ ʲ2/3ʳDialogflowͰ෮ݩ • ෮ݩઌͷDialogflowͷΤʔδΣϯτΛ։͘ © 2018 Shinji Ichien 39

Slide 40

Slide 40 text

͡ΌΜ͚ΜήʔϜͷ DialogflowΤʔδΣϯτΛ෮ݩ͢Δ ʲ3/3ʳDialogflowͰ෮ݩ • ͜ΕͰɺ෮ݩ׬ྃ ! © 2018 Shinji Ichien 40

Slide 41

Slide 41 text

͡ΌΜ͚ΜήʔϜͷߏ଄ handType Entity © 2018 Shinji Ichien 41

Slide 42

Slide 42 text

͡ΌΜ͚ΜήʔϜͷ ߏ଄ Match Intent © 2018 Shinji Ichien 42

Slide 43

Slide 43 text

͡ΌΜ͚ΜήʔϜͷ ߏ଄ Match Intent Response © 2018 Shinji Ichien 43

Slide 44

Slide 44 text

੩తͳ͡ΌΜ͚ΜήʔϜΛ ಈతʹมߋ • Ϣʔβ͔Βͷ͡ΌΜ͚ΜखΛCloud FunctionsʹૹΓɺউഊ൑அͷॲཧΛҕৡ • DialogflowͷʮFullfillmentʯ߲໨͔Βઃఆ ΍Δ͜ͱ 1. Cloud FunctionsͰΞΫγϣϯͷBEߏங 2. Match IntentͷFullfillmentΛONʹ 3. Fullfillmentʹ1.Ͱ࡞੒ͨ͠BEͷΤϯυϙ ΠϯτΛઃఆ © 2018 Shinji Ichien 44

Slide 45

Slide 45 text

1. Cloud FunctionsͰΞΫγϣϯͷBEߏங © 2018 Shinji Ichien 45

Slide 46

Slide 46 text

1. Cloud FunctionsͰΞΫγϣϯͷBEߏங • ࠓճ͸ॻ੶ͷαϯϓϧίʔυΛར༻͠·͢(https://goo.gl/QrghFV) • ୹ॖલ: https://github.com/google-assistants-apps-book/samples/tree/master/3-5_ಈత ॲཧ/functions $ git clone https://github.com/google-assistants-apps-book/samples.git $ cd samples/3-5_ಈతॲཧ $ tree functions functions !"" index.js # functionsͷϝΠϯίʔυɻ͡ΌΜ͚ΜϩδοΫɻ !"" constants.js # index.jsͰࢀর͢Δఆ਺Λ·ͱΊͨϑΝΠϧ !"" firebase.json # ϓϩδΣΫτͷϏϧυ࣌ͷઃఆ etc !"" package-lock.json # Versionݻఆͨ͠ґଘϥΠϒϥϦͷ؅ཧϑΝΠϧ #"" package.json # ґଘϥΠϒϥϦͷ؅ཧϑΝΠϧ © 2018 Shinji Ichien 46

Slide 47

Slide 47 text

index.jsͷղઆ ᶃ • line: 4-13 // DialogflowΛ؅ཧ͢Δ֎෦ϞδϡʔϧͷಡΈ͜Έ const { dialogflow } = require('actions-on-google'); // Cloud functionsΛ؅ཧ͢Δ֎෦ϞδϡʔϧͷಡΈ͜Έ const functions = require('firebase-functions'); // ఆ਺ϞδϡʔϧͷಡΈࠐΈ const constants = require('./constants.js'); // DialogflowͷΞϓϦέʔγϣϯΠϯελϯεΛੜ੒ const app = dialogflow({ debug: true }); © 2018 Shinji Ichien 47

Slide 48

Slide 48 text

index.jsͷղઆ ᶄ • line: 20-49 // Match IntentΛ؂ࢹ app.intent('Match', (conv) => { // ϢʔβʔͷखΛऔಘɻDialogflowͷParameter໊ let userHandType = conv.parameters['handType']; // ------ ͜͜ʹҟৗܥͷॲཧ͕͋Δ ------ // ΞϓϦͷखΛܾఆɻϥϯμϜͰબ୒͍ͯ͠Δɻ const appHandType = constants.VALID_HAND_TYPE[Math.floor(Math.random() * constants.VALID_HAND_TYPE.length)]; // উഊΛܾఆ const matchType = constants.MATCH_RESULT[userHandType][appHandType]; // উഊผͷॲཧ const resultMessage = constants.SPEAK_MESSAGE_RESULT[matchType].replace("%HAND", appHandType); // Ϩεϙϯε conv.ask(resultMessage); }); © 2018 Shinji Ichien 48

Slide 49

Slide 49 text

index.jsͷղઆ ᶅ • ΤϯυϙΠϯτͷެ։ // ϦΫΤετΛ଴ͪड͚Δ exports.sample_3_5 = functions.https.onRequest(app); © 2018 Shinji Ichien 49

Slide 50

Slide 50 text

Cloud FunctionsΛJavaScriptͰ։ൃ͢ΔͨΊͷ؀ڥΛ੔͑Δ © 2018 Shinji Ichien 50

Slide 51

Slide 51 text

Cloud FunctionsΛJavaScriptͰ։ൃ͢ΔͨΊͷ؀ڥΛ੔͑Δ ໊લ OS આ໌ nodebrew macOS Node.jsͷόʔδϣϯΛ؅ཧɾ੾ ସͰ͖Δπʔϧ nodist Windows Node.jsͷόʔδϣϯΛ؅ཧɾ੾ ସͰ͖Δπʔϧ npm macOS/Windows Node.jsͷύοέʔδ؅ཧπʔϧ Firebase CLI macOS/Windows FirebaseϓϩδΣΫτͷ؅ཧɺ දࣔɺσϓϩΠΛ࣮ߦ͢ΔͨΊ ͷπʔϧ © 2018 Shinji Ichien 51

Slide 52

Slide 52 text

ʲmacOS޲͚ʳNode.js, npmͷΠϯετʔϧ # nodebrewެࣜΑΓɺҎԼͷίϚϯυΛ࣮ߦ $ curl -L git.io/nodebrew | perl - setup # pathΛ௨͢ɻ ex: bash ======================================== Add path: export PATH=$HOME/.nodebrew/current/bin:$PATH ======================================== # ௥Ճͨ͠pathΛಡΈࠐΉ $ source ~/.bash_profile $ nodebrew help nodebrew 1.0.0 Usage: <ҎԼলུ> © 2018 Shinji Ichien 52

Slide 53

Slide 53 text

ʲmacOS޲͚ʳNode.js, npmͷΠϯετʔϧ # ར༻Ͱ͖ΔόʔδϣϯҰཡΛ֬ೝ $ nodebrew ls-remote # ࠓճ͸Node.js6Λ࢖͍·͢ɻ˞࠷ۙɺCloud Functions͕8΋αϙʔτɻ $ nodebrew install-binary v6.14.0 # όʔδϣϯ੾Γସ͑ $ nodebrew use v6.14.0 $ npm -v © 2018 Shinji Ichien 53

Slide 54

Slide 54 text

ʲWindows޲͚ʳNode.js, npmͷΠϯετʔϧ • nodist͸ެࣜϖʔδ͔Β.exeϑΝΠϧΛμ΢ϯϩʔυ͠ɺखॱʹ͕ͨͬͯ͠ɺΠϯε τʔϧɻ • ShellͰόʔδϣϯ֬ೝ͠·͠ΐ͏ɻ • Node.jsΛΠϯετʔϧ # ར༻Ͱ͖ΔόʔδϣϯΛ֬ೝ $ nodist dist | Select-String 6.14.0 $ nodist + 6.14.0 # όʔδϣϯ੾Γସ͑ $ nodist 6.14.0 # Node.jsʹ߹͏npmΛΠϯετʔϧ $ nodist npm match © 2018 Shinji Ichien 54

Slide 55

Slide 55 text

Firebase CLIΛΠϯετʔϧ # -g ͰσόΠε಺Ͱάϩʔόϧʹར༻Ͱ͖Δ $ npm install -g firebase-tools $ firebase -V # Πϯετʔϧ͕׬ྃͨ͠ΒɺfirebaseʹϩάΠϯ͢Δ $ firebase login © 2018 Shinji Ichien 55

Slide 56

Slide 56 text

Cloud Functionsʹdeploy͠Α͏ © 2018 Shinji Ichien 56

Slide 57

Slide 57 text

Firebase initͰCloud FunctionsϓϩδΣΫτΛॳظઃఆ # ./samples/3-5_ಈతॲཧ σΟϨΫτϦʹͯ $ firebase init functions # ࿈ܞ͢ΔFirebaseϓϩδΣΫτIDΛબ୒͠ɺEnterԡԼʂ # Dialogflowͷઃఆ͔Β֬ೝͰ͖Δɻ ⚙ ઃఆ->Geneal->ʮGOOGLE PROJECTʯ->ʮProject IDʯ ? Select a default Firebase project for this directory: Sign-in-only (sign-in-only) speak-transcribe (speak-transcribe) Call-My-Location (call-lat-lon) › Rock-Paper-Scissors-Game-2 (rock-paper-scissors-game-2) ... © 2018 Shinji Ichien 57

Slide 58

Slide 58 text

Firebase initͰCloud FunctionsϓϩδΣΫτΛॳظઃఆ # αϯϓϧ͕JsͳͷͰɺJavaScriptΛબ୒͠ɺEnterԡԼʂ ? What language would you like to use to write Cloud Functions? (Use arrow keys) › JavaScript TypeScript # ্ॻ͖͠ͳ͍ͷͰɺ͢΂ͯ ʮNʯ ͱೖྗ͠ɺEnterԡԼʂ ? Do you want to use ESLint to catch probable bugs and enforce style? No ? File functions/package.json already exists. Overwrite? No i Skipping write of functions/package.json ? File functions/index.js already exists. Overwrite? (y/N) N # firebaseͷϓϩδΣΫτ৘ใ͕͕อ࣋͞Ε͍ͯΔӅ͠ϑΝΠϧ͕࡞੒͞Ε͍ͯΔ $ cat .firebaserc { "projects": { "default": "rock-paper-scissors-game-2" } } © 2018 Shinji Ichien 58

Slide 59

Slide 59 text

ʲ͓·͚ʳݱࡏͷFirebaseϓϩδΣΫτͷ֬ೝɾߋ৽ # ֬ೝ $ firebase use Active Project: rock-paper-scissors-game-2 Project aliases for /xxxx/samples/3-5_ಈతॲཧ: * default (rock-paper-scissors-game-2) Run firebase use --add to define a new project alias. # มߋ͍ͨ͠৔߹͸ͪ͜ΒɻaliasΛ͚ͭΔ͜ͱ΋Ͱ͖Δ $ firebase use --add © 2018 Shinji Ichien 59

Slide 60

Slide 60 text

ιʔείʔυΛσϓϩΠ # functionssσΟϨΫτϦ௚Լ(package.json͕͋Δॴ)Ͱɺؔ࿈͢ΔϥΠϒϥϦΛΠϯετʔϧ $ cd functions $ npm install # σΟϨΫτϦΛҠಈͯ͠ $ cd .. $ ls dialogflow firebase.json functions # functionsσΟϨΫτϦΛ--onlyͰࢦఆͯ͠ɺσϓϩΠɻ # දࣔ͞ΕͨΤϯυϙΠϯτͷURLΛFirebaseίϯιʔϧ͔Β֬ೝ $ firebase deploy --only functions ... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/rock-paper-scissors-game-2/overview © 2018 Shinji Ichien 60

Slide 61

Slide 61 text

ιʔείʔυΛσϓϩΠ ࣦഊ͢Δ৔߹ɺࢼͯ͠ΈΑ͏ -ɹʮError: An unexpected error has occurred.ʯͱΤϥʔ͕ग़Δ৔ ߹ɺ࠶౓࣮ߦ͍ͯͩ͘͠͞ɻ -ɹWindows؀ڥͰΤϥʔʹͳΔ৔߹ɺfirebase.jsonΛॻ͖׵͑Δ # ͜ΕΛ $ npm --prefix \"$RESOURCE_DIR\" run lint # ↓ͷ༷ʹॻ͖׵͑Δ $ npm --prefix \"%RESOURCE_DIR%\" run lint © 2018 Shinji Ichien 61

Slide 62

Slide 62 text

ιʔείʔυΛσϓϩΠ © 2018 Shinji Ichien 62

Slide 63

Slide 63 text

2.Match IntentͷFullfillmentΛONʹ © 2018 Shinji Ichien 63

Slide 64

Slide 64 text

Match IntentͷFullfillmentΛONʹ • DialogflowͷMatch Intentฤूը໘ © 2018 Shinji Ichien 64

Slide 65

Slide 65 text

3. Fullfillmentʹ1.Ͱ ࡞੒ͨ͠BEͷΤϯυϙΠϯτΛઃఆ © 2018 Shinji Ichien 65

Slide 66

Slide 66 text

FullfillmentͷBEͷΤϯυϙΠϯτΛઃఆ • ը໘Լ෦ͷ ʮSAVEʯϘλϯΛԡ͢ͷΛ๨Εͣʹʂʂ © 2018 Shinji Ichien 66

Slide 67

Slide 67 text

GoogleΞγελϯτ γϛϡϨʔλͰ ֬ೝͯ͠ΈΑ͏ • ͜͜·ͰͰ׬੒ ! © 2018 Shinji Ichien 67

Slide 68

Slide 68 text

Thanks © 2018 Shinji Ichien 68

Slide 69

Slide 69 text

ΑΓৄ͘͠஌Γ͍ͨํ͸ɺ ͪ͜Βʂʂʂ • ʲGoogle HomeରԠʳεςοϓόΠε ςοϓͰྗ͕ͭ͘ GoogleΞγελϯτ ΞϓϦ։ൃೖ໳ʢཬࢁೆਓʗҰԁਅ ࣏ʣ | ॻ੶ ຊ | ιγϜ • ΑΖ͓͘͠ئ͍͠·͢ ! © 2018 Shinji Ichien 69