1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsでスケジュールされたバッチ処理の自動実行

Posted at

毎朝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

image.png

今回はNode.jsのバージョンが18だったためts-nodeは互換性がありませんでした。
そのため、.tsファイルでもesmとして実行できるケースが多いtsxを使用しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?