Supabaseの無料プランは、一定期間APIアクセスがないとプロジェクトが一時停止され、さらに放置するとデータが削除されてしまう。
このツールは Google Apps Script (GAS) を使い、指定したSupabaseプロジェクトのREST APIに毎週1回軽量なリクエストを送ることでプロジェクトをアクティブな状態に保ち続ける。
src/Code.js— 本体スクリプト(Supabaseへのping、週次トリガー、メール/Discord通知)src/appsscript.json— Apps Scriptのマニフェスト- clasp を使ってこのリポジトリのコードをGASプロジェクトにpushする
npm install
npm run loginブラウザが開くのでGoogleアカウントでログインする。
初回のみ、Apps Script の設定 で「Google Apps Script API」をONにしておくこと。
npm run createこれでこのリポジトリと紐づいた新しいスタンドアロンのGASプロジェクトが作成され、.clasp.json が生成される(このファイルは各自の環境固有のためgit管理対象外)。なお clasp create-script は新規プロジェクトの初期マニフェストで src/appsscript.json を上書きするが、npm run create 実行後に自動で git checkout -- src/appsscript.json が走りリポジトリの内容に戻すため、手動での復元は不要。
既存のGASプロジェクトに紐づけたい場合は代わりに以下を実行する。
npx clasp clone-script <スクリプトID> --rootDir ./srcclasp v3では一部コマンドが
create→create-script、clone→clone-script、open→open-scriptにリネームされている(push/logs/loginは変更なし)。
npm run pushnpm run openでスクリプトエディタが開くので、左メニューの「プロジェクトの設定」(歯車アイコン) → 「スクリプト プロパティ」から以下を追加する(コードに直接書き込まず、必ずここで設定する)。
| プロパティ名 | 必須 | 説明 |
|---|---|---|
SUPABASE_URL |
✅ | 例: https://xxxxxxxxxxxx.supabase.co |
SUPABASE_KEY |
✅ | Supabaseの anon キー(Settings > API から取得) |
SUPABASE_TABLE |
任意 | 存在確認するテーブル名。空欄の場合はREST APIのルートに軽量アクセスするだけになる |
NOTIFY_EMAIL |
任意 | 実行結果の通知先メールアドレス。空欄ならメール通知は送信されない |
MAIL_ONLY_ON_FAILURE |
任意 | true にすると失敗時のみメールを送信する。デフォルト(falseまたは未設定)では成功時・失敗時とも送信される |
DISCORD_WEBHOOK_URL |
任意 | 実行結果を送信するDiscordのWebhook URL。空欄ならDiscord通知は送信されない |
DISCORD_ONLY_ON_FAILURE |
任意 | true にすると失敗時のみDiscordへ送信する。デフォルト(falseまたは未設定)では成功時・失敗時とも送信される |
スクリプトエディタの関数選択で pingSupabase を選び、実行する。初回実行時は外部アクセス・メール送信の権限承認ダイアログが出るので許可する。実行ログ(表示 > 実行数)でステータスコードが200番台になっていることを確認する。
同様に関数選択で createWeeklyTrigger を選び、一度だけ実行する。これで毎週月曜6時台に keepAlive が自動実行されるようになる。
トリガーは「トリガー」タブ(時計アイコン)からも確認・削除できる。
SUPABASE_TABLEを設定した場合:GET {SUPABASE_URL}/rest/v1/{table}?select=*&limit=1- 未設定の場合:
GET {SUPABASE_URL}/rest/v1/(OpenAPI定義を返すだけの軽量なエンドポイント)
いずれもSupabaseのAPI Gateway(PostgREST)へのリクエストとしてカウントされ、プロジェクトの活動として認識される。実際のテーブルへのアクセスを確実にしたい場合は SUPABASE_TABLE の設定を推奨する。
実行のたびに NOTIFY_EMAIL と DISCORD_WEBHOOK_URL へ結果を通知する(それぞれ設定されている場合のみ)。Discordの通知はembedで送信され、成功時は緑、失敗時(ネットワークエラー、APIキー無効、ステータスコードが200番台以外など)は赤の色になる。MAIL_ONLY_ON_FAILURE / DISCORD_ONLY_ON_FAILURE を true にすると、それぞれ失敗時のみの通知に絞れる。
SUPABASE_KEYはanonキーで十分(読み取りのみのため)。service_roleキーは漏洩時のリスクが大きいので使わないこと。- RLS (Row Level Security) が有効なテーブルを指定する場合、
anonキーでselectが許可されているか確認すること。許可されていないとステータス401/403で失敗し、その都度メール通知が届く。 - このツールはあくまで無料プランの自動停止/削除を回避するための延命策であり、Supabase側の仕様変更によって効果がなくなる可能性がある。