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
React Nativeで 位置情報アプリをつくった話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tsuyoshi Higuchi
PRO
February 21, 2019
Programming
5.7k
10
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Nativeで 位置情報アプリをつくった話
【第2回】ReactNativeにゆかりのあるスタートアップが集う会
https://r-n.connpass.com/event/117895/
Tsuyoshi Higuchi
PRO
February 21, 2019
More Decks by Tsuyoshi Higuchi
See All by Tsuyoshi Higuchi
2024 Profile Slide - for フロントエンドのモデル駆動設計
tyshgc
PRO
0
260
開発現場でのサービスデザインとモデリング
tyshgc
PRO
8
3.5k
Design For User #2 コンポーネント指向から考えるUIと設計・趣旨説明スライド / Design For User #2 Openning Slide
tyshgc
PRO
1
1.4k
メンタルモデルから紐解く オブジェクト指向的コンポーネント設計 / Mental-Model Component Design
tyshgc
PRO
11
5.8k
Designer meets Domain-Driven-Design
tyshgc
PRO
28
2.9k
ReactとLoopbackことはじめ / React.js meets Loopback
tyshgc
PRO
11
4k
UCDとDDD - ユースケースからユーザー中心について考える
tyshgc
PRO
21
4.3k
UIデザイナーを取り巻く様々な設計 / Intrinsic meaning of UI Design
tyshgc
PRO
46
13k
React & Go Single Page Apps
tyshgc
PRO
20
5.9k
Other Decks in Programming
See All in Programming
symfony/aiとlaravel/boost
77web
0
110
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
230
Oxlintのカスタムルールの現況
syumai
6
1.2k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
140
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
160
act1-costs.pdf
sumedhbala
0
140
Contextとはなにか
chiroruxx
1
390
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.7k
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
130
Performance Engineering for Everyone
elenatanasoiu
0
250
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
280
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leo the Paperboy
mayatellez
7
1.9k
Become a Pro
speakerdeck
PRO
31
6k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
How to Talk to Developers About Accessibility
jct
2
270
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
AI: The stuff that nobody shows you
jnunemaker
PRO
8
760
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
React Nativeで 位置情報アプリをつくった話 Tsuyoshi Higuchi @tyshgc 2019.02.21
今回のトピック React Native と Google Mapsを利用 位置情報の追跡・大量のマーカーの取り扱い ユーザの現在地追随アプリを作成した際に得た知見
自己紹介 樋口 剛 Tsuyoshi Higuchi 今日はエンジニアとしてやってきました。 基本はサービスとUIをデザイン(設計)する人ですが インフラとバックエンド以外は基本何でもやります。 Reactは5年くらい、React Native歴は半年程度。 @tyshgc
サービスの紹介 KiiiN - キーン - という現実世界に 金塊「キーン」をばら撒いて それを集めてモノと交換する 位置情報 ×
ロイヤリティプログラムサービス 33,503 33,503
インセンティブを提供し ユーザを特定の場所へ誘導・現実世界の活動を 流動的にすることによって ビジネスの機会をつくろうというサービス
アプリの要件 ❶ユーザの現在地に追随する ❷大量のカスタムマーカーを配置・更新する 現在地の取得の精度・デバイス依存問題 マーカーのレンダリングコスト問題 ISSUE
主に利用している位置情報関連のライブラリ https://github.com/react-native-community/react-native-maps react-native-maps https://github.com/manuelbieh/Geolib geolib https://github.com/neuberoliveira/react-native-gps-state react-native-gps-state
アーキテクチャ 今回は状態管理周りにMobXを採用 社内的にVue.jsユーザが多い & 堅牢性は(設計次第で)劣るが記述量はReduxより少ない コンポーネントはContainer Component Pattern Atomic Designの粒度定義は無駄にファットになるのでいれない
Container Component Model UseCase A User Event 1 User Event
2 UseCase B User Event 1 User Event 2 Domain Store = [ State, State, … ] Presentational Store = [ State, State, … ] Stores MobX ࣮ମԽ Model Element Component Element Component 1SPWJEFSܦ༝Ͱ ঢ়ଶมߋ࣌ʹ ࣗಈͰ͢ API / Realm / NativeAPI !BDUJPONFUIPEΛୟ͍ͯ4UBUFͷঢ়ଶΛมߋ 1SPQTͰͱ6TF$BTFΛ͢ 6TF$BTFͷ ΠϕϯτΛୟ͘ 4UPSFαʔϏευϝΠϯʹؔ͢Δͷͱ 1SFTFOUBUJPOBM (6* ʹؔ͢ΔͷͰ͚Δ
None
None
None
None
位置情報を扱う React Nativeで位置情報といえば Geolocation APIは、Geolocation Web仕様を拡張したもの navigator.geolocation
None
現在地の取得は一部のAndroidデバイスで 取得できたりできなかったり、精度微妙… RN公式でも react-native-geolocation-service を 使えとのこと
Geolocation APIは積極的に使わず react-native-mapsの MapViewコンポーネントの onUserLocationChange を活用 onUserLocationChange: (event=> { const
{ latitude, longitude } = event.nativeEvent.coordinate }) 返り値(緯度・経度)をUsecase経由でStoreへ投げて諸々処理する方向へ
None
None
None
onUserLocationChange は、 showsUserLocationとfollowsUserLocationを trueにしないと返り値を返さない… { showsUserLocation: true, followsUserLocation: true, onUserLocationChange:
(event=> {…}) } ただしこれらをアクティブにするとMap上に青い現在地が表示されてしまう
33,503
また、onUserLocationChange は、 かなり小さい移動も検知するため イベントを呼ぶ回数をgeolibで間引く必要がありました。 { showsUserLocation: true, followsUserLocation: true, onUserLocationChange:
(event=> {…}) }
大量のCustomMarkerと闘う マーカーを独自のイメージに変更したい場合は… <Marker image={画像} coordinate={現在地} />
iOSは表示も周りのインタラクションも激重!! CPUを食いまくるらしくFPSは大幅に低下する
tracksViewChangesでfalseを指定する <Marker image={画像} tracksViewChanges={false} coordinate={現在地} /> falseだと何も表示されないので componentDidMountでMountできたらfalseにする
None
None
マーカーに込み入ったことをする こんな感じにマーカーをしたい場合は… 33,503
<Marker image={画像} tracksViewChanges={false} coordinate={現在地} > <View style={…}><SvgOriginalImage /></View> </Marker> <Marker
/>にchildrenを渡せばいい アプリではSvgのアイコンイメージをマーカーにしようとした
Androidでchildrenが表示されない… iOSとAndroidで微妙に表示の扱いが違うぽい
<Marker …> <Svg width={MARKER_WIDTH} height={MARKER_HEIGHT}> <View style={…}><SvgOriginalImage /></View> </Svg> </Marker>
AndroidはSvgコンポーネントで挟んであげる ※iOSはSvgいれると表示されなくなるので注意
ReactNative所感 ReactNative自体はReact経験者にはやさしい Native Bridgeコードも言うほど障壁高くない ただ、OSSのライブラリはインストール時にコケることが 多く特にXcodeが辛すぎた… AndroidStudioはSDKバージョン周りで最初にコケた…
ご静聴ありがとうございました