[Mapbox]react-map-glのMap Loadの従量課金を考慮する

Mapbox GL JSライブラリを使用する際、従量課金を考慮しなければならない。
SearchやNavigationはAPIリクエスト数に応じにて従量課金が決まる仕組みになっている。

https://www.mapbox.jp/pricing

目次

Mapbox GL JSのLoads for Webの従量課金のカウント

Mapbox GL JSでMapを描画するときのMaps自体にも従量課金が設けられており、
Maps Loads for Webは、マップをロードするたびに1ロードとしてカウントされます。
( 1マップロードで12時間のセッションが保持されます。 )

コード的には下記が実行されるたびに1ロードがカウントされるみたいです。

new mapboxgl.Map()

そのため、マップロードをできる限り抑える設計にしていく必要があります。

react-map-glでの対策

Mapbox GL JSをラップしているライブラリ「react-map-gl」でも同様のことが言える。

Reactの場合も、コンポーネントがマウントされるたびにレンダリングされ、マップロードが走る。

これを解決するためには、「reuseMaps」プロパティを設定することで解決する。

https://visgl.github.io/react-map-gl/docs/api-reference/map#reusemaps

import * as React from 'react';
import {useRef, useCallback} from 'react';
import Map from 'react-map-gl';
import type {MapRef} from 'react-map-gl';

export function App() {
  const mapRef = useRef<MapRef>();

  return <Map ref={mapRef} reuseMaps={true} />;
}

「reuseMaps」プロパティをtrueにすることで、コンポーネントがアンマウントされてもMapインスタンスはメモリに保持され、再マウントが走る際には、そのインスタンスを使い回してくれます。

Summay

reuseMapsプロパティはMapboxのマップロード従量課金をできる限り回避できる方法なので、積極的に使用していきたいところです。

よかったらシェアしてね!
目次