SupabaseにGitHub Actionsを使って無料枠を維持するテクニック
Supabaseの無料プラン(Free Tier)は非常に強力ですが、個人開発や趣味のプロジェクトで使っていると、「7日間アクセスがないとプロジェクトが一時停止(Pause)される」という仕様に悩まされることがあります。
この記事では、GitHub Actionsを利用して定期的にSupabaseを「起こす(Wake up / Keep alive)」ことで、この自動停止を回避するテクニックを紹介します。
なぜ停止するのか?
Supabaseの無料枠では、リソース節約のために、APIリクエストやダッシュボード操作が1週間ないプロジェクトはスリープ状態になります。再開は可能ですが、コールドスタートにより初回アクセスが遅れたり、手動での再開操作が必要になったりと手間がかかります。
解決策:GitHub Actionsで定期アクセス
「angra」等のリポジトリで公開されているツールの正体は、GitHub Actionsのスケジュール実行機能(cron)です。これを使って、毎日(あるいは数日に1回)、自動的にSupabaseへアクセスを飛ばし、「アクティブな状態」を偽装(維持)します。
仕組みの概要
- GitHub Actions がスケジュール通りに起動。
- スクリプトが SupabaseのAPI を叩く(Ping送信)。
- Supabase側が「アクセスがあった」と認識し、7日間のカウントダウンをリセットする。
実装手順
1. ワークフローファイルの作成
リポジトリの .github/workflows/ ディレクトリに、YAMLファイル(例: keep_alive.yml)を作成します。
name: Supabase Keep Alive
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
ping-supabase:
runs-on: ubuntu-latest
steps:
- name: Ping Supabase Database
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}
run: |
curl -X GET "$SUPABASE_URL/rest/v1/users?select=*&limit=1" \
-H "apikey: $SUPABASE_KEY" \
-H "Authorization: Bearer $SUPABASE_KEY"
2. 頻度(ペース)の設定方法
この仕組みの肝は cron の設定です。YAMLファイル内の cron: '...' を書き換えることで、好きな頻度に変更できます。
| 設定値 | 実行頻度 | 備考 |
|---|---|---|
'0 0 * * *' |
毎日 午前0時 (UTC) | 最も一般的 |
'0 0 */3 * *' |
3日に1回 | アクセス過多を避けたい場合 |
'0 9 * * 1' |
毎週月曜 午前9時 (UTC) | ギリギリを攻める設定 |
Supabaseの制限は「7日間」なので、毎日〜3日に1回程度動かしておけば安全です。
3. 環境変数の設定(より高度なアクセスをする場合)
単純なURLアクセスだけでなく、実際にDBの中身をクエリして確実に維持したい場合は、GitHubのリポジトリ設定(Settings > Secrets and variables > Actions)に以下を登録し、スクリプトから利用します。
SUPABASE_URL-
SUPABASE_KEY(Anon keyなど)
注意点とマナー
このテクニックは技術的に可能ですが、Supabaseのサーバーリソースを消費することに変わりありません。
- 頻度を上げすぎない: 1時間に1回など、無意味に高い頻度にするのは避けましょう。1日1回で十分です。
- 長期放置なら停止も検討: 本当に長期間使わないプロジェクトであれば、素直にPauseさせておくのも、素晴らしいサービスを提供してくれているSupabaseへのマナーです。
まとめ
- Supabaseの自動停止は GitHub Actions (cron) で回避できる。
- 仕組みは単なる定期的なAPIアクセス。
-
.github/workflows内のファイルを編集すれば、頻度は自由に設定可能。