Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Firestoreのデータ設計について考える
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
TakeshiNishi
February 26, 2020
Programming
2.2k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firestoreのデータ設計について考える
「リモートで勉強会#5 - テーマ何でもLT会-」登壇資料です。
FirebaseのNoSQLデータベース「Firestore」のデータ設計についてまとめました。
TakeshiNishi
February 26, 2020
More Decks by TakeshiNishi
See All by TakeshiNishi
LT駆動開発 - 話題のChatGPTで何か作る
takec24
0
210
成長ステージ別のスタートアップ集結!「事業の魅力とチームの本音」
takec24
0
170
Developing FLAPTALK by Firebase
takec24
1
460
NuxtCompositionAPIとFirebaseの話
takec24
1
560
コロナ禍でもリモート案件を途切れさせない! 案件の獲得方法とリモート案件の進め方。
takec24
0
420
フロントエンドエンジニアのためのFirebaseサーバーレス開発徹底解説
takec24
0
1.4k
スタートアップで働くというエンジニアキャリア
takec24
1
1.3k
人生を変えた炎上ブロジェクト
takec24
0
1.7k
好きなことを選び続けたら代表取締役CTOになりました。
takec24
3
1.4k
Other Decks in Programming
See All in Programming
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
320
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
220
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
Workers Cache を知る
syumai
0
300
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.5k
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
4.3k
MCP Appsでつくるチャット駆動な地図アプリ
nakamori1024
0
110
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
390
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
Webの地図
yosuke_furukawa
PRO
6
4.9k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
8.9k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Exploring anti-patterns in Rails
aemeredith
4
520
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
Ethics towards AI in product and experience design
skipperchong
2
390
WENDY [Excerpt]
tessaabrams
14
39k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
The agentic SEO stack - context over prompts
schlessera
0
940
Automating Front-end Workflow
addyosmani
1369
210k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
From π to Pie charts
rasagy
1
380
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Transcript
ϦϞʔτͰษڧձ#5 - ςʔϚԿͰLTձ- FirebaseͰWebΞϓϦ։ൃͨ͠ ʙ Firestoreͷσʔλઃܭʹ͍ͭͯߟ͑Δ ʙ !@UBLFTIJ@ SFNPTUB
࢙ ʹ͚ͨ͠͠ !@UBLFTIJ@ ࣗݾհ w Ԭͷ4*FSͰγεςϜΤϯδχΞ w ϑϦʔϥϯεϓϩάϥϚʔ w ౦ژͷελʔτΞοϓ$P'PVOEFSऔక$50
w ԬͷελʔτΞοϓͰ৽نࣄۀ্ཱͪ͛ w גࣜձࣾEJ⒎FBTZऔక$50 w ελʔτΞοϓۀ४උதˡࠓ͜͜ /VYUKT'JSFCBTF7VFKT3VCZ($1ϒϩοΫνΣʔϯ ελʔτΞοϓىۀ ম͖ԹઘΩϟϯϓཱྀߦ ແ৬
࠷͍ۙͬͯΔࣄ ୡNF ඪͱظݶΛએݴͯ͠γΣΞʂඪͷྔΛ ՄࢹԽ͠ɺԠԉͯ͠ܨ͕ΔαʔϏεɻ IUUQTUBTTFJNF /VYUKT'JSFCBTF$MPVE'VODUJPOT/PEFKT )BTI5BML Ծ Ձ؍ඪͷڞײͰܨ͕ΔϚονϯάϓϥοτ ϑΥʔϜ4/4
/VYUKT'JSFCBTF$MPVE'VODUJPOT/PEFKT डୗ։ൃ *5ࢧԉ ৽نࣄۀ։ൃʹ͓͚Δٕज़ࢧԉɺ%9ࢧԉɻ ιϑτΣΞडୗ։ൃɻ
'JSFTUPSFͷσʔλઃܭʹ͍ͭͯߟ͑Δ
'JSFCBTF'JSFTUPSFͱʁ Google͕ఏڙ͢ΔBaaS(Backend as a Service) όοΫΤϯυͷॲཧʢೝূɺετϨʔδͷཧɺσʔλϕʔεͷ ཧͳͲʣ͕ෆཁɻ 'JSFCBTFͱʁ 'JSFTUPSFͱʁ FirebaseͷNoSQLσʔλϕʔεɻ
'JSFTUPSFͷσʔλઃܭʹ͍ͭͯߟ͑Δ 'JSFTUPSFͷϦϨʔγϣϯσʔλΛͲ͏औΓѻ͏͔ʁ w 4VC$PMMFDUJPO w ΩʔࢀরϞσϧ w 3FGFSFODFܕ
ηΩϡϦςΟΛҙࣝͨ͠σʔλઃܭ ݖݶཧΧελϜΫϨʔϜΛར༻ / Ͳ͏͢Δʁ
4VC$PMMFDUJPO
4VC$PMMFDUJPOͱʁ VTFST 㸉<6TFS*%> 㸉OBNFlʹ͠z 㸉BHF 㸉EJBSJFT 㸉<%JBSZ*%> c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz 㸉<%JBSZ*%>
c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz wσʔλͷ͕ؔΘ͔Γ͍͢ɻ w ֊͕ਂ͍ͱΘ͔Γʹ͘͘ͳΔɻ
4VC$PMMFDUJPO$PMMFDUJPO(SPVQ const snapshot = await app.firestore() .collectionGroup("diaries") .where() .get() wDPMMFDUJPO(SPVQͰ4VC$PMMFDUJPOΛԣஅతʹݕࡧՄೳɻ
,FZࢀরϞσϧ
,FZࢀরϞσϧͱʁ VTFST 㸉<6TFS*%> 㸉OBNFlʹ͠z 㸉BHF EJBSJFT 㸉<%JBSZ*%> c㸉VTFS*E c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz
㸉<%JBSZ*%> c㸉VTFS*E c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz
4VC$PMMFDUJPOͱ,FZࢀরϞσϧͲͬͪ͏ʁ ୯७ͳࢠؔͩͬͨΒɺ4VC$PMMFDUJPO ݕࡧͷύλʔϯ͕ෳ͋Εɺ,FZࢀরϞσϧ ֊͕ਂ͘ͳΔͷɺ,FZࢀরϞσϧ 4VC$PMMFDUJPOͱ,FZࢀরϞσϧͲͪΒΛ͏͔ʁ அج४ʁʁ ࢲͷஅج४
3FGFSFODFܕ ࢀরܕ
3FGFSFODFܕͱʁ EJBSJFT 㸉<%JBSZ*%> c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz c㸉VTFSVTFST<VTFS*%> 㸉<%JBSZ*%> c㸉UJUMFlλΠτϧz c㸉DPOUFOUlຊจɻຊจɻz c㸉VTFSVTFST<VTFS*%>
w/ͷࢠؔͷσʔλͰ3FGFSFODFܕΛར༻ɻ
3FGFSFODFܕͷऔಘ const diary = await app.firestore() .collection("diaries") .doc([diaryID]) .get() const
user = diary.data().user.get() w ࢠͷσʔλͷऔಘ͕༰қɻ
ηΩϡϦςΟΛҙࣝͨ͠σʔλઃܭ
'JSFTUPSFͰηΩϡϦςΟϧʔϧͷઃܭ͕େࣄ service cloud.firestore { match /databases/{database}/documents { match /users/{userId} {
allow read; allow create: if request.auth.uid != null; allow update, delete: if request.auth.uid == userId; } ɹ} } جຊతʹϑϩϯτΤϯυ͔Βૢ࡞Ͱ͖ΔͷͰɺϑϩϯτΤ ϯυଆͰ6TFS*%ΛِՄೳɻ
ηΩϡϦςΟΛҙࣝͨ͠σʔλઃܭ ྫ Ϣʔβʔͷࢯ໊ɺॅॴɺ࿈བྷઌͳͲͷݸਓใͱɺχοΫωʔ ϜɺϓϩϑΟʔϧࣸਅͳͲͷެ։ใΛ࣋ͭσʔλ VTFST 㸉<6TFS*%> 㸉OJDLOBNFlʹ͠z 㸉QSPpMFlYYYYYYYKQHz 㸉OBNFl࢙z 㸉BEESFTTlԬࢢ౦۠ɾɾɾz
㸉FNBJMlUBLFTIJ!IPHFIPHFDPNz ϑΟʔϧυ୯ҐͰηΩϡϦςΟϧʔϧઃఆ Ͱ͖ͳ͍ͷͰɺެ։͞Εͯ͠·͏ʂʂ
ηΩϡϦςΟΛҙࣝͨ͠σʔλઃܭ VTFST 㸉<6TFS*%> 㸉OJDLOBNFlʹ͠z 㸉QSPpMFlYYYYYYYKQHz QSJWBUFT 㸉<6TFS*%> 㸉OBNFl࢙z 㸉BEESFTTlԬࢢ౦۠ɾɾɾz 㸉FNBJMlUBLFTIJ!IPHFIPHFDPNz
DPMMFDUJPOΛ͚Δɻ
ݖݶཧΧελϜΫϨʔϜΛར༻
ݖݶཧΧελϜΫϨʔϜΛར༻ ྫ BENJOϢʔβʔཧऀը໘Λར༻Ͱ͖ͯɺҰൠϢʔβʔ ཧऀը໘Λར༻Ͱ͖ͳ͍ɻ await admin.auth().setCustomUserClaims( uid, { admin: true
} ) if(user.customClaims.admin) { } ΧελϜΫϨʔϜʹʮBENJOʯΛઃఆ BENJOͷ߹ͷΈॲཧΛߦ͏ w ΧελϜΫϨʔϜݖݶཧͷΈར༻ɻ w ϢʔβʔͷใDPMMFDUJPOΛར༻ɻ
/ Ͳ͏͢Δʁ
/ Ͳ͏͢Δʁ db.collection(“diaries”).get() .then(function(snapshot) { snapshot(function(diary) { diary.data().user.get() }) })
/ ɻϧʔϓ͝ͱʹϦΫΤετɻ / ͋Δఔํͳ͍ɾɾ ྫ͑ɺ৬໊ͳͲ͕ݶఆతɺ΄ͱΜͲมΘΒͳ͍σʔλ ɺϧʔϓͷલʹऔಘͯ͠มʹอ͓͍࣋ͯͯ͠ɺϧʔϓͰɺ ม͔Βऔಘ͢ΔͳͲͷɻ
'JSFCBTFͲ͏ͳͷʁ
'JSFTUPSFͲ͏ͳͷʁ w جຊతʹ࠷ߴͰ͢ʂ w ։ൃɺαʔόʔͷҡ࣋ཧΛߟ͑ΔͱεϞʔϧελʔ τʹ࠷దʂ w ϑϫοͱͨ͠ཁ͔݅ΒͩΜͩΜػೳΛ૿͍ͯ͘͠ͱɺ πϥϛɾɾɾɻ w
࠷ॳ͔ΒҰࣺͯͯ࡞Γ͢͜ͱߟྀ͓ͯ͘͠ɻ w ཁ͕݅͋Δఔݻ·͍ͬͯΕɺྑ͍ɻ
એͰ͢ʂ
)BTI5BML Ծ
)BTI5BMLͱʁ 28 Ձ؍ඪͷڞײͰܨ͕Δ ϚονϯάϓϥοτϑΥʔϜ4/4 )BTI5BMLͱʁ )BTI5BML͕ఏڙ͢ΔՁ ࣗͷඪΈΛຊԻͰ҆৺ͯ͠ߘ͢Δ͜ͱͰɺ ࠓग़ձ͍͍ͨજࡏతͳະདྷͷؒͱܨ͕Δ
)BTI5BMLͱʁ ༑ୡਃϑΥϩʔ͕ͳ͘ɺ·ͣΓ͍ͨ͜ͱ୭ʹݴ͑ͳ͍ΈͳͲΛಗ໊ Ͱͨͩߘ͢Δ͚ͩɻ ߘʹʮڞײʯͨ͠ΓίϝϯτͷΓऔΓ͢Δ͜ͱͰʮڞײʯ্͕͕͍ͬͯ ͖ɺ໊࣮ϓϩϑΟʔϧ͕ݟΕΔΑ͏ʹͳΓɺ࠷ऴతʹ༑ୡͱͯ͠ܨ͕Δɻ 29 ಗ໊ͷެ։ϓϩϑΟʔϧͱ ໊࣮ͷϓϩϑΟʔϧΛొ ಗ໊ͰΓऔΓɻ୭͕ݴͬͯΔ͔ʁ Ͱͳ͘ݴ༿ʹڞײɻ
ΓऔΓ͢Δ͜ͱͰڞײ͕ ্͕Γɺ࠷ऴతʹ༑ୡʹͳΔɻ
ར༻ٕज़ 30 w 'JSFCBTF"VUIFOUJDBUJPO w 'JSFTUPSF w $MPVE4UPSBHF w $MPVE'VODUJPOT
w #JH2VFSZ
)BTI5BML Ծ ࣄલొडத