第2章:PostGIS 空間データベースと AI SQL 生成
もしキャンプ場が10箇所しかないなら、緯度経度をコードに直接書けば済みます。しかし、私たちには数百、数千もの車泊スポットがあります!ここではデータベースが必要です。しかも**「座標を処理できるデータベース」**が。 Supabaseでは、強力な PostGIS 拡張機能を有効にできます!
🎯 本章の目標
- SupabaseでPostGISを有効にする方法を学ぶ
- Vibe Promptを使ってAIに
geography形式を含むSQLスキーマを生成させる - SQLで「範囲検索(例:半径50km以内の検索)」を実行する方法を理解する
🛠️ ステップ1:SupabaseでPostGISを有効化
- Supabase管理コンソールにログインし、プロジェクト(例:
car_camping_db)を開く - 左メニューの Database をクリック
- 上部の Extensions を��リック
postgisを検索postgisのトグルを ON に切り替える
たったこれだけ!あなたのデータベースは強力な空間計算能力を手に入れました。

🧠 ステップ2:Vibeで地理データテーブルスキーマを生成
次に、AIにテーブル作成を依頼します。Course 1とは異なり、PostGISを使用することを明確に伝えます。
[!TIP] Vibe Prompt(コピーしてAIに送信):
車泊マップアプリを開発中で、バックエンドにSupabaseを使用しています。PostGIS拡張は既に有効化済みです。Supabase SQL Editorで実行できるテーブル作成SQLを書いてください:テーブル名:campsites必要なカラム:1. id (UUID、主キー)2. name (テキスト、キャンプ場名)3. description (テキスト、キャンプ場説明)4. location (PostGISのgeography(Point, 4326)形式、緯度経度を保存)5. created_atテストデータをINSERTする例(緯度経度をlocationカラムに変換する構文を含む)も教えてください。
AIは以下のような専門的なSQLを生成します:
-- テーブル作成
CREATE TABLE public.campsites (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
-- ここが重要!PostGISのgeography形式を使用
location geography(Point, 4326) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 空間検索を高速化するためGISTインデックスを作成
CREATE INDEX campsites_location_idx ON public.campsites USING GIST (location);
-- テストデータ挿入の例(ST_Pointは経度が先、緯度が後)
INSERT INTO public.campsites (name, description, location)
VALUES (
'武陵農場キャンプ場',
'桜の名所として超有名',
ST_SetSRID(ST_Point(121.314, 24.364), 4326)::geography
);
[!WARNING] 緯度経度の順序に注意! AIは通常、PostGISの
ST_Point関数ではパラメータ順が(経度 Longitude, 緯度 Latitude)であり、一般的な「緯度経度」の順序ではないことを教えてくれます。これはよくあるミスですが、AIのリマインダーがあれば一発で正しく書けます!

🔍 ステップ3:「近くのキャンプ場」を検索する方法
これがPostGISの真価を発揮する場面です。ユーザーの現在地が台北市中心部にある場合、50km圏内のキャンプ場だけを抽出するにはどうすればよいでしょうか? バックエンドで数学的な計算を書く必要はなく、AIとデータベースに任せればよいのです!
[!TIP] Vibe Prompt(AIへの質問):
上記のcampsitesテーブルがある場合、Supabase JS ClientまたはSQLで「特定の緯度経度(例:121.5, 25.0)から50km以内の全てのキャンプ場」を検索するクエリはどう書けばよいですか?
このクエリは将来のアプリケーションの中核機能となるため、まずはデータベース側で構文が正しいことを確認しましょう。
✅ 本章のまとめ
あなたは最先端の地理情報データベース(PostGIS)の設定を学び、たった2つのプロンプトで完了させました! 次の章では、これらのデータベース内の座標をSupabase APIでフロントエンドに取得し、地図上に美しいマーカーとして表示する方法を学びます!
章のまとめ
- コアコンセプトと原理を理解
- 実装方法とテクニックを習得
- 一般的な問題と解決策に精通
- 実際のプロジェクトに適用可能
さらに読む
- 公式ドキュメントとAPIリファレンス
- GitHubのオープンソース例
- 技術書とオンラインコース
- コミュニティディスカッションと技術ブログ