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
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
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.3k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
560
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
500
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
18
19k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
360
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
150
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.5k
MCP Appsでつくるチャット駆動な地図アプリ
nakamori1024
0
110
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
440
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
170
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
590
Heart of Swift Concurrency
koher
0
1.1k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
First, design no harm
axbom
PRO
2
1.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
Believing is Seeing
oripsolob
1
230
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Mobile First: as difficult as doing things right
swwweet
225
10k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
680
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
͋Γ͕ͱ͏͍͟͝·ͨ͠