Slide 1

Slide 1 text

(JODPʹ͓͚Δ$MPVE'VODUJPOTͷ ར༻ࣄྫͱ։ൃUJQTͷ঺հ Soichi Sumi / @soichisumi 2019 / 01 / 17 / THU Firebase Meetup #9

Slide 2

Slide 2 text

A B O U T M Y S E L F ࣗݾ঺հ Soichi Sumi @soichisumi ɾ#BDLFOE&OHJOFFS!(JODP ɾ࢓ࣄ಺༰ ɹɾόοΫΤϯυͷ։ൃ 'JSFCBTF(P (,&  ɹɾϒϩοΫνΣʔϯΠϯϑϥͷӡ༻ ɹɾࣾ಺'JSFCBTF͓͡͞Μ

Slide 3

Slide 3 text

(JODPͱ͸

Slide 4

Slide 4 text

©2019 Ginco, Inc. Wallet ΢ΥϨοτΛओ࣠ͱ͢Δଟ֯తͳࣄۀల։ Solutions Mining ҆৺ɾ҆શͷ Ծ૝௨՟΢ΥϨοτ ϒϩοΫνΣʔϯͷ αʔϏε։ൃˍ࣮ূ࣮ݧ αϙʔτ ϞϯΰϧͰͷ Ծ૝௨՟ϚΠχϯά

Slide 5

Slide 5 text

©2019 Ginco, Inc. Crypto Wallet

Slide 6

Slide 6 text

©2018 Ginco, Inc. ·ͱΊͯͻͱͭʹ Bitcoin Bitcoin Cash Litecoin XRP Ethereum Classic Ethereum

Slide 7

Slide 7 text

©2018 Ginco, Inc. ϢʔβʔϑϨϯυϦʔͳσβΠϯ

Slide 8

Slide 8 text

©2019 Ginco, Inc. ΫϥΠΞϯτܕ΢ΥϨοτͷجຊΛ஧࣮ʹ ߴਫ४ͷηΩϡϦςΟͱ҆શੑ ֤σόΠεͷ தʹͷΈอ؅ ̍ͭͷόοΫΞοϓΩʔͰ
 ෳ਺ͷ௨՟Λ؅ཧ ௨৴ͷ҉߸Խͱ ಠࣗͷೝূํࣜ ൿີ伴ͷ؅ཧํࣜ ΢ΥϨοτͷߏ଄ ௨৴ํࣜ

Slide 9

Slide 9 text

©2019 Ginco, Inc. ಠࣗͷݎ࿚ͳΠϯϑϥ Node શͯͷϒϩοΫνΣʔϯ ϊʔυΛࣗΒཱͯΔ Block Explorer ϒϩοΫΤΫεϓϩʔϥΛ ࣗ෼ୡͰ࡞Δ Scalability ߴ͍εέʔϥϏϦςΟΛ ֬อ

Slide 10

Slide 10 text

(JODPͷઆ໌͸Ҏ্

Slide 11

Slide 11 text

ࠓ೔࿩͢͜ͱ  (JODPʹ͓͚Δ$MPVE'VODUJPOTͷར༻ࣄྫ • ։ൃνʔϜ • $MPVE'VODUJPOTͷ༻్ • ύϑΥʔϚϯεͱίετ  ։ൃUJQT

Slide 12

Slide 12 text

(JODPʹ͓͚Δ $MPVE'VODUJPOTͷར༻ࣄྫ P A R T 1

Slide 13

Slide 13 text

঺հ͢Δ಺༰ • ։ൃνʔϜ • $MPVE'VODUJPOTͷ༻్ • ύϑΥʔϚϯεͱίετ

Slide 14

Slide 14 text

։ൃνʔϜ

Slide 15

Slide 15 text

։ൃνʔϜ • ΫϥΠΞϯτ • ୲౰ΞϓϦɺ$MPVE'VODUJPOT • J04ਓ ۀ຿ҕୗਓ • "OESPJEਓ ۀ຿ҕୗਓ • 8FCਓ • όοΫΤϯυ • ୲౰औҾཤྺγεςϜɺ΢ΥϨοτϥΠϒϥϦɺ ϒϩοΫνΣʔϯϊʔυӡ༻ɺ$MPVE'VODUJPOT • $50 ਓ

Slide 16

Slide 16 text

$MPVE'VODUJPOTͷ༻్

Slide 17

Slide 17 text

$MPVE'VODUJPOTͱ͸ • ϑϧϚωʔδυͳؔ਺ͷ࣮ߦ؀ڥ • ؔ਺ͱɺτϦΨʔͱͳΔΠϕϯτΛࢦఆͯ͠"1*Λ࣮૷ ར఺ • τϦΨʔʹର͢ΔॲཧΛॻ͚ͩ͘ɻ؆୯ • ݸʑͷؔ਺͸׬શʹҟͳΔ؀ڥͰ࣮ߦ͞ΕΔ • ͋Δؔ਺΁ͷมߋ͕ଞͷؔ਺΁ӨڹΛ༩͑ͳ͍ • ؔ਺ͷ਺͕૿͑ͯ΋ػೳ௥Ճɾमਖ਼͕༰қ • ϦΫΤετʹԠͯ͡Φʔτεέʔϧ • τϦΨʔͷछྨ͕๛෋

Slide 18

Slide 18 text

࣮૷ྫ0O3FRVFTUτϦΨʔ JOEFYKT const functions = require(‘firebase-functions'); exports.httpFunc = functions.https.onRequest((req, res) => { return res.status(200).json({ result: “result” }); });

Slide 19

Slide 19 text

(JODPͷػೳ • ૹडۚ • ྆ସ ւ֎ͷΈ  • औҾཤྺ • ϙʔτϑΥϦΦ • ௨஌

Slide 20

Slide 20 text

Functions Cloud ΞʔΩςΫνϟ Messaging Cloud Firestore Cloud Storage Cloud BigQuery Engine Kubernetes ֎෦ API Node Blockchain Node Blockchain Blockchain Nodes …

Slide 21

Slide 21 text

$MPVE'VODUJPOTͷ τϦΨʔͷछྨ

Slide 22

Slide 22 text

τϦΨʔͷछྨ • )551ؔ਺ • 0O3FRVFTU • 0O$BMM • όοΫάϥ΢ϯυؔ਺ • 'JSFTUPSF • "OBMZUJDT • 1VC4VC • 4UPSBHF • $SBTIMZUJDT • 3FNPUF$POpH • "VUIFOUJDBUJPO

Slide 23

Slide 23 text

)551ؔ਺

Slide 24

Slide 24 text

0O$BMMτϦΨʔ • ΫϥΠΞϯτ͔Βؔ਺Λ௚઀ݺͼग़ͤΔ • ݺͼग़࣌͠ʹϢʔβͷೝূ৘ใΛ4%,͕ݕূͯ͘͠ΕΔ • Լه༻్Ͱར༻ • ૹۚ YϒϩοΫνΣʔϯ  • ྆ସ • औҾཤྺͷμ΢ϯϩʔυ • ΄ͱΜͲͷ)551ؔ਺Λ0O$BMMτϦΨʔͰ࣮૷

Slide 25

Slide 25 text

࣮૷ྫ0O$BMMτϦΨʔ JOEFYKT ؔ਺Λݺͼग़͢ TXJGU τϦΨʔΛPO$BMMʹࢦఆ let functions = Functions.functions() functions.httpsCallable(“Func1”).call([“data": “hoge”]) {(result, error) in } ؔ਺໊ͱύϥϝʔλΛࢦఆ const functions = require('firebase-functions') exports.Func1 = functions.https.onCall((data, ctx) => { // ...... })

Slide 26

Slide 26 text

Ծ૝௨՟ͷૹۚ • ࢿ࢈͸ΞυϨεʹඥͮ͘ • ྫY'%&G###%D"BG"B⒎'" • ΞυϨεʹ͸ରԠ͢Δൿີ伴͕ଘࡏ͢Δ • ൿີ伴ʹΑΔॺ໊͕͋Ε͹ૹۚͰ͖Δ • ԼهखॱͰૹۚ • Ͳ͜΁͍͘ΒૹΔ͔Λࣔ͢τϥϯβΫγϣϯΛ࡞੒ • ൿີ伴Ͱॺ໊ • ॺ໊ࡁΈτϥϯβΫγϣϯΛωοτϫʔΫ΁ૹΔ

Slide 27

Slide 27 text

ૹۚͷྲྀΕ 59ͷ࡞੒ɾॺ໊ TFOE5SBOTBDUJPO #SPBEDBTU Functions Cloud Node Blockchain

Slide 28

Slide 28 text

Ծ૝௨՟ͷ྆ସ • Ծ૝௨՟ಉ࢜ͷ྆ସΛߦ͏αʔϏεΛར༻ • ྫDIBOHFMMZ LZCFSOFUXPSL • ࢦఆͷૹۚઌ΁௨՟ΛૹΔͱॴ๬ͷ௨՟ʹฦͬͯ͘Δ࢓૊Έ • ԼهखॱͰ྆ସ • ௨՟ϖΞͷϨʔτΛऔಘ ྫ#5$ˠ&5) &5)#5$  • ௨՟ϖΞͱฦۚઌΞυϨεΛૹΓɺૹۚઌΞυϨεΛൃߦ • ૹۚઌΞυϨε΁ૹۚ͢Δ • ฦۚઌΞυϨε΁ॴ๬ͷ௨՟͕ૹΒΕͯ͘Δ

Slide 29

Slide 29 text

྆ସͷྲྀΕ QSFQBSF&YDIBOHF #SPBEDBTU TFOE5SBOTBDUJPO $BMM"1* Functions Cloud Exchange API Node Blockchain

Slide 30

Slide 30 text

औҾཤྺͷΤΫεϙʔτ • ֬ఆਃࠂ༻ʹऔҾཤྺΛΤΫεϙʔτͰ͖Δ • ԼهखॱͰΤΫεϙʔτ • औҾཤྺΛऔಘ • ֬ఆਃࠂ༻ϑΥʔϚοτͷ$47ϑΝΠϧʹ੔ܗ • ($4΁อଘ • μ΢ϯϩʔυ63-Λฦ͢

Slide 31

Slide 31 text

ཤྺΤΫεϙʔτͷྲྀΕ औҾཤྺͷऔಘ TBWF$47'JMF EPXOMPBE5Y)JTU Functions Cloud Firestore Cloud Storage Cloud

Slide 32

Slide 32 text

0O3FRVFTUτϦΨʔ • )551ϦΫΤετͰؔ਺Λݺͼग़͢ • ϦΫΤετͷݕূΛࣗલͰ࣮૷͢Δඞཁ͕͋Δ • ະೝূϢʔβ΋࢖͏ؔ਺ͷ৔߹ʹར༻ • FYϢʔβ࡞੒ɺ*1νΣοΫ

Slide 33

Slide 33 text

όοΫάϥ΢ϯυؔ਺

Slide 34

Slide 34 text

όοΫάϥ΢ϯυؔ਺ͷτϦΨʔ • 'JSFTUPSF • 1VC4VC • 4UPSBHF • "OBMZUJDT • $SBTIMZUJDT • 3FNPUF$POpH • "VUIFOUJDBUJPO

Slide 35

Slide 35 text

$MPVE'JSFTUPSFͱ͸ • εέʔϥϒϧͳ/P42-ܕσʔλϕʔε • εέʔϥϏϦςΟΛ֬อ͠ͳ͕Β΋ڧ੔߹ੑΛ࣋ͭ ར఺ • ΫϥΠΞϯτ͕4%,Λհͯ͠௚઀σʔλΛऔಘͰ͖Δ • σʔλͷΞΫηεݖ͸ηΩϡϦςΟϧʔϧͰίϯτϩʔϧ • ϦΞϧλΠϜʹσʔλϕʔεͷมߋΛऔಘͰ͖Δ • 38ͷΦϖϨʔγϣϯ՝ۚ  ͍҆

Slide 36

Slide 36 text

'JSFTUPSFτϦΨʔ • υΩϡϝϯτʹมߋ͕͋ͬͨࡍʹؔ਺͕ىಈ • σʔλΛมߋͨ͠ࡍͷॲཧͷڞ௨Խ΍ɺϢʔβݻ༗ͷ σʔλΛͭͷίϨΫγϣϯʹ·ͱΊΔॲཧͷڞ௨Խʹ ༗༻ • ϓογϡ௨஌ʹར༻͍ͯ͠Δ

Slide 37

Slide 37 text

ϓογϡ௨஌ • ৽͍͠औҾ΍͓஌Β͕ͤ͋ͬͨࡍʹϓογϡ௨஌Λૹ ͍ͬͯΔ • ௨஌ͷ഑৴ʹ͸$MPVE.FTTBHJOHΛར༻

Slide 38

Slide 38 text

ϓογϡ௨஌ͷ഑৴ • ௨஌Λ༗ޮԽͨ͠Ϣʔβͷ.FTTBHF5PLFOΛ'JSFTUPSF΁อଘ • ৽͍͠औҾ΍͓஌Β͕ͤ͋ͬͨࡍɺϢʔβ͕5PLFOΛอଘ͍ͯ͠Ε ͹௨஌ΛૹΔ ͓ ஌Βͤ  औ Ҿ ཤ ྺ ௨஌σʔλ  .TH5PLFO ௨஌ Firestore Cloud Functions Cloud Messaging Cloud

Slide 39

Slide 39 text

1VC4VCτϦΨʔ • ࢦఆͨ͠τϐοΫͰϝοηʔδΛड͚औΔͱؔ਺͕ىಈ • Լه༻్ʹར༻͍ͯ͠Δ • ૹۚख਺ྉͷߋ৽ YϒϩοΫνΣʔϯ  • 'JSFTUPSFͷఆظόοΫΞοϓ • શͯͷؔ਺ͷఆظ࣮ߦ

Slide 40

Slide 40 text

ૹۚख਺ྉͷߋ৽ • ૹۚʹ͸ख਺ྉ͕ඞཁ • ૹۚ࣌ؒ͸ଞͷૹۚʹൺ΂ͯࣗ෼ͷૹۚख਺ྉ͕Կ൪໨ʹ ߴ͍͔Ͱܾ·Δ • ҆͘ɺૣ͘ૹۚ͢ΔͨΊʹඞཁͳख਺ྉΛఆظతʹ 'JSFTUPSFʹه࿥͍ͯ͠Δ "1*ྫIUUQTCJUDPJOGFFTDPBQJ

Slide 41

Slide 41 text

ૹۚख਺ྉͷߋ৽ • $MPVE4DIFEVMFSͰఆظతʹϝοηʔδΛૹΔ • "1*ͳͲ͔Β࠷దͳૹۚख਺ྉΛऔಘ • 'JSFTUPSF΁ॻ͖ࠐΉ Firestore Cloud Functions Cloud Pub/Sub Cloud Scheduler Cloud ֎෦ API

Slide 42

Slide 42 text

'JSFTUPSFͷఆظόοΫΞοϓ • ఆظతʹ'JSFTUPSFͷόοΫΞοϓΛऔ͍ͬͯΔ • όοΫΞοϓʹ͸$MPVE"1*Λ࢖༻ • ($4ͷࢦఆͨ͠όέοτʹόοΫΞοϓϑΝΠϧ͕࡞੒͞ ΕΔ ࢀߟIUUQCJUMZ3UIWS Scheduler Cloud Functions Cloud Firestore Cloud Storage Cloud Pub/Sub Cloud Cloud API

Slide 43

Slide 43 text

4UPSBHFτϦΨʔ • ࢦఆ͞ΕͨόέοτʹΦϒδΣΫτ͕࡞੒͞ΕΔͱؔ਺ ͕ىಈ • 'JSFTUPSFͷ#JH2VFSZ΁ͷΤΫεϙʔτʹ࢖༻ • ػೳվળͷͨΊͷ෼ੳ΍σόοάʹར༻

Slide 44

Slide 44 text

'JSFTUPSFΛ#JH2VFSZ΁ΤΫεϙʔτ • ($4ʹ࡞੒͞ΕͨόοΫΞοϓϑΝΠϧͷ͏ͪɺඞཁͳ΋ ͷΛ#JU2VFSZ΁ΤΫεϙʔτ͢Δ • $MPVE"1*Λར༻ ࢀߟIUUQCJUMZ.HQE6V Storage Cloud Functions Cloud Storage Cloud BigQuery Cloud API

Slide 45

Slide 45 text

"OBMZUJDTτϦΨʔ • ࢦఆ͞ΕͨΠϕϯτ͕"OBMZUJDTʹૹΒΕΔͱؔ਺͕ىಈ • ྫBQQ@PQFO JO@BQQ@QVSDIBTFΠϕϯτͳͲ • ΫϥΠΞϯτ͕Πϕϯτʹ௥Ճͨ͠ύϥϝʔλ΍Ϣʔβ৘ ใΛ࢖ͬͨॲཧΛߦ͑Δ • ྫΞϓϦ಺ΞΠςϜΛߪೖͨ͠ϢʔβʹΫʔϙϯΛ෇༩ • ίϯόʔδϣϯΠϕϯτͷ"QQT'MZFS΁ͷૹ৴Λαʔό αΠυͰ·ͱΊͯߦ͏ͨΊʹར༻

Slide 46

Slide 46 text

"QQT'MZFS΁ͷΠϕϯτͷૹ৴ • ର৅ͷΠϕϯτ͕ૹΒΕΔࣄʹΑΓؔ਺͕ىಈ • 'JSFTUPSFʹ֤Πϕϯτ͕ى͖ͨճ਺Λه࿥ • ࢝ΊͯͷΠϕϯτͳΒ"QQT'MZFS΁ૹ৴ Analytics Firestore Cloud Functions Cloud AppsFlyer

Slide 47

Slide 47 text

$SBTIMZUJDTτϦΨʔ • $SBTIMZUJDTͰJTTVF͕ى͖ͨࡍʹؔ਺͕ىಈ • ৽͘͠JTTVF͕ى͖ͨ৔߹ʹ4MBDL௨஌͢ΔΑ͏ʹ͍ͯ͠Δ

Slide 48

Slide 48 text

$SBTIMZUJDTͷ௨஌ • $SBTIMZUJDTͷJTTVFʹมԽ͕͋Δͱؔ਺͕ىಈ͢Δ • ؔ਺ʹJTTVFͷ৘ใ͕౉͞ΕΔͷͰɺ੔ܗͯ͠TMBDL΁௨஌ Functions Cloud Crashlytics Slack

Slide 49

Slide 49 text

ύϑΥʔϚϯεͱίετ

Slide 50

Slide 50 text

ύϑΥʔϚϯεͷܭଌ • ௚ۙ̍िؒͷؔ਺ͷϨΠςϯγΛ֬ೝ͢Δ • ର৅͸ɺݺͼग़͠ճ਺͕ଟΊͷؔ਺ͭ • ৚݅ • ϦʔδϣϯVTDFOUSBM • ޙड़͢Δ$PME4UBSUରࡦΛ࣮ࢪࡁΈ

Slide 51

Slide 51 text

ύϑΥʔϚϯε • QFSDFOUJMFͰNTdNTఔ౓ • ࠷େTFD͔͔Δ࣌΋

Slide 52

Slide 52 text

ύϑΥʔϚϯε • QFSDFOUJMFͰNTdNTఔ౓ • ࠷େTFD͔͔Δ࣌΋

Slide 53

Slide 53 text

ίετ ࢖༻ྔ ྉۚ 'VODUJPOT ສDBMM = 'JSFTUPSF ԯ3FBE ສ8SJUF =ສ 4UPSBHF  -PHHJOH FUD  =ສ 5PUBM  =ສ ˞݄ؒίετ'JSFCBTFͷΈ • ͔ͳΓ͍҆ɻಛʹ'VODUJPOTͱ'JSFTUPSF • ΋͠7.ͱ%#Λ਺୆ཱͯͯϚϧνϦʔδϣϯʹల։͍ͯͨ͠ Β਺ഒ͔͔Δ

Slide 54

Slide 54 text

։ൃtips P A R T 2

Slide 55

Slide 55 text

$PME4UBSUରࡦΛ͠Α͏ • ؔ਺͸͠͹Β͘࢖ΘΕ͍ͯͳ͍ͱεϦʔϓ͢Δ • εϦʔϓޙɺ࠷ॳͷϦΫΤετͷॲཧʹ͸͕͔͔࣌ؒΔ • ͜ΕΛ$PME4UBSUͱݺͿ • ԼهͭͷରࡦΛߦ͏ͱྑ͍ • άϩʔόϧείʔϓͰϞδϡʔϧΛϩʔυ͠ͳ͍ • )551ؔ਺Ͱ'JSFTUPSFΛͳΔ΂͘࢖Θͳ͍ • શͯͷؔ਺Λఆظతʹ࣮ߦ͢Δ ৄ͘͠͸IUUQTCJUMZ.VN9

Slide 56

Slide 56 text

άϩʔόϧείʔϓͰϞδϡʔϧΛϩʔυ͠ͳ͍ • $MPVE'VODUJPOT͸$PME4UBSU࣌ʹJOEFYKTΛϩʔυ͢Δ • ͭͷؔ਺Λ࣮ߦ͢Δ৔߹ʹ΋શͯͷؔ਺͕ಡΈࠐ·ΕΔ • ࣮ߦ͢Δؔ਺Ҏ֎Λϩʔυ͠ͳ͍Α͏࣮૷͢Δͱྑ͍

Slide 57

Slide 57 text

JOEFYKT const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); const db = admin.firestore(); module.exports = functions.https .onRequest((req, res)=>{ // ...... }); GVODTGVODKT const functions = require('firebase-functions') const google = require('googleapis'); const rp = require('request-promise'); const projectId = process.env.GCLOUD_PROJECT; module.exports = functions.storage
 .bucket(`${projectId}-bucket`) .object() .onFinalize((obj)=>{ // ...... }); Ͳͷؔ਺Λ࣮ߦ͢Δ৔߹Ͱ΋ ͢΂ͯͷؔ਺͕ϩʔυ͞ΕΔ ࣮૷ྫमਖ਼લ exports.Func1 = require('./funcs/func1'); exports.Func2 = require('./funcs/func2'); exports.Func3 = require(‘./funcs/func3'); ... GVODTGVODKT

Slide 58

Slide 58 text

JOEFYKT ؔ਺࣮ߦ࣌ʹ͸'6/$5*0/@/".&ʹؔ਺໊͕ೖΔ ͦΕҎ֎ͷ৔߹͸ۭ σϓϩΠ࣌ʹ͸͢΂ͯͷؔ਺͕ϩʔυ͞Εɺ ࣮ߦ࣌ʹ͸࣮ߦର৅ͷؔ਺ͷΈ͕ϩʔυ͞ΕΔʂ const funcName = process.env.FUNCTION_NAME; if (!funcName || funcName === 'Func1') { exports.Func1 = require('./funcs/func1'); } if (!funcName || funcName === 'Func2') { exports.Func2 = require('./funcs/func2'); } ... ࣮૷ྫमਖ਼ޙ

Slide 59

Slide 59 text

)551ؔ਺Ͱ'JSFTUPSFΛͳΔ΂͘࢖Θͳ͍ • 'JSFTUPSF΁ͷॳճͷ઀ଓʹ$PME4UBSU͕͋Δ • HFUʹdඵ͔͔Δ • $MJFOU͔Β௚઀ܨ͛͹جຊతʹෆཁͷ͸ͣͳͷͰͳΔ ΂͘࢖Θͳ͍ํ͕͍͍ • ࢖͏৔߹ɺؔ਺ͷ3VOUJNF͸/PEFʹ • $PME4UBSU͕एׯܰݮ͞ΕΔ ࢀߟJTTVFIUUQCJUMZ%CQ"HI

Slide 60

Slide 60 text

શͯͷؔ਺Λఆظతʹ࣮ߦ͢Δ • ఆظతʹؔ਺Λୟ͘͜ͱͰεϦʔϓΛආ͚ΒΕΔ • -BNCEBͰ͸༗໊ͳख๏ • υΩϡϝϯτʹॻ͔Εͯͳ͍ͷͰਪ঑͞Εͯ͸ͳ͍͔΋ ͠Εͳ͍͕ɺޮՌ͸͋Δ

Slide 61

Slide 61 text

શͯͷؔ਺Λఆظతʹ࣮ߦ͢Δ • $MPVE"1*ͰσϓϩΠ͞Ε͍ͯΔؔ਺ͷϦετ͕औಘ Ͱ͖ΔͷͰɺશͯͷ)551ؔ਺Λୟ͘ • ִؒ͸෼ఔ౓ ৄࡉIUUQCJUMZTXO[O Scheduler Cloud Pub/Sub Cloud Functions Cloud Cloud API

Slide 62

Slide 62 text

ςετʹpSFCBTFGVODUJPOTUFTUΛ࢖͓͏ • ςετʹ͸pSFCBTFGVODUJPOTUFTU͕ศར • ԼهͷNPDLΛߦͬͯ͘ΕΔ • "ENJO4%,ͷ઀ଓϓϩδΣΫτ • ίϯςΩετΦϒδΣΫτ • GVODUJPOTDPOpH

Slide 63

Slide 63 text

UFTUJOEFYUFTUKT Ͳ ͷ ؔ ਺ Λ ࣮ ߦ ͢ Δ ৔ ߹ Ͱ ΋ ͢ ΂ ͯ ͷ ؔ ਺ ͕ ϩ ʔ υ ͞ Ε Δ ࣮૷ྫpSFCBTFGVODUJPOTUFTUͷॳظԽ const test = require('firebase-functions-test')({ databaseURL: 'https://my-project.firebaseio.com', storageBucket: 'my-project.appspot.com', projectId: 'my-project', }, ‘path/to/serviceAccountKey.json’); const mockData = { key: "mocked string" }; // function.config().key -> "mocked string" test.mockConfig(mockData);

Slide 64

Slide 64 text

JOEFYKT UFTUJOEFYUFTUKT Ͳ ͷ ؔ ਺ Λ ࣮ ߦ ͢ Δ ৔ ߹ Ͱ ΋ ͢ ΂ ͯ ͷ ؔ ਺ ͕ ϩ ʔ υ ͞ Ε Δ ࣮૷ྫ0O$BMMؔ਺ͷςετ describe("Callable function test sample", () => { const wrapped = test.wrap(myFuncs.CallableFunc); it("Success", () => { const data = { data: "testdata" }; const ctx = { auth: { uid: 'user1' } } const res = wrapped(data, ctx); assert.deepEqual(res, {data: JSON.stringify(data)}); }); }); exports.CallableFunc = functions.https.onCall((data, ctx) => { console.log(`req: ${JSON.stringify(data)}`) return {data: JSON.stringify(data)} });

Slide 65

Slide 65 text

SFUSZ͸σϑΥϧτͰߦΘΕͳ͍ͷͰ஫ҙ SFUSZϙϦγʔͷJTTVFIUUQTCJUMZ"';ZE • σϑΥϧτͰ͸ؔ਺͕ࣦഊͯ͠΋SFUSZ͞Εͳ͍ • ҰԠɺ($1ͷίϯιʔϧ͔ΒSFUSZ͢ΔΑ͏ઃఆͰ͖Δ • ؔ਺ʹόά͕͋Δͱେྔʹ࣮ߦ͞Εͯ͠·͏ͨΊɺΤϥʔ ϩάΛ࢒ͯ͠ӡ༻ͰΧόʔΛਪ঑ • ඵ͝ͱʹSFUSZ ೔੒ޭ͠ͳ͔ͬͨΒऴྃ • SFUSZϙϦγʔΛΧελϚΠζͰ͖ΔΑ͏ରԠதͱͷ͜ͱ

Slide 66

Slide 66 text

ಉҰ໊ͷؔ਺Λෳ਺ϦʔδϣϯʹσϓϩΠͰ͖ͳ͍ • ݱঢ়Ͱ͸ɺಉҰ໊ͷؔ਺Λෳ਺ϦʔδϣϯʹσϓϩΠͰ͖ͳ͍ • ؔ਺໊ʹQPTUpYΛ͚͖ͭͯͨͨ෼͚ΔରԠ΋Ͱ͖Δ • ྫ(FU%BUB+1 (FU%BUB64 • ࠷ۙɺෳ਺Ϧʔδϣϯ΁ͷσϓϩΠΛαϙʔτ͢Δ13͕Ϛʔδ ͞Εͨ JTTVFIUUQCJUMZ'YM82N

Slide 67

Slide 67 text

·ͱΊ • Ծ૝௨՟΢ΥϨοτͰͲͷΑ͏ʹ$MPVE'VODUJPOT Λ׆༻͍ͯ͠Δ͔঺հͨ͠ • ΄΅͢΂ͯͷτϦΨʔΛ׆༻ͯ͠։ൃ͍ͯ͠Δ • ։ൃɺӡ༻͢ΔதͰಘΒΕͨUJQTΛ঺հͨ͠  $PME4UBSUରࡦ͠Α͏  ςετʹ͸pSFCBTFGVODUJPOTUFTUΛ࢖͓͏  SFUSZ͸σϑΥϧτͰߦΘΕͳ͍  ಉҰ໊ͷؔ਺Λෳ਺ϦʔδϣϯʹσϓϩΠͰ͖ͳ͍ ࠓͷॴ