Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新(準備中)

Jan 6, 2025 - 日記

GitHub Actionsでcronを実行する

GitHub Actionsは、リポジトリのコードを基盤にCI/CDタスクを自動化するための強力なツールです。その中でも cron スケジュールを利用することで、特定のタイミングで定期的にジョブを実行できます。本記事では、GitHub Actionsを使ってcronタスクを設定する方法、利点と欠点、さらに具体的な利用例について解説します。

GitHub Actionsのcronとは?

GitHub Actionsのcronは、UNIXの cron と同様に、定期的にジョブを実行する仕組みです。YAML形式でスケジュールを定義し、リポジトリの指定したアクションを自動化できます。

以下は、毎日午前0時にジョブを実行する例です:

name: Scheduled Job Example

on:
  schedule:
    - cron: "0 0 * * *"

jobs:
  example-job:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Run a script
        run: echo "Hello, scheduled job!"

利用する利点

1. GitHubインフラを利用

自社でサーバーやスケジューラーを構築する必要がなく、GitHubの安全で安定したインフラをそのまま利用できます。

2. コードと自動化の統合

リポジトリのコードやプロジェクトに直接関連するタスクを、自動化して定期的に実行可能です。

3. 柔軟なスケジュール

cron 形式を使うことで、日次・週次・月次といった多様なスケジュール設定ができます。

4. コストの最適化

パブリックリポジトリでは無制限に無料利用可能で、プライベートリポジトリでも一定の無料枠が提供されます。例えば、GitHub Freeプランでは月2, 000分の無料枠があります。

5. クロスプラットフォーム対応

Linux、Windows、macOSなど、さまざまなOSでジョブを実行できます。

注意点と欠点

1. 実行精度

cron のスケジュールはUTC基準で指定する必要があり、実際の実行時間に数秒から数分の遅延が発生する可能性があります。

2. 高頻度タスクには不向き

最短でも1分間隔での実行が可能ですが、リアルタイム性を求めるタスクには適しません。

3. リソース制限

無料枠を超過すると追加コストが発生するため、大規模なタスクや高頻度の利用ではコストに注意が必要です。

4. 利用規約への配慮

GitHub Actionsは主にリポジトリ関連のタスクに使用することが求められています。CI/CDと無関係の目的で過度に利用すると、利用規約違反と見なされる可能性があります。

実際の利用例

1. 定期テストの実行

name: Daily Tests

on:
  schedule:
    - cron: "0 6 * * *"

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

2. APIデータ収集

name: Fetch API Data

on:
  schedule:
    - cron: "0 12 * * *"

jobs:
  fetch-data:
    runs-on: ubuntu-latest

    steps:
      - name: Fetch data
        run: curl -o data.json https://api.example.com/data

      - name: Commit data
        run: |
          git config --local user.name "github-actions"
          git config --local user.email "github-actions@users.noreply.github.com"
          git add data.json
          git commit -m "Update data.json"
          git push          

3. Slack通知

name: Notify Team

on:
  schedule:
    - cron: "30 9 * * 1"

jobs:
  notify:
    runs-on: ubuntu-latest

    steps:
      - name: Send a notification
        uses: slackapi/slack-github-action@v1.23.0
        with:
          slack-message: "Weekly update: All systems are go!"
          slack-webhook-url: ${{ secrets.SLACK_WEBHOOK }}

まとめ

GitHub Actionsのcron機能を使えば、リポジトリに関連したさまざまなタスクを簡単にスケジュール実行できます。特に、CI/CDに限定せず、データ収集や通知、自動化された更新作業など、幅広い用途に対応可能です。ただし、利用規約やコスト管理には注意しながら、適切な頻度で効率的に運用することが重要です。