Slide 1

Slide 1 text

ࠓ೔͔Β࢝ΊΔFirestoreͷςετ ͓Γ͹ʔʢ@oliver_diaryʣ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

ࣗݾ঺հ # Daiki Minakawa ( @oliver_diary ) - ৽ଔ1೥໨ - ݸਓͰ͸Rails࢖ͬͯͨΓ
 ৬৔Ͱ͸Elm৮ͬͯͨΓ - αʔόʔαΠυϝΠϯͩͬͨ͸͕ͣ࠷ۙͰ͸ϑϩϯτΛ৮Δ͜ͱ͕ଟ͍… - झຯ͸ΧϝϥͱԻήʔͱΞχϝ

Slide 4

Slide 4 text

ͲΜͳ͜ͱ࿩͢ʁ • Firestoreʹ͍ͭͯͬ͟ͱ • FirestoreΛ࢖ͬͨҰྫ • FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • CircleCIͰςετΛճͦ͏ʂ • ͓ΘΓʹ

Slide 5

Slide 5 text

Firestoreʹ͍ͭͯͬ͟ͱ

Slide 6

Slide 6 text

Firestoreʹ͍ͭͯͬ͟ͱ • ެࣜʹ͸ʮRealtime Database ΑΓ΋ଟ࠼Ͱߴ଎ͳΫΤϦͱߴੑೳͳε έʔϦϯά͕ಛ௃ʯͱॻ͔Ε͍ͯΔ • https://firebase.google.com/docs/database/rtdb-vs-firestore • ཁ͢Δʹʮ͛͢ʔ࢖͍΍͘͢ʯͯʮ͛͢ʔߴ଎ʯͰʮ͛͢ʔεέʔϦϯά ͢ΔʯNoSQLσʔλϕʔε • σʔλϞσϧͱͯ͠͸ʮσʔλΛυΩϡϝϯτͷίϨΫγϣϯͱͯ͠อ ଘʯ͍ͯ͠Δ

Slide 7

Slide 7 text

FirestoreΛ࢖ͬͨҰྫ

Slide 8

Slide 8 text

FirestoreΛ࢖ͬͨҰྫ • Έͳ͞Μ͸FirestoreΛ࢖ͬͨ͜ͱ͋Γ·͔͢ʁ • ࢖ͬͨ͜ͱ͕͋ΔͷͰ͋Ε͹ɺςετΛॻ͍ͨ͜ͱ͋Γ·͢ ͔ʁ

Slide 9

Slide 9 text

FirestoreΛ࢖ͬͨҰྫ • Ұྫ • UserίϨΫγϣϯ͕ଘࡏ͠ɺΞΧ΢ϯτొ࿥࣌ʹυΩϡϝ ϯτʹEmailͱName͕ɺͦΕͧΕ࠷খ4จࣈɺ࠷େ256จ ࣈͰอଘ͞ΕΔ • ͦͷ࢓༷ͰA͞Μ͕·ͣRuleΛॻ͍ͨ

Slide 10

Slide 10 text

FirestoreΛ࢖ͬͨҰྫ • Rules of A͞Μ • A͞Μ͕هड़ͨ͠Rule
 (ࡉ͔͍෦෼͸ࠓճؾʹ͠ͳ͍)

Slide 11

Slide 11 text

FirestoreΛ࢖ͬͨҰྫ • Ұྫ • ޙ͔ΒNameΛ࠷খ4จࣈɺ࠷େ16จࣈʹ͍ͨ͠ͱ͍͏ཁ ๬͕͖ͨ • B͞Μ͕Ҿ͖ܧ͍ͰRuleΛߋ৽ͨ͠

Slide 12

Slide 12 text

FirestoreΛ࢖ͬͨҰྫ • Rules of B͞Μ • B͞Μ͕มߋͨ͠Rule
 (validateStringͷத਎Λมߋ)

Slide 13

Slide 13 text

FirestoreΛ࢖ͬͨҰྫ • ΋ͪΖΜ͜ΕͩͱɺEmailͷจࣈ਺্ݶ·Ͱ16จࣈʹͳͬͯ ͠·͍ɺ͜ͷঢ়ଶͰϦϦʔε͞ΕͨΒେมͳ͜ͱʹ • ݩͷRuleΛॻ͍ͨA͞Μ͕ѱ͍ͷ͔ʁ • ͦΕͱ΋Α͘νΣοΫΛͯ͠ͳ͔ͬͨB͞Μ͕ѱ͍ͷ͔ʁ

Slide 14

Slide 14 text

FirestoreΛ࢖ͬͨҰྫ • ίʔυͷྑ͠ѱ͠͸ͱ΋͔͘ͱͯ͠ɺ
 ςετΛॻ͍͓͚ͯ͹ɺ࠷ѱͳঢ়ଶʢόά͕ଘࡏͨ͠ঢ়ଶʣ
 ͰͷϦϦʔε͸ආ͚ΒΕͨ͸ͣ

Slide 15

Slide 15 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 16

Slide 16 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • Firestoreͷςετ͸ϩʔΧϧʹΤϛϡϨʔλΛཱͯͯςετͰ͖Δʂ • ͳͷͰɺผ్FirestoreͷϓϩδΣΫτΛ࡞Δඞཁ͸ͳ͠ʂ • ΈΜͳผʑͷΤϛϡϨʔλΛར༻͢ΔͷͰɺςετ͕յΕΔ͜ͱ΋ͳ ͠ʂ • CIͰςετ͕؆୯ʹͰ͖ΔʂʢޙʑͷষͰʣ

Slide 17

Slide 17 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • લ४උͱͯ͠ɺfirebase-toolsͱemulatorͷΠϯετʔϧɾى ಈΛ͓ͤͯ͘͞ • npm i firebase-tools --save • node_modules/.bin/firebase setup:emulators:firestore • node_modules/.bin/firebase serve --only firestore • ΤϛϡϨʔλͷىಈ

Slide 18

Slide 18 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • npm i mocha --save • test༻ͷϥΠϒϥϦΛ௥Ճ • npm i @firebase/testing --save • FirebaseΛ࢖ͬͨςετΛॻ͘ͱ͖ʹඞཁ

Slide 19

Slide 19 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • A͞Μͷfirestore.rules ϑΝΠϧ Λ࡞੒

Slide 20

Slide 20 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • ςετΛ test/test.js ʹهड़͍ͯ͘͠

Slide 21

Slide 21 text

• A͞Μͷ࣮૷࣌఺Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 22

Slide 22 text

• A͞Μͷ࣮૷࣌఺Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 23

Slide 23 text

• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 24

Slide 24 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • B͞Μͷfirestore.rules ϑΝΠϧ Λ࡞੒

Slide 25

Slide 25 text

• B͞Μͷ࣮૷࣌఺Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 26

Slide 26 text

• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 27

Slide 27 text

FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • ςετ͕མͪͨͷͰɺਖ਼͍͠firestore.rules Λهड़͍ͯ͘͠ • ΋ͬͱ͍͍Ruleͷॻ͖ํ΍ɺEmailͷࡉ͔͍ όϦσʔγϣϯͱ͔͸Ұ୴ແࢹͰ

Slide 28

Slide 28 text

• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ

Slide 29

Slide 29 text

CircleCIͰςετΛճͦ͏ʂ

Slide 30

Slide 30 text

CircleCIͰςετΛճͦ͏ʂ • ϩʔΧϧͰΤϛϡϨʔλΛཱͯͯςετΛ͖ͯͨͬͯ͜͠ͱ ͸ɺCIͰ΋࢖͑Δ͸ͣ…! • ͱ͍͏͜ͱͰɺCircleCIͰಈ͔ͯ͠ΈΑ͏ʂ • ؆୯ʹͰ͖ΔͷͰɺίʔυ͚ͩͬ͟ͱઆ໌͠·͢

Slide 31

Slide 31 text

CircleCIͰςετΛճͦ͏ʂ • Ωϟογϡઓུͱ͔Կ΋ͯ͠ͳ͍ ͚Ͳڐͯ͠ • ಛච͢΂͖఺͸ɺΤϛϡϨʔλʹ java͕ඞཁͳͷͰimageʹ
 
 Λࢦఆͯ͠Δ͘Β͍Ͱ͢ circleci/openjdk:stretch-node-browsers-legacy

Slide 32

Slide 32 text

͓ΘΓʹ

Slide 33

Slide 33 text

͓ΘΓʹ • Firestore͸؆୯ʹ࣮૷Ͱ͖ɺ؆୯ʹར༻Ͱ͖Δ൓໘ɺ͔ͬ͠Γͱ RuleΛॻ͔ͳ͚Ε͹ɺσʔλ͕յΕͯ͠·͏͜ͱΛೝࣝ͠ͳ͍ͱ ͍͚ͳ͍ • ͜ͷεϥΠυͰ঺հ͖͠Εͳ͔ͬͨFirestoreͷػೳ͸ͨ͘͞Μ͋ Γ·͕͢ɺ·ͨػձ͕͋Ε͹͝঺հ͍ͨ͠ͱࢥ͍·͢
 ʢFieldValueͱ͔Firebase AuthͷCustomClaimͱͷ࿈ܞͱ͔…ʣ

Slide 34

Slide 34 text

͋Γ͕ͱ͏͍͟͝·ͨ͠