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に限定せず、データ収集や通知、自動化された更新作業など、幅広い用途に対応可能です。ただし、利用規約やコスト管理には注意しながら、適切な頻度で効率的に運用することが重要です。