【github Actions】定期実行のやり方

【github Actions】定期実行のやり方

投稿日: 2024年11月02日

Tips
要約
  • GitHub Actionsを使って定期的にAPIを呼び出す方法を紹介。
  • VercelのHobbyプランでは制限があるため、GitHub Actionsが簡単で便利な代替手段となる。
  • 設定は簡単で、Cron形式でスケジュールを指定することができる。

はじめに

バックエンドの処理は通常ブラウザでの操作をトリガーにしてAPIを呼び出し実行されることが多いですが、決まった時間に特定の処理を定期的にしたいという時もありますよね。

例えば、毎日0時にここのデータを更新したい場合等です。

そんなときの手段は色々あるようですが、今回はgithub Actionsで定期実行する方法をご紹介します。

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がいいと思います。

シェア!

Threads
user
吉本茜
山口在住/二児の母
Loading...
記事一覧に戻る
Threads
0