この記事で解決できること
- Stripe 決済の完了件数が 0 件でも「本番が壊れている」と即断してはいけない理由
- ローカル
.env.localの欠落と Vercel 本番 env の欠落を区別するチェックコマンド
環境
- Next.js App Router(Vercel デプロイ)
- Stripe サブスクリプション決済
- Supabase(購読完了レコードの保存先)
起きたこと
Stripe 決済導線の検証中(2026-06-17)、以下の状態が重なった。
- ローカルの
.env.localにSTRIPE_PRICE_IDの記載がなかった - Supabase の completions テーブルのレコードが 0 件だった
この 2 点から「本番 Vercel に price ID が設定されていない → Stripe 決済が壊れている」と判断してデバッグを開始した。
実際の状態
vercel env ls production を叩いたところ、STRIPE_PRICE_ID は本番に設定済みだった。
Stripe の LIVE モードで決済画面を直接開くと、チェックアウトページまで正常に到達できた。
推測は外れていた。本番は正常だった。
なぜこのミスが起きたか
ローカル env ≠ 本番 Vercel env
.env.local はローカル開発専用のファイルです。Vercel の環境変数とは完全に独立しています。
| 場所 | 環境変数の管理 |
|---|---|
| ローカル開発 |
.env.local(gitignore 対象) |
| Vercel production | Dashboard → Settings → Environment Variables |
| Vercel preview | 同上(production と別設定可能) |
完了 0 件 ≠ 壊れている
件数が 0 件の原因には複数の解釈がある。
- 本番が壊れていてチェックアウトが通らない(誤判断)
- 本番は正常だが、まだ誰も完了していない(実際の状態)
- 完了は発生しているが Supabase への記録が失敗している
この 3 つを区別せず 1 を即採用したのがミスだった。
解決策: 本番が壊れているかの確認手順
# Step 1: 本番の環境変数を確認
vercel env ls production
# Step 2: Stripe の LIVE モードで決済画面を直接開く
# (チェックアウトページまで到達できるか自分で確認する)
# Step 3: 完了が 0 件でも、まず本番フローを直接試す
ローカルの状態を本番の代理にしない。本番は本番で直接確認する。
まとめ
- ローカル
.env.localに無い = Vercel 本番に無い、ではない - 完了件数 0 件 = 壊れている、ではない。「まだ誰も試していない」可能性もある
- 「本番が壊れているかも」と感じたら、推測前に
vercel env ls productionと本番フローの直接確認を
AI ツールを業務に組み込む設計の実験ログを書いています。 https://masatoman.net