Google Maps SDK — モバイルアプリやWebアプリにインタラクティブな地図、ジオコーディング、ルート検索、場所検索を統合するためのGoogleのツール群です。SDKには、Android・iOS向けのMaps SDK、地理データを扱うPlaces API、ルート構築のためのDirections APIが含まれます。Googleマップのサービスは1日あたり1,000億件以上のリクエストを処理しており、Maps SDKは最も高性能な地図ソリューションの1つです。開発者向けGoogle Maps Platform Documentation, 2025によると、SDKは地図を利用するモバイルアプリの60%で使用されています。
重要なポイント
Google Maps SDK — 開発者向けの総合プラットフォームであり、アプリ内で地理データを扱うためのツールを提供します。プラットフォームには複数のAPIが含まれます:Maps SDK(地図表示)、Routes API(ルート)、Places API(場所の検索と地理データ)、Geocoding API(住所の座標変換)です。各SDKは個別に統合され、独自の請求モデルを持ちます。
Apple MapKitとは異なり、Google Maps SDKはより広範なデータセットを提供します:2億5,000万件の場所情報、リアルタイムの交通情報、Street Viewのパノラマ、屋内向けIndoor Mapsです。Statista (2025)によると、Google Maps Platformはモバイルアプリの地図SDK市場の75%を占めています。主な利点は、Googleマップの全サービスで使える単一のAPIキーと、クロスプラットフォーム統合(Android、iOS、Web)です。
APIキー — Google Maps SDKを使用するための必須要素です。キーはGoogle Cloud Consoleで作成され、特定のプロジェクトに紐付けられます。Androidではアプリ証明書のSHA-1を追加で指定する必要があり、iOSではBundle Identifierを指定します。Googleは、不正アクセスを防ぐためにAPIキーの使用をIPアドレス、HTTPリファラー、またはアプリパッケージで制限することを推奨しています。
Android向けMaps SDK — MapViewまたはSupportMapFragmentを通じてAndroidアプリ内にGoogleのインタラクティブな地図を表示するライブラリです。SDKがサポートする機能:地図のカスタムスタイル、情報ウィンドウ付きマーカー、ポリゴンとポリライン、交通・交通機関レイヤー、タッチイベントとジェスチャー(ズーム、回転、傾き)です。地図はOpenGLでレンダリングされ、最新デバイスでは60 FPSを実現します。
統合はbuild.gradleへの依存関係の追加と、AndroidManifest.xmlでのAPIキーの設定から始まります。Android向けのGoogle Maps SDKは、デバイスにGoogle Play Servicesが必要です。Google Play Servicesがない場合(たとえばGoogleサービス非搭載のHuaweiデバイスなど)、地図は表示されません。そのような場合、Googleは代替ソリューションまたはJavaScript Maps APIを使ったWebViewの使用を推奨しています。
// AndroidManifest.xml — APIキーのメタデータ
// <meta-data android:name="com.google.android.geo.API_KEY"
// android:value="YOUR_API_KEY"/>
// Activity内の地図フラグメント
class MapActivity : AppCompatActivity(),
OnMapReadyCallback {
private lateinit var map: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
val sydney = LatLng(-33.8688, 151.2093)
map.addMarker(MarkerOptions().position(sydney)
.title("Sydney"))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(sydney, 12f))
}
}AndroidのGoogle Maps SDKは、Indoor Maps(空港やショッピングモールなどの建物内の地図表示)をサポートしています。有効にするにはmap.isIndoorEnabled = trueを設定するだけです。交通レイヤー(Traffic Layer)は道路の混雑状況をリアルタイムで表示します — データは2〜5分ごとに更新されます。交通機関レイヤー(Transit Layer)は、対応都市の公共交通機関のルートを表示します。
iOS向けMaps SDK — Android版と同じ機能を提供しますが、Appleプラットフォームに最適化されています。統合はSwift Package ManagerまたはCocoaPodsを使用して行います。iOS向けMaps SDKは地図のレンダリングにGoogleサーバーを使用しますが、ネイティブナビゲーションのためにApple MapKitと組み合わせて使用することもできます。SDKはiOS 15以降と、UIViewRepresentable経由のSwiftUIをサポートしています。
iOS版の特徴は、Info.plistでのAPIキーの指定とGoogleマップ用URLスキームの追加という必須設定です。Androidとは異なり、iOS SDKにはGoogle Play Servicesは不要ですが、一部の機能(地図をナビゲーションで開くなど)にはGoogleマップアプリのインストールが必要です。クロスプラットフォームプロジェクトでは、Googleは両プラットフォームで有効化された単一のAPIキーを推奨しています。
import GoogleMaps
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(
withLatitude: 55.7558,
longitude: 37.6173,
zoom: 10
)
let mapView = GMSMapView.map(
withFrame: view.frame,
camera: camera
)
self.view = mapView
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(
latitude: 55.7558,
longitude: 37.6173
)
marker.title = "Moscow"
marker.map = mapView
}
}iOSでは、Google Maps SDKはGoogle Maps Styling形式のJSONファイルによるカスタムスタイルをサポートしています。スタイルにより、アプリのデザインに合わせて道路、水、公園、建物の色を変更できます。また、データ密度の可視化のためのHeatmap Layer、外部ソースからの地理データインポートのためのKMLとGeoJSONもサポートされています。
Places API — 地理的な場所に関する情報(住所、座標、評価、営業時間、写真、レビュー)を取得するためのGoogle Maps Platformのサービスです。Places APIは2つのモードで動作します:Place Search(テキストまたは半径による場所検索)とPlace Details(Place IDによる特定の場所の詳細情報の取得)です。SDKはAndroid、iOS、およびREST APIとして利用できます。
AndroidとiOS向けのPlaces SDKを使用すると、住所のオートコンプリート(Place Autocomplete)をアプリのテキストフィールドに直接組み込めます。これは配達、タクシー、物流アプリにとって重要な機能です — ユーザーが住所を入力し始めると、SDKがGoogleマップのデータベースから候補を提案します。Place Autocompleteは、手動入力と比較して住所入力エラーを80%削減します。Places APIの請求:Place Detailsは1000リクエストあたり$2.83、Place Searchは1000リクエストあたり$4.71です。
// Androidでテキストによる場所検索
val placesClient = Places.createClient(context)
val request = FindCurrentPlaceRequest.builder(
listOf(Place.Field.NAME, Place.Field.ADDRESS)
).build()
placesClient.findCurrentPlace(request)
.addOnSuccessListener { response ->
for (placeLikelihood in response.placeLikelihoods) {
Log.d("場所", "${placeLikelihood.place.name} - ${placeLikelihood.likelihood}")
}
}Geocoding API — 逆ジオコーディング(座標 → 住所)と正方向のジオコーディング(住所 → 座標)です。ユーザーが入力した住所を地図に表示するための座標に変換するために使用されます。Geocoding APIは個別に課金されます:1000リクエストあたり$4.71です。Googleはテスト用にアカウントあたり1日200件の無料リクエストを提供しています。
Directions API — 交通手段(車、徒歩、自転車、公共交通機関)を考慮して、2点以上の間のルートを計算するためのサービスです。APIは、距離、所要時間、ステップごとの案内、地図上にルートを描画するためのポリラインを示す複数の代替ルートを返します。Directions APIはREST APIとして、またクライアントSDKを通じて利用できます。
拡張機能 — Routes API(2024年からGoogleが推奨する新しいAPI)です。Routes APIは、リアルタイムの交通状況を考慮した改善されたルーティング、環境フットプリント(eco-friendly routing)、到着時間の予測分析を提供します。Googleによると、Routes APIは都市部の条件下で従来のDirections APIよりも所要時間を20%正確に計算します。Routes APIの課金:1000リクエストあたり$5.00です。
// Routes APIによるルートリクエスト
val client = OkHttpClient()
val requestBody = """
{
"origin": {"location": {"latLng": {"latitude": 55.75, "longitude": 37.61}}},
"destination": {"location": {"latLng": {"latitude": 55.79, "longitude": 37.79}}},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE"
}
""".trimIndent()
val request = Request.Builder()
.url("https://routes.googleapis.com/directions/v2:computeRoutes")
.header("X-Goog-Api-Key", apiKey)
.header("Content-Type", "application/json")
.post(requestBody.toRequestBody())
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
Log.d("ルート", response.body?.string() ?: "")
}
})Directions APIは、1つのルートにつき最大25の中間地点(waypoints)をサポートしています。中間地点は座標またはPlace IDとして指定できます。地点の順序を最適化するには(traveling salesman problem)、optimize:trueパラメータを使用します。料金:Directions API — 1000リクエストあたり$4.71(最大10地点)、追加地点ごとにリクエストコストの50%が加算されます。
Google Maps SDKは、広範なカスタマイズ機能を提供します:JSONスタイルによる地図の配色変更、カスタムマーカー(アニメーション付きを含む)、任意のコンテンツを持つ情報ウィンドウ(InfoWindow)、グラフィックレイヤー(GroundOverlay、Circle、Polygon)のオーバーレイです。カスタマイズにより、地図をアプリのブランドに合わせ、ユーザーエクスペリエンスを向上できます。
地図のスタイリングは、Google Maps Styling WizardまたはMap Style形式のJSONファイルを使用して行います。道路(featureType: road)、水(water)、公園(poi.park)、建物(building)などの要素の色を変更できます。アプリがダークテーマの場合は、暗い背景と落ち着いた色のナイトスタイルを使用してください。Googleマップは1つのJSONファイルに最大100のスタイルルールをサポートしています。
| カスタマイズ要素 | メソッド/クラス | 説明 |
|---|---|---|
| マーカー | MarkerOptions.icon(BitmapDescriptor) | リソースまたはURLからのカスタムマーカーアイコン |
| ポリライン | PolylineOptions.color(width) | カスタム色のルート表示ライン |
| ポリゴン | PolygonOptions.fillColor(strokeColor) | 透明度と輪郭を持つ領域の塗りつぶし |
| InfoWindow | GoogleMap.setInfoWindowAdapter | 情報ウィンドウのカスタムコンテンツ(任意のView) |
| GroundOverlay | GroundOverlayOptions.image(BitmapDescriptor) | 地図領域に重ねる画像 |
Clustering — 地図上に多数のポイントがある場合にマーカーをクラスターにまとめる機能です。AndroidとiOS向けのGoogle Maps SDKには、組み込みのクラスタリングユーティリティ(com.google.maps.android:android-maps-utils)が含まれています。Clusteringは、特定のレベル以下のズームで地図がマーカーで埋め尽くされるのを防ぎます。ズームすると、クラスターは自動的に個々のマーカーに分割されます。Googleによると、クラスタリングは1000以上のマーカーがある場合に地図のパフォーマンスを40%向上させます。
カスタムマーカー、ルートのポリライン、情報ウィンドウを備えた地図表示の完全な例です。アプリは、興味のある地点と、街の中心部からそこまでのルートを備えたモスクワの地図を表示します。このコードはGoogle Maps SDKの主な機能(マーカーの追加、ポリラインの描画、カメラの移動、クリックの処理)を示しています。
class MapDemoActivity : AppCompatActivity(), OnMapReadyCallback {
override fun onMapReady(map: GoogleMap) {
val kremlin = LatLng(55.7513, 37.6189)
val gorkyPark = LatLng(55.7311, 37.6116)
map.addMarker(MarkerOptions()
.position(kremlin)
.title("クレムリン")
.icon(BitmapDescriptorFactory.defaultMarker(
BitmapDescriptorFactory.HUE_RED)))
map.addPolyline(PolylineOptions()
.add(kremlin, gorkyPark)
.width(5f)
.color(Color.parseColor("#2196F3")))
map.moveCamera(CameraUpdateFactory
.newLatLngZoom(kremlin, 13f))
map.setOnInfoWindowClickListener { marker ->
Toast.makeText(this,
"${marker.title} がクリックされました",
Toast.LENGTH_SHORT).show()
}
}
}パフォーマンスの推奨事項:200を超えるポイントがある場合はClusterManagerによるマーカーの非同期読み込みを使用し、表示するポリラインの数を制限し(Googleは同時に100以下を推奨)、フル機能を必要としない地図にはLite Mode(ズーム変更なしのスクロール)を使用してください。Lite Modeはメモリ消費を50%削減し、地図の読み込みを2倍高速化します。
Google Maps Platform — 毎月$200の無料クレジット付きのPay-as-you-go課金モデルを使用しています。各APIは個別に課金されます:Maps SDK — 地図1000回読み込みあたり$2.83、Places API — 1000リクエストあたり$4.71、Directions API — 1000ルートあたり$4.71、Routes API(推奨) — 1000リクエストあたり$5.00です。$200の無料枠は通常、月間最大70,000回の地図読み込みをカバーします。
高負荷プロジェクトの場合、Googleは月間500,000リクエスト以上で割引を提供しています。Google Maps SDKは、操作なしの基本地図の表示には課金されません — 課金は読み込み(map load)に対してのみ行われます。ユーザーが地図のある画面を開くたびに、それが1回の読み込みとしてカウントされます。最適化:地図タイルのキャッシュにより、再表示時の読み込み回数が減ります。
制限:Places APIは1分あたり300リクエスト(Cloud Consoleの割り当てで3000まで増やせます)。Directions APIは1分あたり100リクエストです。制限を超えるとOVER_QUERY_LIMITエラーが返されます。Googleは再試行に指数バックオフ(exponential backoff)を使用することを推奨しています。使用状況の監視はGoogle Cloud Consoleで最大5分の遅延で確認できます。
よくある質問
Google Maps SDKはpay-as-you-goモデルで課金されます:地図1000回読み込みあたり$2.83です。Googleは毎月$200の無料クレジットを提供しており、最大70,000回の読み込みをカバーします。Places APIとDirections APIは個別に課金されます。最大10,000ユーザーの小規模プロジェクトの場合、費用は通常月額$10〜50です。
はい、Google Maps SDKはタイルのキャッシュによるオフライン地図をサポートしています。SDKは最大1000タイル(約10x10kmの領域)を自動的にキャッシュします。完全なオフラインサポートには、地域全体の地図をダウンロードできるAndroid向けのGoogle Maps Offline APIを使用してください。オフライン地図では、交通情報、ルート、Places APIはサポートされません。
Google Maps SDKはより広範なデータセットを提供します:2億5,000万件の場所、リアルタイムの交通情報、Street View、Indoor Mapsです。Apple MapKitは無料ですが、米国と欧州以外ではデータが少なくなります。Google SDKはAPIキーと支払いが必要ですが、Apple MapKitは不要です。クロスプラットフォームプロジェクトでは、両プラットフォームで単一のAPIを使えるGoogle Maps SDKが好まれます。
APIキーはGoogle Cloud ConsoleのAPIs & Services → Credentialsセクションで作成します。有効化にはキーを支払いアカウントに紐付ける必要がありますが、Googleは毎月$200の無料クレジットを提供しています。キーはIP、HTTPリファラー、Androidパッケージ/iOS Bundle IDで制限できます。テストにはクレジットカード情報の入力は必要ありません。
はい、Google Maps SDKはandroid-maps-utils(Android)およびGoogle-Maps-iOS-Utils(iOS)ライブラリによるクラスタリングをサポートしています。ClusterManagerは近接したマーカーを数値インジケーター付きのクラスターに自動的にまとめます。ズームするとクラスターは個々のマーカーに分割されます。地図のパフォーマンスを維持するには、200以上のマーカーでのクラスタリングが必須です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。