mapcn について
mapcn は、React と shadcn/ui のプロジェクトで mapcn を扱うコーディングエージェント向けスキルです。導入、連携、カスタマイズ、トラブルシューティングを扱い、MapLibre GL JS を基盤とし、既定では API キー不要の CARTO タイルを使います。
主な機能
- 01MapLibre の地図コンポーネントを導入
- 02ズーム、コンパス、位置情報の操作部を設定
- 03マーカー、ポップアップ、ツールチップを構成
- 04ルート描画と GeoJSON ポイントのクラスタリング
- 05MapRef と useMap で地図を操作
活用シーン
- 01React と shadcn/ui のプロジェクトに地図を追加
- 02マーカー、ポップアップ、ルートを追加
- 03多数のポイントデータをクラスタリング
- 04地図の空白表示や操作部の欠落を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ferminrp/ agent-skills --skill mapcnインストール後、Claude Code で/mapcnを入力して読み込まれたか確認します。
同梱ファイルreferences/api-cheatsheet.mdreferences/docs-pages.md
詳細
mapcn
このスキルを使う場面
ユーザーが React + shadcn/ui のコードベースに mapcn をインストール、統合、カスタマイズ、またはトラブルシューティングする必要がある場合に、このスキルを使います。
よくあるきっかけ:
integrate mapcnadd mapcn to shadcn projectmapcn MapControls/Markers/Routes/Clusterscontrolled map viewport with mapcnuseMap hook mapcnMapLibre with mapcn components
ライブラリの概要
mapcn は、MapLibre GL JS を基盤とし、shadcn/ui のワークフローに沿った、コピーして使えるスタイルのマップコンポーネントを提供します。
前提条件:
- プロジェクトで React を使用していること。
- Tailwind CSS の設定が完了していること。
- shadcn/ui の設定が完了していること。
デフォルトの動作:
- mapcn はデフォルトで無料の CARTO タイルを使用します。
- デフォルトのタイル設定では API キーは不要です。
インストール
標準のインストールコマンド:
npx shadcn@latest add @mapcn/map
想定される統合結果:
- UI マップコンポーネントがプロジェクトに追加されます(通常は
components/uiの下)。 - 通常、インポートは次の形式になります。
import { Map } from "@/components/ui/map";
クイックスタート
高さを固定したコンテナを使い、Map と MapControls をレンダリングします。
import { Map, MapControls } from "@/components/ui/map";
export function BasicMap() {
return (
<div className="h-[500px] w-full overflow-hidden rounded-xl border">
<Map
initialViewState={{
longitude: -58.3816,
latitude: -34.6037,
zoom: 11,
}}
>
<MapControls
showZoom
showCompass
showLocate
showFullscreen
position="top-right"
/>
</Map>
</div>
);
}
重要:
- マップコンテナには明示的な高さを設定する必要があります。設定しないと、マップが空白で表示されることがあります。
コアコンポーネント
Map と制御されたビューポート
単純なケースでは非制御モードを使い、状態の同期が必要な場合は制御モードを使います。
const [viewport, setViewport] = useState({
longitude: -58.3816,
latitude: -34.6037,
zoom: 11,
});
<Map viewport={viewport} onViewportChange={setViewport} />
コントロール
MapControls は、よく使われる切り替え項目と配置をサポートします。
showZoomshowCompassshowLocateshowFullscreenposition
マーカーとマーカー UI ファミリー
より豊かな UI を構成するには、次のマーカーコンポーネントを組み合わせます。
MapMarkerMarkerContentMarkerPopupMarkerTooltipMarkerLabel
単独のポップアップ
マーカーコンポーネントに厳密には紐づかないポップアップ UI には、MapPopup を使います。
ルート
MapRoute を使うと、経路ベースのオーバーレイやルート状のラインを描画できます。
クラスター
密集したポイントデータセットには、GeoJSON 入力とともに MapClusterLayer を使います。
高度な統合
MapRef
flyTo、カスタムのカメラ遷移、マップインスタンスへの直接操作など、命令型のマップ操作には MapRef を使います。
useMap
useMap を使うと、マップのコンテキストに安全にアクセスし、ライフサイクルを考慮したクリーンアップとともにイベントリスナーを登録できます。
カスタムスタイル
デフォルトのタイルでは不十分な場合は、MapLibre 互換のスタイル URL/仕様とともに styles プロパティ(または対応するマップスタイル設定オプション)を使います。
パフォーマンスのガイドライン
- DOM マーカーは、少数から中程度の件数(通常は数百ポイントまで)に適しています。
- 大規模なデータセットでは、GeoJSON レイヤーベースのレンダリングとクラスタリング(
MapClusterLayer)を優先します。 - プロパティとハンドラーを安定させ、過剰な再レンダリングを避けます。
- 高度なマップイベントを使う場合は、必ずイベントリスナーをクリーンアップします。
トラブルシューティング
マップが空白になる
次の点を確認します。
- コンテナに明示的な高さが設定されていること。
- スタイル URL/仕様が有効であること。
- タイルのリクエストがブロックされていないこと(ネットワーク/CORS)。
ハイドレーション/アプリフレームワークの問題
- SSR を使用するアプリ構成では、マップのレンダリングがクライアントで安全に行われることを確認します。
- マウント前にマップインスタンスへ直接アクセスしないでください。
コントロールまたはマーカーが表示されない
- コンポーネントが適切なマップコンテキストの下にネストされていることを確認します。
- マーカーおよびポップアップコンポーネントの想定される子要素の階層を確認します。
型/座標のエラー
- 座標の形式と順序、およびプロパティの型を検証します。
- コールバックのシグネチャをコンポーネントの想定に合わせます。
エージェントのワークフロー
- ユーザーの意図を特定します:インストール、基本的なマップ、マーカー、ポップアップ、ルート、クラスター、高度なイベント。
- まず最小限の動作する統合を実装します。
- 状態の同期が必要な場合にのみ、制御されたビューポートに切り替えます。
- ポイント数が増えたら、クラスター/レイヤーパターンに切り替えます。
- 簡潔なコードを提示してから、判断の理由と次の手順を説明します。
対象外
- React 以外のフレームワーク。
- 依頼されていないラッパーの移行や比較作業。
- mapcn のデフォルト設定/キー不要の基本範囲を超える、ホスト型マップベンダーのアカウント設定。
References
Local references:
references/docs-pages.mdreferences/api-cheatsheet.md
Canonical docs:
https://www.mapcn.dev/docshttps://www.mapcn.dev/docs/installationhttps://www.mapcn.dev/docs/api-referencehttps://www.mapcn.dev/docs/basic-maphttps://www.mapcn.dev/docs/controlshttps://www.mapcn.dev/docs/markershttps://www.mapcn.dev/docs/popupshttps://www.mapcn.dev/docs/routeshttps://www.mapcn.dev/docs/clustershttps://www.mapcn.dev/docs/advanced-usage