Skip to content

omega-takai/mapbox-demo

Repository files navigation

Mapbox Demo with Next.js

Next.js と Mapbox GL JS を使用した地図アプリケーションのデモプロジェクトです。 デプロイ先は GitHub Pages です。

概要

このプロジェクトは、Next.js (PageRouter/SSG) 上で Mapbox を動作させ、美しくインタラクティブな地図機能を提供するデモアプリです。

技術スタック

  • Framework: Next.js (Page Router, SSG export mode)
  • Map Library: Mapbox GL JS (react-map-gl)
  • Styling: Tailwind CSS 4 + tailwind-variants (tv)
  • Language: TypeScript
  • Runtime: Node.js 24 (required)
  • Package Manager: pnpm >=10 (npm/yarn/bun forbidden)
  • Icons: lucide-react
  • Notifications: sonner (toast)

機能

  • 森林マップ (WMS) の表示: EU Forest Observatory が提供する WMS (Web Mapping Service) を利用し、2020年の森林タイプ分類マップ (gft2020_v1) を表示します。
  • ベースマップ切り替え: Mapbox の衛星写真 (mapbox://styles/mapbox/satellite-v9) をベースマップとして使用します。
  • レイヤー透過度調整: 森林マップレイヤーの透過度をスライダーで調整可能です。
  • 座標表示: クリックした地点の経度・緯度を表示します(デバッグ用)。

データソース

本デモでは、以下の外部データサービスを使用しています。

  • EU Forest Observatory (Public JRC API)
    • Service: WMS 1.3.0
    • Layer: gft2020_v1 (Global map of forest types 2020 v1)
    • Details: WMS仕様書 を参照してください。

セットアップ

前提条件

  • mise: 環境管理ツール (Node.js, pnpm のバージョン管理に使用)
  • Mapbox アカウントとアクセストークン

1. 環境構築 (mise)

mise install

2. プロジェクトの作成 (未実施の場合)

pnpm create next-app . --typescript --tailwind --eslint

3. 依存関係のインストール

pnpm install react-map-gl mapbox-gl

3. 環境変数の設定

.env.local ファイルを作成し、Mapbox のアクセストークンを設定してください。

MAPBOX_ACCESS_TOKEN=your_access_token_here

4. 開発サーバーの起動

pnpm dev

Mapbox トークンのセキュリティ

Mapbox を使用する際は、トークンのセキュリティ管理が重要です。特に SSG (Static Site Generation) や SPA (Single Page Application) では、トークンがブラウザで公開されるため、適切な設定が必要です。

1. トークンの種類と使い分け

  • Public Token (pk.xxxx...):

    • 用途: フロントエンド (Mapbox GL JS) での地図表示。
    • 公開範囲: ブラウザに配信されるため、公開されます
    • 対策: URL制限 (Allowed URLs) を設定し、許可されたドメイン以外での利用を防ぎます。
  • Secret Token (sk.xxxx...):

    • 用途: バックエンド (Python等) での Geocoding API, Directions API 利用や、タイルのアップロード。
    • 公開範囲: 絶対に公開してはいけません
    • 対策: .env で管理し、クライアントサイドには一切含めないでください。

2. URL制限の設定 (必須)

Public Token を保護するため、Mapbox アカウント設定で Allowed URLs を設定してください。

  1. Mapbox Account Dashboard にログインします。
  2. 対象の Public Token の設定 ("Configure") を開きます。
  3. Allowed URLs に以下のドメインを追加します。
    • http://localhost:3000/ (開発用)
    • https://your-production-domain.com/ (本番用)

これにより、万が一トークンが漏洩しても、許可されたドメイン以外からは使用できなくなります。