🗄️ Vibe Codingで「みんなで使える」アプリに進化させる! 農家でもできるデータベース連携 超入門

ツール活用
上級編

Vibe Codingで作ったアプリにデータベースをつなごう

〜 Supabase × Antigravity × Vercel で”記録が残る”農業アプリへ 〜

Vibe Coding
農業DX
Antigravity

前回までの連載で、AIと会話しながらアプリを作り、インターネットに公開するところまで体験しました。
でも、こんな疑問が残っていませんか?

「入力したデータ、ページを閉じたら消えちゃうの?」

その通りです。前回までのアプリはデータを”自分のブラウザ”にしか保存していません。つまり、他のスマホで開いても空っぽですし、ブラウザのデータを消すとリセットされます。

これは農業にたとえると、「作業日誌をふせんに書いて、風で飛ばされる」ようなもの。せっかくの記録が残りません。

今回は、入力したデータをクラウド上のデータベース(Supabase)に保存し、どの端末からでも記録を見られるようにする方法を解説します。

🌱

今回のゴール

🎯
この記事を読み終えると…
  • Supabase でクラウドデータベースを無料で作れる
  • Antigravity(Vibe Coding ツール)からデータベースに接続できる
  • Vercel にデプロイして、スマホからも記録が残る農業アプリが完成する
⏱️
所要時間の目安
ステップ 内容 目安
Supabase アカウント&プロジェクト作成 5 分
テーブル&RLS ポリシー作成 5 分
②-b API キー確認・メモ 3 分
Antigravity で Supabase 連携 10 分
Vercel 環境変数設定&デプロイ 10 分
動作確認 5 分
合計 約 40 分
🌱

全体像を確認しよう

今回の作業は、農業でいうと「紙の日誌 → 共有できるクラウド台帳へ引っ越し」するイメージです。

🗺️
データの流れ

スマホ/PC(ブラウザ) → Vercel(公開サーバー) → Supabase(クラウドDB)

ユーザーがフォームに入力 → アプリが Supabase に保存 → どの端末からでも閲覧OK

🌱

ステップ①|Supabase のアカウント&プロジェクトを作ろう

💡
Supabase(スーパベース)とは?

無料から使えるクラウドデータベースサービスです。農業にたとえると、「JAの共有倉庫を、ネット上に無料で借りられる」ようなものです。

Supabaseにアクセスしてアカウント設定

やることリスト
  1. supabase.com にアクセスし、「Start your project」をクリック
  2. 「Continue with GitHub」を選択してサインアップ
  3. Organization を選択し、「New Project」をクリック
  4. 以下を入力して「Create new project」をクリック
    • Project name:pesticide-calculator(任意の名前でOK)
    • Database Password:自動生成をそのまま使用(メモ不要)
    • Region:Northeast Asia (Tokyo) ※日本に近いリージョン
Supabase 初期画面
Supabase のトップページ
新規プロジェクト作成画面
New Project の入力画面
🌱

ステップ②|テーブルとセキュリティを設定しよう

プロジェクトができたら、データを入れる「テーブル(表)」を作ります。農業でいうと、「台帳のフォーマットを決める」作業です。

方法A:AI アシスタントに聞く(推奨)

Supabase には AI アシスタント機能があり、画面右下の ✨ アイコンから起動できます。

💬 AIへのプロンプト(テーブル作成)
spray_recordsという農薬散布記録テーブルを作成してください。カラムは以下の通りです:
– id(UUID・主キー・自動生成)
– created_at(タイムスタンプ・デフォルトnow())
– applicator_name(text・散布者名)
– pesticide_name(text・農薬名)
– dilution_rate(text・希釈倍率)
– area_m2(numeric・散布面積㎡)
– notes(text・備考・NULL許可)
Table Editor 画面
Table Editor でテーブルを確認
AI Assistant 画面
AI Assistant にプロンプトを入力
🔒
RLS(Row Level Security)とは?

「誰がデータを見られるか・書き込めるか」を制御するセキュリティ機能です。農業にたとえると、「倉庫の鍵を誰に渡すか決める」ことに相当します。

💬 AIへのプロンプト(RLSポリシー)
spray_recordsテーブルに、匿名ユーザーがSELECTとINSERTできるRLSポリシーを追加してください。
AI Assistant 実行画面
AI Assistant で SQL を実行
RLSポリシー設定完了
RLS ポリシーの設定完了

方法B:手動でやる場合

テーブル作成の手順
  1. 左メニューの「Table Editor」をクリック
  2. 「Create a new table」をクリック
  3. テーブル名に spray_records と入力
  4. 「Enable Row Level Security (RLS)」がONになっていることを確認
  5. 上記のカラムを一つずつ追加し、「Save」をクリック
RLS ポリシーの手動追加
  1. 左メニュー「Authentication」→「Policies」を開く
  2. spray_records テーブルの「New Policy」をクリック
  3. SELECT 用ポリシーを作成
    • Policy name: allow_anon_select
    • Allowed operation: SELECT
    • Target roles: anon
    • USING expression: true
  4. 同様に INSERT 用ポリシーも作成
    • Policy name: allow_anon_insert
    • Allowed operation: INSERT
    • Target roles: anon
    • WITH CHECK expression: true
🌱

ステップ②-b|API キーを確認してメモしよう

この後の連携作業で、Project URLanon public key の2つが必要になります。
農業にたとえると、「共有倉庫の住所と、合鍵の番号をメモしておく」作業です。

確認手順
  1. Supabase ダッシュボード左メニューの ⚙️ Settings をクリック
  2. 「Data API」をクリック
    • Project URL が表示されます(https://xxxxx.supabase.co 形式)
  3. 同じページの 「API Keys」ボタンをクリック
    • anon public キーが表示されます(長い英数字の文字列)
  4. 両方をコピーして、メモ帳などに一時保存しておく
Supabase API設定画面
Settings → Data API で Project URL と API Keys を確認
⚠️
注意:キーの取り扱い

anon public key はフロントエンドで使用するため公開されますが、service_role key は絶対に公開しないでください。RLS を迂回してすべてのデータにアクセスできてしまいます。

🌱

ステップ③|Antigravity で Supabase に接続しよう

いよいよ、前回作ったアプリにデータベースを接続します。
農業にたとえると、「畑の作業場と、離れた共有倉庫を道でつなぐ」工程です。

方法A:AIにまとめて依頼する(推奨)

💬 AIへのプロンプト

このアプリをSupabaseと連携させてください。

【要件】
1. Supabaseクライアントライブラリ(@supabase/supabase-js)をインストール
2. 環境変数 VITE_SUPABASE_URL と VITE_SUPABASE_ANON_KEY を使って接続
3. spray_records テーブルに INSERT(新規登録)と SELECT(一覧表示)できるようにする
4. 既存の localStorage 保存はフォールバックとして残す

【テーブル構造】
spray_records: id, created_at, applicator_name, pesticide_name, dilution_rate, area_m2, notes

Antigravity連携画面
Antigravity が Supabase 連携コードを自動生成
💡
ポイント:環境変数を使う理由

Project URL や API キーを直接コードに書くと、GitHub 上で誰でも見えてしまいます。環境変数として外部から渡すことで、コードを公開しても安全です。農業にたとえると、「倉庫の暗証番号を伝票に書かず、口頭で伝える」イメージです。

方法B:手動で設定する場合

手動設定の手順
  1. ターミナルで npm install @supabase/supabase-js を実行
  2. src/lib/supabase.js ファイルを作成し、以下を記述
    import { createClient } from '@supabase/supabase-js'
    
    const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
    const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
    
    export const supabase = createClient(supabaseUrl, supabaseAnonKey)
  3. プロジェクトのルートに .env ファイルを作成
    VITE_SUPABASE_URL=https://xxxxx.supabase.co
    VITE_SUPABASE_ANON_KEY=eyJhbGciOi...
  4. データの保存・取得処理で supabase.from('spray_records') を使うようにコードを修正
🌱

ステップ④|Vercel に環境変数を設定してデプロイしよう

アプリのコードが完成しても、Vercel(公開サーバー)側にも「倉庫の住所と合鍵」を教えてあげないと、本番環境ではデータベースに接続できません。

④-a|なぜ環境変数が必要?

📝
ローカルと本番の違い
環境 接続情報の置き場所 農業たとえ
ローカル(自分のPC) .env ファイル 自宅の金庫にメモ
本番(Vercel) Vercel の環境変数設定 出荷先にも合鍵を預ける

.env ファイルは GitHub にアップロードされないため(.gitignore で除外)、Vercel には別途設定が必要です。

④-b|Vercel で環境変数を設定する

設定手順
  1. Vercel ダッシュボードを開き、対象プロジェクトをクリック
  2. 上部メニューの「Settings」をクリック
  3. 左メニューから「Environment Variables」を選択
  4. 以下の2つを追加
    Key Value
    VITE_SUPABASE_URL ステップ②-b でメモした Project URL
    VITE_SUPABASE_ANON_KEY ステップ②-b でメモした anon public key
  5. Environments は Production・Preview・Development すべてにチェックを入れて「Save」
Vercel環境変数設定画面
Vercel の Environment Variables 設定画面

④-c|再デプロイする

環境変数を設定しただけでは反映されません。再デプロイが必要です。

再デプロイの手順
  1. Vercel ダッシュボードの「Deployments」タブを開く
  2. 最新のデプロイの右側 「⋯」→「Redeploy」をクリック
  3. ビルドが完了するまで1〜2分待つ
Vercelデプロイ完了画面
デプロイ完了 — 「Ready」と表示されれば成功
🌱

ステップ⑤|動作確認しよう

すべての設定が完了しました。最後に「ちゃんとデータベースに記録が保存されるか」を確認しましょう。

確認手順
  1. Vercel で公開されたアプリの URL をブラウザで開く
  2. 散布記録を1件入力して保存する
  3. Supabase ダッシュボードの「Table Editor」→「spray_records」を開く
  4. 入力したデータが表示されていれば成功🎉
  5. 別の端末(スマホなど)からも同じ URL を開き、データが共有されていることを確認
Supabaseにデータが記録された画面
Supabase に散布記録が保存されている!
🚨
データが表示されない場合
症状 確認すること
保存ボタンを押してもエラーが出る Vercel の環境変数名が正確か(VITE_ プレフィックスを忘れていないか)
データが Supabase に届かない RLS ポリシーで INSERT が anon に許可されているか
一覧に何も表示されない RLS ポリシーで SELECT が anon に許可されているか
再デプロイ後も変わらない 環境変数設定後に「Redeploy」を実行したか
🌱

まとめ|今回やったこと

第5回の達成項目
ステップ やったこと 農業たとえ
Supabase プロジェクト作成 共有倉庫を契約
テーブル&RLS 設定 台帳フォーマットと鍵の管理
②-b API キー確認 住所と合鍵をメモ
Antigravity で DB 接続 畑と倉庫を道でつなぐ
Vercel 環境変数&再デプロイ 出荷先にも合鍵を預ける
動作確認 記録がちゃんと届くか試す

これで、あなたの農業アプリは「データが消えない」「どこからでも使える」本格的なウェブアプリになりました!

🌾
連載の振り返り
テーマ ステータス
第0回 Vibe Coding って何? ✅ 公開済み
第1回 Google AI Studio で会話する ✅ 公開済み
第2回 AI Studio のビルドモードでアプリを作る ✅ 公開済み
第3回 Antigravity で GitHub 連携&公開 ✅ 公開済み
第4回 Antigravity を使いこなす応用テクニック ✅ 公開済み
第5回 Supabase でデータベース連携 📍 今ここ
🌱

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人