【github Actions】定期実行のやり方
投稿日: 2024年11月02日
バックエンドの処理は通常ブラウザでの操作をトリガーにしてAPIを呼び出し実行されることが多いですが、決まった時間に特定の処理を定期的にしたいという時もありますよね。
例えば、毎日0時にここのデータを更新したい場合等です。
そんなときの手段は色々あるようですが、今回はgithub Actionsで定期実行する方法をご紹介します。
Shiftbのカリキュラムではデプロイに先はvercelを使います。
vercelにもcron jobsという定期実行する機能があり、当初はそちらを使う気満々でした。
しかし、Hobbyプランは1日に実行できる回数が1回だけという縛りがありました。
proなら出来ますが月$20です。11/2 12:26(UTC)時点での為替153.02円なので3,060円くらいです。
毎時0分に実行する記述してからpushしたらエラー吐かれて調べて発覚して絶望でした。
私はLINEに通知する設定を1時間単位で自由に出来るようにしていたので、1日1回では全然足りないし絶対譲れないと思って他の手段を探したら、いとも簡単にgithub Actionsがヒット、一旦それでやってみようと思って調べて無事実装、設定出来て、簡単だし便利過ぎると思いました。
プロジェクトフォルダのルートディレクトリに.github/workflows/
というフォルダを作成します。
このフォルダ名はGitHub Actionsが認識するために重要で、必ずこの名前にする必要があります。
workflowsフォルダ内にymlファイルを作ります。
このymlファイルには、GitHub Actionsで実行するジョブの設定を記述します。ファイル名は自由です。
name: line notififications
on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
jobs:
line-notififications:
runs-on: ubuntu-latest
steps:
- name: Call Vercel API
env:
APP_URL: ${{ secrets.APP_URL }}
run: |
curl -v -X POST "$APP_URL/api/line_notifications"
name: line notififications
ワークフローの名前を命名しています。
on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
ここはトリガーを定義しています。
設定が2つあって、
schedule
: Cron形式で指定されたスケジュールに基づいて実行されます。- cron: "0 * * * *"
この記述で毎時0分に実行されます。
Cron形式は分、時、日、月、曜日を指定してスケジュールを設定する方法です。他のツールで定期実行の設定をするときにも使う記述方法のようです。
でも実際は結構時間ズレることも多いみたいで、私も実行してて0分ピッタリには実行されていないことが確認できています。
workflow_dispatch
:これでgithubの画面から手動で実行することができるようにするために書いています。テスト用です。
jobs:
line-notififications:
runs-on: ubuntu-latest
steps:
- name: Call Vercel API
env:
APP_URL: ${{ secrets.APP_URL }}
jobの設定です。
runs-on: ubuntu-latest
でジョブが実行される環境を設定するのですが、これは最新指定しとけばいいと思います(多分)
仮想マシンなので私のPCの環境等は関係ありません。
steps
: ジョブ内で実行される一連のステップを定義します。
stepsの詳細は
steps:
- name: Call Vercel API
env:
APP_URL: ${{ secrets.APP_URL }}
run: |
curl -v -X POST "$APP_URL/api/line_notifications"
name
:stepの名前です。
env
:環境変数を指定します。
APP_URL
という変数がGitHub Secretsから取得されます。
GitHub Secretsは、リポジトリ内で安全に環境変数を管理するための機能で、機密情報はここに保存して、ymlファイル内で利用します。
設定方法は後述します。
run
: 実行するコマンドを指定します。POSTリクエストをしています。
githubのリポジトリ画面→Settingタブ→secrets and variables→Actionsの画面で設定します。
これだけです。
githubのリポジトリ画面→Actionsタブ→設定したworkflows名で確認できます。
手動実行(トリガーにworkflow_dispatch
が設定されていないと出てこない)したいときは、上記画面の青い部分に「Run workflow」とあるので、そこをクリックして実行したいブランチ(デフォルトはmain)を指定してRun workflowをクリックしたら実行できます!
私は違うところでハマっていたため時間かかりましたが、github Actionsの設定自体は簡単でした。
定期実行を1日2回以上vercelのHobbyプランで行いたい方は是非参考にしてみてください。
1日1回で良いならvercelのcron jobsがいいと思います。