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
可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
TsukasaSekiguchi
June 01, 2019
Technology
730
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf
https://gunmaweb.connpass.com/event/127593/
のLTスライドです!
TsukasaSekiguchi
June 01, 2019
More Decks by TsukasaSekiguchi
See All by TsukasaSekiguchi
既存repo / AIとのやり取りから、おれのハーネスエンジニアリングの現状と課題を見てもらった
tsukasagr
1
100
おれのAgentic Coding 2026/03
tsukasagr
1
170
Agentic Coding 時代に絶対抑えておきたい git worktree の基礎知識と、ちょっとだけMCPについても言及
tsukasagr
0
130
おれのAI活用の現状とこれから
tsukasagr
0
250
Deep Researchで積読解消!技術書キャッチアップ術
tsukasagr
0
140
v0とCursorで爆速開発🚀
tsukasagr
0
300
Prismaを1年くらい使ってみたのでちょっと語る
tsukasagr
0
270
playwrightのVSCode拡張が便利すぎて、もはやE2E書けないとか言い訳できないレベルだった
tsukasagr
0
260
AWS_Copilotではじめる簡単コンテナ運用.pdf
tsukasagr
0
430
Other Decks in Technology
See All in Technology
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
280
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
450
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
380
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
AI驚き屋発見器
yama3133
1
110
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
900
複数プロダクトで進めるAI機能実装 ── 実践から得たリアルな学びとロードマップ実現への挑戦 / AICon2026_yanari
rakus_dev
1
280
書籍セキュアAPIについて
riiimparm
0
320
なぜ、あなたのエージェントは言うことを聞かないのか
segavvy
1
450
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
2
150
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
320
Claude Mythos、Fable...フロンティアAIの最新動向と企業のセキュリティ対策
flatt_security
0
130
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
640
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
BBQ
matthewcrist
89
10k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
500
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
ՄೳͳݶΓRDBͷ·· Cloud FireStoreΛ ͬͯΈΔ 2019/06/01 Gunma.web #35 ؔޱ ࢘
໊લ: ؔޱ࢘ SNS: GitHub: TsukasaGR Twitter: TsukasaGr NewsPicks: ؔޱ࢘ ࠲ӈͷ
ࣗͷͨΊʹɺଞਓʹਚ͘͢ ࣄ: αϥϦʔϚϯ: SIerͰ৽نࣄۀ(toC͚ͷWebαʔϏε)։ൃ ϑϦʔϥϯε: ελʔτΞοϓͷWebΤϯδχΞ ࠷ۙ৮ͬͯΔͷ: PHP(Laravel)ɺJavascript/Typescript(Vue.js/Nuxt.js)ɺGraphQLɺDockerɺAWSɺFirebase ࣗݾհ
What is Cloud Firestore? • Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ
• ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" App Server͕ෆཁʂ
αʔόʔཧ͕ෆཁ • AppServerΛ༻ҙ͠ͳͯ͘ྑ͍ • όοΫΤϯυͷॲཧΛҰॻ͔ͣʹϑϩϯτΤϯ υͷΈͰ݁ग़དྷΔ
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
αʔόʔཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
αʔόʔཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" DB Server͕ෆཁʂ
αʔόʔཧ͕ෆཁ • DBServerΛ༻ҙ͠ͳͯ͘ྑ͍ • Φʔτεέʔϧͯ͘͠ΕΔͷͰߴෛՙʹΑΔμ ϯΛؾʹ͠ͳͯ͘ྑ͍
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" ΈԽָ͕ʂ
ϦΞϧλΠϜಉظָ͕ • Web Socket ServerΛ༻ҙ͠ͳͯ͘ྑ͍ • ߏஙίετθϩ
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
RDBͱউख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛͬͨ ΫΤϦ
RDBͱউख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛͬͨ ΫΤϦ ϦϨʔγϣϯઌͷ݅Ͱ ͍͘ΒͰࢦఆग़དྷΔ ϦϨʔγϣϯઌͷ͕͔݅ͳΓݶఆతͰɺ ͦͦϦϨʔγϣϯ͢Δͷͪΐ͍໘
ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ •
େنσʔλʹ͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζࣗ ͰؤுΔ
ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ •
େنσʔλʹ͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζࣗ ͰؤுΔ ͕ඞཁ
1: σʔλͷԽ 3%# 'JSFTUPSF /P42-
1: σʔλͷԽ 3%# 'JSFTUPSF /P42- ͋͑ͯඇਖ਼نԽͯ͠ ࣋ͨͤΔ
2: Client Side Join 3%# 'JSFTUPSF /P42-
2: Client Side Join 3%# 'JSFTUPSF /P42- ݩσʔλऔಘޙɺϦϨʔγϣϯઌͷσʔλΛऔಘ
Client Side Join͢ΕRDBͷ··ͰͦΕͳΓʹ͑Δ • σʔλΛԽͤ͞ΔͷRDB͔Β͢Δͱ࠷ॳڋ ൱Ԡ͕ग़ͯ͠·͏ • Client Side JoinͳΒDBΛਖ਼نԽͨ͠··Ͱߦ͚Δ
• (ݺͼग़͢ଆN+1Λঝͷ͏͑ͰΰϦΰϦΔඞཁ͋Δ͕)
ͦΕͰͬͺΓਏΈ͋Δ • ͑Δൺֱԋࢉࢠ <, <=, ==, >, >= ͷΈ •
OR͕͑ͳ͍ • In۟͑ͳ͍ • Like͑ͳ͍
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ݅ΛFirestoreͰΓ͘Γ͢Δͷݱ࣮తͰͳ͍
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ݅ΛFirestoreͰΓ͘Γ͢Δͷݱ࣮తͰͳ͍ શจݕࡧΛ͏
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ ॊೈɺ͔ͭߴʹσʔλऔಘग़དྷΔ
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ ॊೈɺ͔ͭߴʹσʔλऔಘग़དྷΔ શจݕࡧ × Client Side Join = DBΛਖ਼نԽͨ͠··FirestoreΛ͑Δʂ
ͨͩ͠ɺ༻๏༻ྔΛकͬͯਖ਼ͬͨ͘͠΄͏͕ྑ͍ • ͦͦRDBͱNoSQLͰత͕ҧ͏ͷͰ͏໘ ͕ҟͳΔ • ͲͪΒ͔͚ͩͰͳ͘ɺ྆ํΛॴʹΑ͍ͬͯ ͚Δͷ͕εϚʔτ(ͱࢥΘΕΔ)
Ͱɺͳͥ͜ͷLTΛͨ͠ͷ͔ • ʮͱΓ͋͑ͣࠔͬͨΒϩΩιχϯʯతͳײ͡Ͱ༻๏༻ ྔΛଟগແࢹͯ͠ͰָʹͳΓ͍͕ͨ࣌͋Δͣ
ϩΩιχϯͷ͍࣌ • SPA(※) • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ
(※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ ௨όοξνϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠ͳ͍ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ ௨όοξνϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠ͳ͍ DBΛਖ਼نԽͨ͠··FirestoreΛ͏͕͘Δ ͔͠Εͳ͍(͠ɺདྷͳ͍͔͠Εͳ͍) DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
͍͞͝ʹ
• ࠓ͍ͭͬͯ͘ΔϓϩμΫτͰࢼ͍ͯ͠Δ͕ɺ·ͩྑ ͠ѱ͠ΛஅͰ͖͍ͯͳ͍ • RDB͕࿀͘͠ͳΔ࣌ਖ਼݁ߏ͋Δ • ͦΕͰݸਓతʹ͏ཧ༝ҎԼ • DB Serverෆཁ
>>> App Serverෆཁ >>> ϦΞ ϧλΠϜσʔλಉظ • ແྉ͔Β࢝ΊΒΕΔͷͰɺͥͻօ͞Μ৮ͬͯΈͯ ͍͔͕Ͱ͠ΐ͏͔ʂ