Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今日から始めるFirestoreのテスト
Search
oliver
August 24, 2019
Programming
2
11k
今日から始めるFirestoreのテスト
「Firebase Hands-on @BEENOS」にて登壇した発表資料です。
https://firebase-community.connpass.com/event/140369/
oliver
August 24, 2019
Tweet
Share
More Decks by oliver
See All by oliver
comilioとCloudflare、そして未来へと向けて
oliver_diary
6
780
Cacheable Presigned URL with Cloudflare Workers
oliver_diary
2
7.1k
テキストエディタのブラウザ実装 / tokyo_study
oliver_diary
0
300
迫り来る絶望的状況からの脱却物語 / #CEDEC2021
oliver_diary
7
16k
PWAとクラウドゲーミングの現状そしてPWAとOOParts
oliver_diary
3
11k
OOPartsによるPWA事例紹介
oliver_diary
2
9.5k
クラウドゲーミング最新開発事例 - #CEDEC2020
oliver_diary
6
17k
クラウドゲーミング時代のPWA
oliver_diary
0
12k
OOPartsが切り開く クラウドゲーミング ✖︎ PWA
oliver_diary
4
16k
Other Decks in Programming
See All in Programming
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
960
Gleamという選択肢
comamoca
6
740
Javaに鉄道指向プログラミング (Railway Oriented Pro gramming) のエッセンスを取り入れる/Bringing the Essence of Railway-Oriented Programming to Java
cocet33000
2
580
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
760
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
830
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
230
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
200
セキュリティマネジャー廃止とクラウドネイティブ型サンドボックス活用
kazumura
1
180
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
100
Create a website using Spatial Web
akkeylab
0
290
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
2
1k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
290
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
GraphQLとの向き合い方2022年版
quramy
46
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
910
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
4 Signs Your Business is Dying
shpigford
184
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Designing for humans not robots
tammielis
253
25k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Producing Creativity
orderedlist
PRO
346
40k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Building Applications with DynamoDB
mza
95
6.5k
Transcript
ࠓ͔Β࢝ΊΔFirestoreͷςετ ͓Γʔʢ@oliver_diaryʣ
ࣗݾհ
ࣗݾհ # Daiki Minakawa ( @oliver_diary ) - ৽ଔ1 -
ݸਓͰRailsͬͯͨΓ ৬ͰElm৮ͬͯͨΓ - αʔόʔαΠυϝΠϯ͕ͩͬͨͣ࠷ۙͰϑϩϯτΛ৮Δ͜ͱ͕ଟ͍… - झຯΧϝϥͱԻήʔͱΞχϝ
ͲΜͳ͜ͱ͢ʁ • Firestoreʹ͍ͭͯͬ͟ͱ • FirestoreΛͬͨҰྫ • FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • CircleCIͰςετΛճͦ͏ʂ •
͓ΘΓʹ
Firestoreʹ͍ͭͯͬ͟ͱ
Firestoreʹ͍ͭͯͬ͟ͱ • ެࣜʹʮRealtime Database ΑΓଟ࠼ͰߴͳΫΤϦͱߴੑೳͳε έʔϦϯά͕ಛʯͱॻ͔Ε͍ͯΔ • https://firebase.google.com/docs/database/rtdb-vs-firestore • ཁ͢Δʹʮ͛͢ʔ͍͘͢ʯͯʮ͛͢ʔߴʯͰʮ͛͢ʔεέʔϦϯά
͢ΔʯNoSQLσʔλϕʔε • σʔλϞσϧͱͯ͠ʮσʔλΛυΩϡϝϯτͷίϨΫγϣϯͱͯ͠อ ଘʯ͍ͯ͠Δ
FirestoreΛͬͨҰྫ
FirestoreΛͬͨҰྫ • Έͳ͞ΜFirestoreΛͬͨ͜ͱ͋Γ·͔͢ʁ • ͬͨ͜ͱ͕͋ΔͷͰ͋ΕɺςετΛॻ͍ͨ͜ͱ͋Γ·͢ ͔ʁ
FirestoreΛͬͨҰྫ • Ұྫ • UserίϨΫγϣϯ͕ଘࡏ͠ɺΞΧϯτొ࣌ʹυΩϡϝ ϯτʹEmailͱName͕ɺͦΕͧΕ࠷খ4จࣈɺ࠷େ256จ ࣈͰอଘ͞ΕΔ • ͦͷ༷ͰA͞Μ͕·ͣRuleΛॻ͍ͨ
FirestoreΛͬͨҰྫ • Rules of A͞Μ • A͞Μ͕هड़ͨ͠Rule (ࡉ͔͍෦ࠓճؾʹ͠ͳ͍)
FirestoreΛͬͨҰྫ • Ұྫ • ޙ͔ΒNameΛ࠷খ4จࣈɺ࠷େ16จࣈʹ͍ͨ͠ͱ͍͏ཁ ͕͖ͨ • B͞Μ͕Ҿ͖ܧ͍ͰRuleΛߋ৽ͨ͠
FirestoreΛͬͨҰྫ • Rules of B͞Μ • B͞Μ͕มߋͨ͠Rule (validateStringͷதΛมߋ)
FirestoreΛͬͨҰྫ • ͪΖΜ͜ΕͩͱɺEmailͷจࣈ্ݶ·Ͱ16จࣈʹͳͬͯ ͠·͍ɺ͜ͷঢ়ଶͰϦϦʔε͞ΕͨΒେมͳ͜ͱʹ • ݩͷRuleΛॻ͍ͨA͞Μ͕ѱ͍ͷ͔ʁ • ͦΕͱΑ͘νΣοΫΛͯ͠ͳ͔ͬͨB͞Μ͕ѱ͍ͷ͔ʁ
FirestoreΛͬͨҰྫ • ίʔυͷྑ͠ѱ͠ͱ͔͘ͱͯ͠ɺ ςετΛॻ͍͓͚ͯɺ࠷ѱͳঢ়ଶʢόά͕ଘࡏͨ͠ঢ়ଶʣ ͰͷϦϦʔεආ͚ΒΕͨͣ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • FirestoreͷςετϩʔΧϧʹΤϛϡϨʔλΛཱͯͯςετͰ͖Δʂ • ͳͷͰɺผ్FirestoreͷϓϩδΣΫτΛ࡞Δඞཁͳ͠ʂ • ΈΜͳผʑͷΤϛϡϨʔλΛར༻͢ΔͷͰɺςετ͕յΕΔ͜ͱͳ ͠ʂ • CIͰςετ͕؆୯ʹͰ͖ΔʂʢޙʑͷষͰʣ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • લ४උͱͯ͠ɺfirebase-toolsͱemulatorͷΠϯετʔϧɾى ಈΛ͓ͤͯ͘͞ • npm i firebase-tools --save •
node_modules/.bin/firebase setup:emulators:firestore • node_modules/.bin/firebase serve --only firestore • ΤϛϡϨʔλͷىಈ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • npm i mocha --save • test༻ͷϥΠϒϥϦΛՃ • npm
i @firebase/testing --save • FirebaseΛͬͨςετΛॻ͘ͱ͖ʹඞཁ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • A͞Μͷfirestore.rules ϑΝΠϧ Λ࡞
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • ςετΛ test/test.js ʹهड़͍ͯ͘͠
• A͞Μͷ࣮࣌Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
• A͞Μͷ࣮࣌Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • B͞Μͷfirestore.rules ϑΝΠϧ Λ࡞
• B͞Μͷ࣮࣌Ͱͷςετέʔε FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ • ςετ͕མͪͨͷͰɺਖ਼͍͠firestore.rules Λهड़͍ͯ͘͠ • ͬͱ͍͍Ruleͷॻ͖ํɺEmailͷࡉ͔͍ όϦσʔγϣϯͱ͔Ұ୴ແࢹͰ
• ςετ࣮ߦʂ FirestoreͷςετΛॻ͍ͯΈΑ͏ʂ
CircleCIͰςετΛճͦ͏ʂ
CircleCIͰςετΛճͦ͏ʂ • ϩʔΧϧͰΤϛϡϨʔλΛཱͯͯςετΛ͖ͯͨͬͯ͜͠ͱ ɺCIͰ͑Δͣ…! • ͱ͍͏͜ͱͰɺCircleCIͰಈ͔ͯ͠ΈΑ͏ʂ • ؆୯ʹͰ͖ΔͷͰɺίʔυ͚ͩͬ͟ͱઆ໌͠·͢
CircleCIͰςετΛճͦ͏ʂ • Ωϟογϡઓུͱ͔Կͯ͠ͳ͍ ͚Ͳڐͯ͠ • ಛච͖͢ɺΤϛϡϨʔλʹ java͕ඞཁͳͷͰimageʹ Λࢦఆͯ͠Δ͘Β͍Ͱ͢ circleci/openjdk:stretch-node-browsers-legacy
͓ΘΓʹ
͓ΘΓʹ • Firestore؆୯ʹ࣮Ͱ͖ɺ؆୯ʹར༻Ͱ͖Δ໘ɺ͔ͬ͠Γͱ RuleΛॻ͔ͳ͚Εɺσʔλ͕յΕͯ͠·͏͜ͱΛೝࣝ͠ͳ͍ͱ ͍͚ͳ͍ • ͜ͷεϥΠυͰհ͖͠Εͳ͔ͬͨFirestoreͷػೳͨ͘͞Μ͋ Γ·͕͢ɺ·ͨػձ͕͋Ε͝հ͍ͨ͠ͱࢥ͍·͢ ʢFieldValueͱ͔Firebase AuthͷCustomClaimͱͷ࿈ܞͱ͔…ʣ
͋Γ͕ͱ͏͍͟͝·ͨ͠