Slide 1

Slide 1 text

1 Firestore౦ژϦʔδϣϯར༻ʹ൐͏ FirebaseϓϩδΣΫτҠߦखॱ Ξϧגࣜձࣾɹԕࢁߊ !WFYVT

Slide 2

Slide 2 text

2 ࣗݾ঺հ - Ξϧגࣜձࣾ ԕࢁߊ (@vexus2) - ݱ৬Ͱ͸ VP of Product - ݩʑBackend(Ruby/PHP)͕ͩ࠷ۙ͸FrontendدΓ - TypeScript / Vue / Nuxt / Firebase ͳͲ - Firebaseྺ͸1೥6ϲ݄͘Β͍ - ຊ൪ӡ༻ྺ͸8ϲ݄͘Β͍ - झຯ͸ϚϯΨΛಡΉ͜ͱ

Slide 3

Slide 3 text

3 ࣗݾ঺հ ແྉͰఏڙ͞Ε͍ͯΔອըΛूΊͨʮອըϏϨοδʯΛݸਓͰӡӦɻ ϐʔΫ࣌ͷաڈ30೔ؒͰ1060ສPV͕͋ΓɺͦͷޙΞϧ΁Ϧϒϥϯυɻ Xxx ίϛϡχςΟ GoogleͰʮອըଜʯͰݕࡧ͢Δͱ1Ґʹ Yahoo!χϡʔεͷτοϓʹ(هࣄݩɿITmedia)

Slide 4

Slide 4 text

4 Ξϧͱ͸ʁ W

Slide 5

Slide 5 text

5 ࠓ೔࿩͢಺༰ͷલఏ঺հ Ξϧ͸ɺϚϯΨϑΝϯͷͨΊʹɺϚϯΨΛൃݟͰ͖ΔศརͳαʔϏεΛఏڙ͢Δ ϚϯΨ୳͠ͷ৘ใαʔϏεͰ͢ɻ iOS/Web൛ΛͦΕͧΕఏڙதɻ

Slide 6

Slide 6 text

6 ౦ژϦʔδϣϯ΁ͷҠߦ W

Slide 7

Slide 7 text

7 Firestoreͷલఏ

Slide 8

Slide 8 text

8 ؆қͳϕϯνϚʔΫ ଌఆ೔͸2019/1/25 ࣮ߦ؀ڥ ॳճ 2ճ໨Ҏ߱ us-central 1݅औಘ 892.3ms 202.3ms 20݅औಘ(SubCollection) 864ms 260.8ms asia-northeast1 1݅औಘ 370.3ms 125.6ms 20݅औಘ(SubCollection) 461.3ms 156.4ms ࠃ಺ͰαʔϏεΛల։͢Δ্Ͱ͸1ඵͰ΋ૣ͘TokyoϦʔδϣϯʹ Ҡߦ͢Δʹӽͨ͜͠ͱ͸ͳ͍͕ɺ໘౗ͳͱ͜Ζ͕͍͔ͭ͋͘Δɻ ࢼߦճ਺100ճఔ౓ͷ؆қతͳϕϯνϚʔΫͰͷฏۉ஋ɻ ࣮ߦωοτϫʔΫ؀ڥͳͲʹΑͬͯมΘΔ͕ࢀߟ·Ͱɻ

Slide 9

Slide 9 text

9 Firestoreͷલఏ 1. Cloud FirestoreͷσϑΥϧτϦʔδϣϯ͸ us-centralɻ
 βҎલ͔Β࢖༻͍ͯ͠ΔϓϩδΣΫτ͸શ෦͜ͷঢ়ଶɻ 2. FirestoreͷϦʔδϣϯ͸
 ʮFirebaseϓϩδΣΫτʯͷ࡞੒࣌
 ͷΈมߋՄೳ 3. Firestore͸1ͭͷϓϩδΣΫτʹ͖ͭ
 1͔ͭ͠࡞੒Ͱ͖ͳ͍ (GCPͷϓϩδΣΫτʹ΋ඥ෇͍͍ͯΔ) FirestoreͷϦʔδϣϯΛมߋ͢ΔͨΊʹ͸ FirebaseϓϩδΣΫτΛ࡞Γ௚͢ඞཁ͕͋Δ

Slide 10

Slide 10 text

10 खॱͱ΍Δ͜ͱ W

Slide 11

Slide 11 text

11 ϓϩδΣΫτҠߦ·Ͱͷશମ૾ - GCPϢʔβͳͲͷ੔ཧɺҠߦ - PubSub, Cloud Scheduler, BigQueryͳͲ࢖༻͍ͯ͠ΔGCPαʔϏεͷҠߦ - ΞϓϦଆͷॾʑ޲͖ઌมߋͨ͠ঢ়ଶͰΞϓϦ৹ࠪΛ௨͓ͯ͘͠
 - Force UpdateͳͲͷ࢓૊Έ͸େৎ෉͔ʁ΋ཁ֬ೝ - Cloud StorageͷҠߦઌͷBucketΛ࡞͓ͬͯ͘ - ϓϩδΣΫτҠߦʹ൐͏Ϣʔβ੍໿ͷ֬ೝ - ϝϯςφϯε࣌ؒͷࠂ஌ - σʔλྔʹ΋ΑΔ͕Ұ൪ֻ͕͔࣌ؒΔͷ͸FirestoreͷσʔλҠߦ ࣄલʹ΍Δ͜ͱ ϝϯςφϯεதʹ΍Δ͜ͱ - Firestore AuthͷσʔλҠߦ - FirestoreͷσʔλͷҠߦ - Cloud StorageͷσʔλҠߦ - CDNͷOriginͷઃఆͳͲ΋͋Ε͹๨Εͣʹ - Cloud FunctionsͷσϓϩΠ - ϝϯςφϯεऴྃ࣌ͷForce Update

Slide 12

Slide 12 text

12 ϓϩδΣΫτҠߦʹ൐͏Ϣʔβ੍໿ͷ֬ೝ - Firebase Authentication͸Import/Export͕Ͱ͖ΔͷͰ৽ϓϩδΣΫτͰ΋Ҡ ߦલͱಉ͡ϢʔβͰϩάΠϯ͕Ͱ͖Δ(ιʔγϟϧϩάΠϯؚΉ) - ͨͩ͠ɺϩάΠϯঢ়ଶ͕Ҿ͖ܧ͕Εͳ͍ͨΊಗ໊(Anonymous)Ϣʔβͷσʔ λ͸࣮࣭ফ͑Δ - ·ͨɺϨΞέʔε͕ͩʢΞϧͷΑ͏ʹʣGoogleϩάΠϯʹ௥ՃͰGmailͳͲ ͷݖݶΛऔಘ͍ͯ͠Δ৔߹ɺ৽ϓϩδΣΫτҠߦޙʹ࠶౓શϢʔβʹݖݶ ֬ೝը໘ΛܦͯaccessTokenΛऔಘ͢Δඞཁ͕͋Δɻ ಗ໊Ϣʔβ͕ϝϯςҠલͷσʔλ͕࢖͑ͳ͘ͳͬͯ΋໰୊ͳ͍͔ɺ
 ໰୊͕͋ΔΑ͏Ͱ͋Ε͹ҠߦલʹଞϩάΠϯͤ͞Δ͜ͱͰ
 σʔλ͕ফ͑ͳ͘ͳΔΑ͏௨஌ظؒΛઃ͚ΔඞཁͳͲݕ౼͢Δ

Slide 13

Slide 13 text

13 Firestore AuthͷσʔλҠߦ - جຊతʹ͸Exportͯ͠Import͢Δ͚ͩɻ - લड़ͷͱ͓Γಗ໊ϩάΠϯ͸ϩάΠϯঢ়ଶ͕Ҿ͖ܧ͛ͳ͍ͷͰɺʢ৽ϓϩδΣ Ϋτʹಗ໊ϢʔβͷϊΠζΛ࣋ͪࠐΈͨ͘ͳ͍৔߹͸ʣExport͞ΕͨJSON ͷத਎͔Βಗ໊ϢʔβͷσʔλΛ࡟আͯ͠΋ྑ͍ɻ $ firebase auth:export firebase-auth-users.json --format json --project چFirebaseϓϩδΣΫτ $ firebase auth:import firebase-auth-users.json --project ৽FirebaseϓϩδΣΫτ https://gist.github.com/vexus2/d5eecdc76cf94526645656c7a01f87c9

Slide 14

Slide 14 text

14 FirestoreͷσʔλͷExport/Import چFirestore→GCSʹσʔλΛExportɺGCS→৽Firestoreʹ Import͢Δɻ ͨͩ͠ɺಉҰϦʔδϣϯͷGCS͔Β͔͠Import/ExportͰ ͖ͳ͍ͷͰBucketΛ2ͭ༻ҙ͢Δඞཁ͕͋Δɻ چFirestore
 (us-central) ৽Firestore
 (asia-northeast1) gs:// backup-us
 (us-central1) gs:// backup-asia
 (asia-northeast1)

Slide 15

Slide 15 text

15 FirestoreͷσʔλͷExport/Import $ gcloud beta firestore export gs://backup-us --project چFirebaseϓϩδΣΫτ $ gsutil ls -a gs://backup-us | tail -n1 # όοΫΞοϓϑΝΠϧ֬ೝ $ gsutil cp -r `gsutil ls -a gs://backup-us | tail -n1` gs://backup-asia $ gsutil ls -a gs://backup-asia | tail -n1 # όοΫΞοϓϑΝΠϧ֬ೝ $ gcloud beta firestore import `gsutil ls -a gs://backup-asia | tail -n1` --project ৽Firebaseϓϩδ ΣΫτ https://gist.github.com/vexus2/d5eecdc76cf94526645656c7a01f87c9

Slide 16

Slide 16 text

16 ·ͱΊ W

Slide 17

Slide 17 text

17 ·ͱΊ - ʢࣗࣾͷαʔϏε͕ʣຊ൪ϩʔϯνલͳΒɺҠߦ͸ʮ͍͑΍ͬʯͰҰؾʹ ΍ͬͪΌ͏ͷ͕ಘࡦɻ - طʹϩʔϯνޙͳΒɺ૿͍͑ͯ͘طଘσʔλͱͷ੔߹ੑΛ୲อ͢ΔͨΊʹϝ ϯςφϯεΛೖΕͯҠߦ͢Δͷ͕ݱ࣮తɻ - ਖ਼௚΍Δ͜ͱ͸ଟ͍͠ߟྀࣄ߲΋ଟ͍ͷͰେม͕ͩɺ΍ΔՁ஋͸े෼ʹ͋ Δɻ

Slide 18

Slide 18 text

18