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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
oliver
August 24, 2019
Programming
2
12k
今日から始める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
1.7k
Cacheable Presigned URL with Cloudflare Workers
oliver_diary
2
8.9k
テキストエディタのブラウザ実装 / tokyo_study
oliver_diary
0
350
迫り来る絶望的状況からの脱却物語 / #CEDEC2021
oliver_diary
7
17k
PWAとクラウドゲーミングの現状そしてPWAとOOParts
oliver_diary
3
13k
OOPartsによるPWA事例紹介
oliver_diary
2
11k
クラウドゲーミング最新開発事例 - #CEDEC2020
oliver_diary
6
18k
クラウドゲーミング時代のPWA
oliver_diary
0
13k
OOPartsが切り開く クラウドゲーミング ✖︎ PWA
oliver_diary
4
17k
Other Decks in Programming
See All in Programming
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
380
ロボットのための工場に灯りは要らない
watany
12
3.2k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
180
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
7
3.1k
AI活用のコスパを最大化する方法
ochtum
0
320
存在論的プログラミング: 時間と存在を記述する
koriym
4
470
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
150
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
Rethinking API Platform Filters
vinceamstoutz
0
240
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.3k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
500
Discover your Explorer Soul
emna__ayadi
2
1.1k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
280
The SEO Collaboration Effect
kristinabergwall1
0
400
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Balancing Empowerment & Direction
lara
5
960
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
340
WCS-LA-2024
lcolladotor
0
500
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ͱͷ࿈ܞͱ͔…ʣ
͋Γ͕ͱ͏͍͟͝·ͨ͠