毎朝6時にsupabaseのテーブルを自動でリセットしたい!ということで
①毎朝6時にトリガーされる.ymlで
②supabaseの指定したテーブルを全部削除する.tsを実行することにしました
①最終的に書いたコード
name: Delete Users Batch
on:
workflow_dispatch:' # 手動でトリガーして動作を確認するため
schedule:
- cron: '0 6 * * *' # 毎朝6時に実行
jobs:
delete-users:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Delete all users
env:
VITE_SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
run: npx tsx batch/index.ts
②最終的に書いたコード
import { createClient } from '@supabase/supabase-js';
// Supabaseクライアントの作成
const supabaseUrl = process.env.VITE_SUPABASE_URL!;
const supabaseKey = process.env.VITE_SUPABASE_ANON_KEY!;
const supabase = createClient(supabaseUrl, supabaseKey);
async function deleteAllData() {
try {
// user_skillテーブルの全データを削除
const { error: userSkillError } = await supabase
.from('user_skill')
.delete()
.not('id', 'is', null); // idがnullでない行を削除
if (userSkillError) {
throw userSkillError;
}
// usersテーブルの全データを削除
const { error: usersError } = await supabase
.from('users')
.delete()
.not('user_id', 'is', null); // user_idがnullでない行を削除
if (usersError) {
throw usersError;
}
console.log('All data from users and user_skill tables deleted successfully.');
} catch (error) {
console.error('Error deleting data:', error);
}
}
// 関数の実行
deleteAllData();
完成までにした試行錯誤
run: npx ts-node --esm batch/index.ts
# だとTypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" のようなエラーが出るので
run: npx tsx batch/index.ts
# にした
TypeScriptでNode.jsアプリケーションを実行する方法としてts-nodeを使用しようとしていましたが
esm形式として認識させるオプションを付けても.tsファイルをesmとして認識してくれません。
パッケージの詳細情報を確認しましょう。
npm info ts-node
今回はNode.jsのバージョンが18だったためts-nodeは互換性がありませんでした。
そのため、.tsファイルでもesmとして実行できるケースが多いtsxを使用しました。