mcpField
R
react-google-maps

react-google-maps

github.com/horuz-ai開発541 回インストール39 週間前に更新
リポジトリ

react-google-maps について

react-google-mapsは、Google Maps JavaScript API向けのReactライブラリです。vis.glがGoogleの支援を受けて保守しており、地図コンポーネントやフック、一般的な実装パターンの資料を提供します。

主な機能

  1. 01地図とマーカーのReactコンポーネント
  2. 02地図とライブラリ用フック
  3. 03地図とイベントのTypeScript型
  4. 04PlacesとGeocodingの資料
  5. 05インタラクティブな地図の実装例

活用シーン

  1. 01ReactアプリへのGoogleマップ追加
  2. 02情報ウィンドウ付きマーカーの表示
  3. 03ドラッグ可能なマーカーと円の同期
  4. 04PlacesまたはGeocoding画面の実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/horuz-ai/claude-plugins --skill react-google-maps

インストール後、Claude Code で/react-google-mapsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
components-api.md
geometry-components.md
hooks-api.md
patterns.md
places-autocomplete.md

詳細

@vis.gl/react-google-maps

Google のスポンサー支援を受け、vis.gl がメンテナンスしている Google Maps JavaScript API 用の公式 React ライブラリです。

クイックスタート

import { APIProvider, Map, AdvancedMarker, Pin } from '@vis.gl/react-google-maps';

function App() {
  return (
    <APIProvider apiKey={process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY!}>
      <Map
        style={{ width: '100%', height: '400px' }}
        defaultCenter={{ lat: 18.4655, lng: -66.1057 }}
        defaultZoom={12}
        mapId="YOUR_MAP_ID" // Required for AdvancedMarker
      >
        <AdvancedMarker position={{ lat: 18.4655, lng: -66.1057 }}>
          <Pin background="#0f9d58" borderColor="#006425" glyphColor="#60d98f" />
        </AdvancedMarker>
      </Map>
    </APIProvider>
  );
}

インストール

npm install @vis.gl/react-google-maps

主なエクスポート

// Components
import {
  APIProvider,      // Wraps app, loads Maps JS API
  Map,              // Map container
  AdvancedMarker,   // Modern marker (requires mapId)
  Pin,              // Customizable pin for AdvancedMarker
  InfoWindow,       // Popup windows
  MapControl,       // Custom controls on map
  Marker,           // Legacy marker (deprecated)
} from '@vis.gl/react-google-maps';

// Hooks
import {
  useMap,                  // Access google.maps.Map instance
  useMapsLibrary,          // Load additional libraries (places, geocoding, drawing)
  useAdvancedMarkerRef,    // Connect marker to InfoWindow
  useApiIsLoaded,          // Check if API is loaded
} from '@vis.gl/react-google-maps';

// Enums
import {
  ControlPosition,     // For MapControl positioning
  CollisionBehavior,   // For marker collision handling
} from '@vis.gl/react-google-maps';

重要な要件

  1. AdvancedMarker には mapId が必須です - Google Cloud Console > Maps > Map Styles で作成してください
  2. すべてのマップコンポーネントを APIProvider でラップする必要があります - アプリのルートまたはレイアウトレベルに配置してください
  3. Circle、Polygon、Polyline はエクスポートされません - 実装については references/geometry-components.md を参照してください
  4. places.Autocomplete は非推奨です(2025 年 3 月) - 代わりに AutocompleteService とカスタム UI を使用してください

リファレンスファイル

タスクに応じて、以下のファイルを参照してください。

タスクリファレンスファイル
Map、Marker、InfoWindow、Pin の詳細references/components-api.md
useMap、useMapsLibrary、フックreferences/hooks-api.md
Circle、Polygon、Polylinereferences/geometry-components.md
Places Autocomplete、Geocodingreferences/places-autocomplete.md
ドラッグ可能なマーカーとリアルタイム同期、制御されたマップreferences/patterns.md

よく使うパターン

InfoWindow 付きマーカー
const MarkerWithInfo = ({ position }: { position: google.maps.LatLngLiteral }) => {
  const [markerRef, marker] = useAdvancedMarkerRef();
  const [open, setOpen] = useState(false);

  return (
    <>
      <AdvancedMarker ref={markerRef} position={position} onClick={() => setOpen(true)} />
      {open && (
        <InfoWindow anchor={marker} onClose={() => setOpen(false)}>
          <p>Hello!</p>
        </InfoWindow>
      )}
    </>
  );
};
リアルタイムで円と同期するドラッグ可能なマーカー
const DraggableWithCircle = () => {
  const [position, setPosition] = useState({ lat: 18.4655, lng: -66.1057 });

  return (
    <>
      <AdvancedMarker
        position={position}
        draggable
        onDrag={(e) => {
          // Updates DURING drag for real-time sync
          if (e.latLng) setPosition({ lat: e.latLng.lat(), lng: e.latLng.lng() });
        }}
      />
      <Circle center={position} radius={1000} /> {/* Follows marker in real-time */}
    </>
  );
};
カスタムマップコントロール
<Map {...props}>
  <MapControl position={ControlPosition.TOP_LEFT}>
    <button onClick={handleClick}>Custom Button</button>
  </MapControl>
</Map>

TypeScript 型

// Position types
type LatLngLiteral = { lat: number; lng: number };
type LatLngAltitudeLiteral = { lat: number; lng: number; altitude: number };

// Event types
type MapMouseEvent = google.maps.MapMouseEvent;
type AdvancedMarkerClickEvent = google.maps.marker.AdvancedMarkerClickEvent;

// Library types (from useMapsLibrary)
type PlacesLibrary = google.maps.PlacesLibrary;
type GeocodingLibrary = google.maps.GeocodingLibrary;
type DrawingLibrary = google.maps.DrawingLibrary;

コメント