Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Supabase Extender

技術者倫理|遵守済み

Supabaseの無料プランは、一定期間APIアクセスがないとプロジェクトが一時停止され、さらに放置するとデータが削除されてしまう。

このツールは Google Apps Script (GAS) を使い、指定したSupabaseプロジェクトのREST APIに毎週1回軽量なリクエストを送ることでプロジェクトをアクティブな状態に保ち続ける。

構成

  • src/Code.js — 本体スクリプト(Supabaseへのping、週次トリガー、メール/Discord通知)
  • src/appsscript.json — Apps Scriptのマニフェスト
  • clasp を使ってこのリポジトリのコードをGASプロジェクトにpushする

セットアップ手順

1. clasp のインストール & ログイン

npm install
npm run login

ブラウザが開くのでGoogleアカウントでログインする。

初回のみ、Apps Script の設定 で「Google Apps Script API」をONにしておくこと。

2. GASプロジェクトの作成

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 ./src

clasp v3では一部コマンドが createcreate-scriptcloneclone-scriptopenopen-script にリネームされている(push / logs / login は変更なし)。

3. コードをpush

npm run push

4. Supabaseの接続情報を設定

npm 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または未設定)では成功時・失敗時とも送信される

5. 動作確認

スクリプトエディタの関数選択で pingSupabase を選び、実行する。初回実行時は外部アクセス・メール送信の権限承認ダイアログが出るので許可する。実行ログ(表示 > 実行数)でステータスコードが200番台になっていることを確認する。

6. 週次トリガーの作成

同様に関数選択で 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_EMAILDISCORD_WEBHOOK_URL へ結果を通知する(それぞれ設定されている場合のみ)。Discordの通知はembedで送信され、成功時は緑、失敗時(ネットワークエラー、APIキー無効、ステータスコードが200番台以外など)は赤の色になる。MAIL_ONLY_ON_FAILURE / DISCORD_ONLY_ON_FAILUREtrue にすると、それぞれ失敗時のみの通知に絞れる。

注意事項

  • SUPABASE_KEYanon キーで十分(読み取りのみのため)。service_role キーは漏洩時のリスクが大きいので使わないこと。
  • RLS (Row Level Security) が有効なテーブルを指定する場合、anon キーで select が許可されているか確認すること。許可されていないとステータス401/403で失敗し、その都度メール通知が届く。
  • このツールはあくまで無料プランの自動停止/削除を回避するための延命策であり、Supabase側の仕様変更によって効果がなくなる可能性がある。

About

Google Apps Script (GAS) で Supabase のプロジェクトを生存させるツール

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages