DEV Community

スシロー
スシロー

Posted on

【実体験】Vercel/Supabase無料枠で月数百円に抑える構成と落とし穴

Vercel/Supabase無料枠で月数百円に抑える構成と落とし穴

結論

個人開発の本番環境は、Vercel Hobby + Supabase Free をベースに、超過しやすい一部だけを従量課金へ逃がすことで、月額をドメイン代込みの数百円(実質コンピュート ¥0〜200程度)に収められる。ただし「無料」を維持できるかは、Supabaseの7日間アイドル停止Vercelの商用利用禁止条項という2つの地雷を踏まないかどうかで決まる。

根拠:無料枠の実数値

両者の無料枠は2026年時点で概ね以下。ここを超えた瞬間に課金 or 停止が走る。

項目 Vercel Hobby Supabase Free
帯域 100 GB/月 5 GB/月
DB容量 500 MB
関数実行 100 GB-Hrs Edge Function 50万回
停止条件 商用利用で要Pro 7日間無アクセスでDB一時停止

落とし穴は容量超過よりも運用条件側にある。Hobbyは規約上「非商用」限定で、アフィリエイトや広告収益が乗ると規約違反になり得る。収益化するなら最初からVercel Pro($20)か、Cloudflare Pages等への退避を検討する。

手順

1. Supabaseのアイドル停止を防ぐ

無料DBは7日間アクセスがないと止まる。GitHub Actionsで定期的に軽いクエリを打って延命する。

# .github/workflows/keepalive.yml
name: supabase-keepalive
on:
  schedule:
    - cron: "0 3 * * *"   # 毎日UTC3時
jobs:
  ping:
    runs-on: ubuntu-latest
    steps:
      - run: |
          curl -s "$SUPABASE_URL/rest/v1/health?select=id&limit=1" \
            -H "apikey: $SUPABASE_ANON_KEY"
    env:
      SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
      SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
Enter fullscreen mode Exit fullscreen mode

health は1行だけのダミーテーブルを用意しておくと帯域消費がほぼゼロで済む。

2. 帯域を食う画像をSupabaseから逃がす

Supabase Storageは無料枠5GB帯域が薄く、画像配信ですぐ枯れる。画像はVercelのCDN(100GB枠)側に寄せるのが定石。Next.jsなら最適化を効かせる。

// next.config.js
module.exports = {
  images: {
    remotePatterns: [{ protocol: "https", hostname: "*.supabase.co" }],
    minimumCacheTTL: 86400, // 1日キャッシュで再取得を抑制
  },
};
Enter fullscreen mode Exit fullscreen mode

3. DB容量500MBの実測監視

500MBは意外と早く埋まる。とくにログ系テーブルとインデックス肥大に注意。

-- 容量を食っているテーブル上位5件
select relname,
       pg_size_pretty(pg_total_relation_size(relid)) as size
from pg_catalog.pg_statio_user_tables
order by pg_total_relation_size(relid) desc
limit 5;
Enter fullscreen mode Exit fullscreen mode

ログは created_at で定期DELETEし、VACUUM で物理回収する。放置すると枠は空かない。

4. コスト上限を明示的に固定する

Supabaseは Settings → Billing で Spend Cap を有効にしておく。これを切ると超過分が青天井で請求される最大の事故ポイント。VercelもPro移行時は Usage アラートを設定する。

まとめ

  • Vercel:帯域100GB・商用は規約違反リスク → 収益化前にPro/退避を判断
  • Supabase:7日停止と500MB・5GB帯域 → keepalive+画像はVercel側+Spend Cap必須
  • 監視せず「無料だから」と放置するのが唯一にして最大の落とし穴。ドメイン代を除けば月数百円以内に十分収まる。

関連リンク

※自社商品(プロモーションを含みます)。

Top comments (0)