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を利用したMAPアプリの開発について
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
DaikiOKA
August 22, 2019
Programming
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firestoreを利用したMAPアプリの開発について
DaikiOKA
August 22, 2019
More Decks by DaikiOKA
See All by DaikiOKA
スマホアプリのアナリティクス最適解
daikioka
0
220
位置情報を利用したMAPアプリの開発
daikioka
0
300
ぜひ使って欲しいCloud Functions for Firebase
daikioka
0
300
nori-na Tech Night vol.3
daikioka
0
330
相乗りアプリを構想から1ヶ月でストアにリリースできたわけ
daikioka
0
260
nori-na_tech_night_vol2.pdf
daikioka
0
570
Other Decks in Programming
See All in Programming
Deep dive into the select statement (GopherCon UK)
jespino
0
180
新卒PdEのリアル
ryu1013
1
490
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
130
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
150
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
950
高専キャリア LT 発表内容
crysta1221
6
5.7k
Foundry Localでエージェント開発
seosoft
0
180
AHC070解法紹介
eijirou
0
110
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
140
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
The browser strikes back
jonoalderson
0
1.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Paper Plane
katiecoart
PRO
3
53k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Transcript
Caraquri Tech Night #4 FirestoreΛར༻ͨ͠MAPΞϓϦͷ։ൃʹ͍ͭͯ גࣜձࣾZERO TO ONE Ԭ େو
5XJUUFS*% !OPSJOPSJ@PLB Ԭେو • ৽ଔͰZERO TO ONEʹೖࣾ͠ɺ nori-naʹδϣΠϯ͢Δɻ • ࣾձਓ̏ࣾ།ҰͷΞϓϦΤ
ϯδχΞ • iOS(Objective-CɺSwift)ɺ Android(JavaɺKotlin)ɺWebͱ αʔόʔ(CakePHPɺTypeScript) Ͱ։ൃ ࣗݾհ DBSBRVSJ5FDI/JHIU
OPSJOBͱʁ ۭ੮ͷ͋ΔυϥΠόʔͱಉ͡ํʹҠಈ͍ͨ͠ਓΛ Ϛονϯάͤ͞Δ૬ΓʢϥΠυγΣΞʣαʔϏε DBSBRVSJ5FDI/JHIU
ϏδωεϞσϧ ૬Γ ۭ੮ Ҡಈ͍ͨ͠ υϥΠόʔ खྉ DBSBRVSJ5FDI/JHIU
ΞϓϦͷྲྀΕ త ਤɾ501 Ϛονϯά ϝοηʔδ DBSBRVSJ5FDI/JHIU
ਤը໘ͷઆ໌ ৽ணใ ϥΠϒνϟοτ ৽ن࡞ ืूͷݕࡧ ۙ͘ͷϩάΠϯϢʔβʔΛ දࣔ ૬ΓͷϦΫΤετΛૹ৴ DBSBRVSJ5FDI/JHIU
OPSJOB 'JSFTUPSF $MPVEGVODUJPOT GPSpSFCBTF όοΫΤϯυ 'JSFCBTF nori-naͷγεςϜߏ ͍߹Θͤ
DBSBRVSJ5FDI/JHIU
ࠓͷ͓ DBSBRVSJ5FDI/JHIU
ҐஔใΛར༻ͨ͠ΞϓϦ͕ ૿Ճ DBSBRVSJ5FDI/JHIU
ҐஔใΛڞ༗͢Δ͜ͱʹ ߅ײ͕ͳ͘ͳ͖ͬͯͨ ਤར༻࣮ଶௐࠪcגࣜձࣾθϯϦϯ DBSBRVSJ5FDI/JHIU
•έϞϯGO Z•nly Twit•er DBSBRVSJ5FDI/JHIU
چόʔδϣϯ ৽όʔδϣϯ ςΩετϕʔε Πϕϯτॏࢹ Ϛοϓϕʔε ϦΞϧλΠϜॏࢹ DBSBRVSJ5FDI/JHIU
ͳͥม͑ͨͷ͔ DBSBRVSJ5FDI/JHIU
چόʔδϣϯ ৽όʔδϣϯ ςΩετϕʔε Πϕϯτॏࢹ Ϛοϓϕʔε ϦΞϧλΠϜॏࢹ DBSBRVSJ5FDI/JHIU
ωΠςΟϒͷҙຯͳ͍ DBSBRVSJ5FDI/JHIU
MAPͰϦΞϧλΠϜʹ૬Γ DBSBRVSJ5FDI/JHIU
MAPϝΠϯͰؾ͍ͮͨ͜ͱ DBSBRVSJ5FDI/JHIU
Ϣʔβʔͷ͕͍ DBSBRVSJ5FDI/JHIU
Ұिؒޙͷ چόʔδϣϯ 10~15% ৽όʔδϣϯ 20~35% ଟ͍࣌50% DBSBRVSJ5FDI/JHIU
ͳͥ DBSBRVSJ5FDI/JHIU
ϢʔβʔͷϦΞϧλΠϜͳಈ͖͕ ݟΕΔ͔Β DBSBRVSJ5FDI/JHIU
Βͳ͍ਓͰ࣮ࡍʹډΔͱ ҆৺͢Δ DBSBRVSJ5FDI/JHIU
FirebaseͷϦΞϧλΠϜੑΛ׆༻ • FirestoreΛར༻ • ΞΫςΟϒͳϢʔβʔҎ֎Λ ಁ໌ • දࣔͯ͠ಈ͍͍ͯΔϢʔβʔ ͷಈ͖Λ͏ •
Ͳͷ͘Β͍લʹىಈͨ͠ͷ͔ Θ͔Δ
• FirestoreΛར༻ • ΞΫςΟϒͳϢʔβʔҎ֎Λ ಁ໌ • දࣔͯ͠ಈ͍͍ͯΔϢʔβʔ ͷಈ͖Λ͏ • Ͳͷ͘Β͍લʹىಈͨ͠ͷ͔
Θ͔Δ FirebaseͷϦΞϧλΠϜੑΛ׆༻
༻ͨ͠MAP .BQ,JU (PPHMF.BQ ੑ σϑΥϧτ αʔυύʔςΟʔ ྉۚ ແྉ ैྔ੍ ܦ࿏දࣔ
͋Γ ͳ͠ ϝϞϦ গͳ͍ ଟ͍ MapKitͷศརͳ ɾٯGeocodingɿҢܦ͔ΒॅॴΛऔಘՄೳ GoogleMapͷศརͳ ɾετϦʔτϏϡʔ ɾ༗໊ͳ؍ޫͷใΛදࣔՄೳ DBSBRVSJ5FDI/JHIU
ϢʔβʔͷҐஔใ Firestore্ͷҰͭͷҐஔใΛߋ৽͠ଓ͚Δ →উखʹߋ৽ →ϦΞϧλΠϜͰϢʔβʔ͕ಈ͘ DBSBRVSJ5FDI/JHIU
DBSBRVSJ5FDI/JHIU
ಈ࡞͕ॏ͘ͳΔ DBSBRVSJ5FDI/JHIU
ಈ࡞͕ॏ͘ͳΔݪҼ ঢ়گ දࣔ͢ΔϢʔβʔ͕ଟ͗͢Δʢ͓Αͦ300 ϢʔβʔΛ͑Δʣͱը໘͕ఀࢭ͍ͯ͠ ͨɻ ݪҼ ΞΠίϯը૾ͷαΠζ੍ݶΛ͔͚͍ͯͳ ͔ͬͨͨΊɺը૾ʹΑͬͯಡΈࠐΈʹ࣌ ͕͔͔ؒͬͨ
ຖճϢʔβʔΛಡΈࠐΉ JGMFUMBTU$FOUFS-PDBUJPOTFMGMBTU$FOUFS-PDBUJPO MBTU$FOUFS-PDBUJPOEJTUBODF UBSHFUMPDBUJPO TFMGNPWJOH5ISFTIPVME SPVUF%JTQMBZGBMTF\ NҎ্Ҡಈͨ͠Βɺߋ৽ TFMGSFMPBE"OOPUBUJPO MPDBUJPOMPDBUJPO
SBEJVTNBQ6TFS*O ^FMTFJGTFMGMBTU$FOUFS-PDBUJPOOJMSPVUF%JTQMBZGBMTF\ ࠷ॳͷϩʔυ TFMGSFMPBE"OOPUBUJPO MPDBUJPOMPDBUJPO SBEJVTNBQ6TFS*O ^FMTFJGTFMGNBQ7JFXBOOPUBUJPOTDPNQBDU.BQ \BT 6TFS"OOPUBUJPO^ JT&NQUZ\ TFMGSFMPBE"OOPUBUJPO MPDBUJPOMPDBUJPO SBEJVTNBQ6TFS*O ^ DBSBRVSJ5FDI/JHIU
දࣔ͢ΔϢʔβʔΛ·ͱΊΔ JGNBQ7JFX[PPN-FWFMTFMGNBQ;PPN-FWFM5ISFTIPVME\ NBQ7JFXBOOPUBUJPOTGPS&BDI\BOOPUBUJPOJO JGMFUDMVTUFSBOOPUBUJPOBT .,$MVTUFS"OOPUBUJPO\ NBQ7JFXSFNPWF"OOPUBUJPO DMVTUFS DMVTUFSNFNCFS"OOPUBUJPOTGPS&BDI\ BOOPUBUJPO
JO JGMFUBOOPUBUJPOBOOPUBUJPOBT %SJWFS"OOPUBUJPO\ NBQ7JFXSFNPWF"OOPUBUJPO BOOPUBUJPO ^ ^ NBQ7JFXBEE"OOPUBUJPOT DMVTUFSNFNCFS"OOPUBUJPOT ^ ^ ^ DBSBRVSJ5FDI/JHIU
࠷ޙʹ nori-naHosting࢝Ί·ͨ͠ɻ DBSBRVSJ5FDI/JHIU
Hostingͱ WebϖʔδΛެ։͢ΔΈ ɾJavaScriptͷϑϨʔϜϫʔΫͰ͋ΕͳΜͰྑ͍ ɾCloud Functionಉ༷πʔϧnpmܦ༝ͰΠϯετʔϧ ɾΞοϓϩʔυCloud Functionͱಉ༷ ɾͪΖΜFirestoreͷใΛදࣔՄೳ ɾnori-naͰVue.jsͰ࡞ DBSBRVSJ5FDI/JHIU
IUUQTTFBSDIOPSJOBKQ DBSBRVSJ5FDI/JHIU
IUUQTTFBSDIOPSJOBKQ DBSBRVSJ5FDI/JHIU
ͥͻͬͯཉ͍͠ Cloud functions for Firebase
Cloud functions for firebaseͱ 'JSFCBTFͷϢʔβೝূɺσʔλϕʔεͷՃͳͲͷΠϕϯτ Λड͚औͬͯॲཧΛߦ͏αʔϏε ݴޠɿ+BWB4DSJQUPS5ZQF4DSJQU 'JSFTUPSFτϦΨʔ w PO$SFBUF
w PO6QEBUF w PO%FMFUF w PO8SJUF DBSBRVSJ5FDI/JHIU
nori-naͰͷར༻ํ๏ • ϓογϡ௨ • σʔλͷूܭ • ֎෦αʔϏεͱͷ࿈ܞ(ܾࡁɺݕࡧ) DBSBRVSJ5FDI/JHIU
ϓογϡ௨ onCreate export const pushRideshareRequest = functions.firestore .document(commonUtil.makePath('ridesharerequest/{requestId}')) .onCreate((snap, context)
=> { const newValue = new firestoreModels.RideShareRequest(snap.data()); const to = newValue.to; console.log(`push start ridesharerequest : ${context.params.requestId}`); return pushMessageByUserId(to, '૬Γґཔ͕ಧ͖·ͨ͠ɻ༰Λ֬ೝͯ͠ڐՄ͠·͠ΐ͏ɻ'); }); DBSBRVSJ5FDI/JHIU
ϓογϡ௨ onUpdate export const pushLikeComment = functions.firestore .document(commonUtil.makePath('mapcomment/{mapcommentId}')) .onUpdate((change, context)
=> { const afterData = new firestoreModels.MapComment(change.after.data()); const afterLike = afterData.likeMembers.length; const beforeData = new firestoreModels.MapComment(change.before.data()); const beforeLike = beforeData.likeMembers.length; const toUserId = afterData.user; if (!toUserId) return null; if (beforeLike < afterLike) { return pushMessageByUserId(toUserId, '͍͍Ͷ͕ԡ͞Ε·ͨ͠ʂ'); } return null; }); DBSBRVSJ5FDI/JHIU
ϩʔΧϧͰςετՄೳ $npm run shell DBSBRVSJ5FDI/JHIU
ςετίʔυ QVTI%FTUJOBUJPO6QEBUF \ CFGPSF\ TDSFFO/BNFVTF MPDBUJPO\ MBUJUVEF
MPOHJUVEF ^ EFTUJOBUJPO\ OBNF5 HFP-PDBUJPO\ MBUJUVEF MPOHJUVEF ^ ^ ^ BGUFS\ TDSFFO/BNFVTFS MPDBUJPO\ MBUJUVEF MPOHJUVEF ^ EFTUJOBUJPO\ OBNF5PLZP5PXFS HFP-PDBUJPO\ MBUJUVEF MPOHJUVEF ^ ^ ^ ^ \ QBSBNT\ VTFS*EVTFS ^ ^ DBSBRVSJ5FDI/JHIU • beforeͱafterʹͦΕͧ ΕσʔλΛهड़ • paramsඞཁͳ࣌ͷ Έ
Cloud Functionͷ৽ػೳ Scheduler export const cronRemindShare = functions.pubsub //.schedule("0 18
* * *")//ຖ18࣌ʹ࣮ߦ .schedule("every 5 minutes")//͓͖̑ .timeZone("Asia/Tokyo") .onRun(async context => { console.log("͜͜Ͱఆظ࣮ߦ") });
·ͱΊ Firebase+Mapੑ͕ඇৗʹߴ͍ ϢʔβʔҐஔใΛϚοϓʹϦΞϧλΠϜදࣔ͢Δͱ݁ߏ໘ന͍ ͔ͦ͠͠ͷ··Ͱॲཧʹ ରࡦ • දࣔ͢ΔൣғΛݶఆ • ଟͷϢʔβʔΛҰͭʹ·ͱΊΔ WebϖʔδHostingͰ։ൃ͠Α͏
DBSBRVSJ5FDI/JHIU
͋Γ͕ͱ͏͍͟͝·ͨ͠