GitHub Actions でスクリプトをスケジュール実行
前節で紹介した cron-job.org は便利ですが、動作中のバックエンドサーバー(API)を持っていることが前提です。
単純なPythonデータ分析スクリプト(例:毎朝ビットコイン価格を取得してLineグループに送信)の場合、この小さなスクリプトのためにFastAPIを書いてデプロイするのは過剰です。
ここで開発者にとって最大の特典が!MicrosoftがGitHubを買収後、素晴らしい贈り物を提供しました:GitHub Actionsです。
GitHub Actionsとは?
GitHub Actionsは元々CI/CD(自動テストとデプロイ)用に設計されたツールです。コードをPushすると、GitHubが無料で高性能な仮想マシン(通常はUbuntu)を「貸し出し」、テストを実行してくれます。
しかし賢い開発者は、GitHub Actionsのトリガーが「コードPush」だけでなく、**schedule(スケジュール)**もサポートしていることに気付きました!
つまり、コードをGitHubリポジトリに置き、GitHubのサーバーに毎日決まった時間にスクリプトを「実行」させることが可能です。公開リポジトリ(Public Repo)の場合、完全無料で制限時間なし!プライベートリポジトリ(Private Repo)でも月2000分の無料枠があります!
実践チュートリアル:Pythonクローラースクリプトを毎日実行
まずは簡単なPythonスクリプトを作成します。プロジェクトフォルダ構成は以下のようになります:
my-auto-script/
├── main.py
├── requirements.txt
└── .github/
└── workflows/
└── cron.yml
1. Pythonスクリプトを作成 (main.py)
このスクリプトはAPIからデータを取得して表示します:
# main.py
import requests
from datetime import datetime
def job():
print(f"[{datetime.now()}] スクリプト起動!データ取得開始...")
# ここにクローラー処理やLine送信ロジックを記述
response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json")
data = response.json()
btc_price = data['bpi']['USD']['rate']
print(f"現在のビットコイン価格: {btc_price} USD")
print("タスク完了!")
if __name__ == "__main__":
job()
外部ライブラリ(例:requests)を使用する場合、requirements.txtを作成:
requests==2.31.0
2. GitHub Actions設定ファイルを作成
最も重要なステップです。プロジェクトルートに.github/workflows/cron.ymlファイルを作成します。フォルダ名は一字一句正確に(.github/workflows/)一致させる必要があります。
cron.ymlに以下を貼り付け:
name: Daily Bitcoin Price Checker
# トリガー設定
on:
# GitHubウェブ上で手動実行可能(デバッグ用)
workflow_dispatch:
# スケジュール設定(UTC時間を使用!)
schedule:
# 毎朝8:00(台湾時間)に実行
# 注意:台湾はUTC+8なので、UTC時間の00:00を指定
- cron: '0 0 * * *'
jobs:
run-script:
# 使用するOSを指定
runs-on: ubuntu-latest
steps:
# ステップ1:GitHubのコードを仮想マシンにダウンロード
- name: Checkout code
uses: actions/checkout@v4
# ステップ2:仮想マシンにPython環境をセットアップ
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
# ステップ3:依存関係をインストール
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
# ステップ4:Pythonスクリプトを実行!
- name: Run my python script
run: python main.py
# (オプション)スクリプトに環境変数(APIキーなど)が必要な場合:
# env:
# LINE_TOKEN: ${{ secrets.LINE_TOKEN }}
[!WARNING] スケジュール時間の落とし穴:タイムゾーン問題 GitHub Actionsのサーバーは一律UTC時間(協定世界時)を使用します。台湾時間はUTC+8です。 台湾時間の朝8時に実行したい場合、Crontabには8時間を引いた
0 0 * * *(UTCの深夜0時)を記述します。多くの初心者がこの罠にはまります!
3. GitHubにアップロード
コードをコミットしてGitHubにプッシュしたら、リポジトリページ上部の**"Actions"**タブをクリックします。
- 左側のリストに
Daily Bitcoin Price Checkerが表示されます。 workflow_dispatchを設定しているため、右側の**"Run workflow"**ボタンで手動テストが可能です。- 実行記録を確認すると、仮想マシンの起動、Pythonのインストール、スクリプトの実行結果が表示されます!
GitHub Actionsスケジュールの制限と解決策
GitHub Actionsは便利ですが、いくつかの制限があります:
- 時間精度:Microsoftのサーバーリソースは全世界の開発者で共有されるため、整時(例:
0 0 * * *)には混雑します。スケジュールが5~15分遅れる可能性があります。秒単位の正確なタイミングが必要なタスクには不向きです。- 解決策:整時を避けましょう!
17 0 * * *(UTC 0:17)などに設定すると、通常は正確に実行されます。
- 解決策:整時を避けましょう!
- 無料枠:プライベートリポジトリは月2000分の制限があります。1日1回、1分で終了するクローラーの場合、月30分しか消費しないので十分です。
GitHub Actionsのスケジュール機能をマスターすれば、自分でメンテナンス不要、無料の専用実行ホストを手に入れたことになります。これはマイクロSaaSや自動化ツールを作る上で最強の秘密兵器です!