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"**タブをクリックします。

  1. 左側のリストにDaily Bitcoin Price Checkerが表示されます。
  2. workflow_dispatchを設定しているため、右側の**"Run workflow"**ボタンで手動テストが可能です。
  3. 実行記録を確認すると、仮想マシンの起動、Pythonのインストール、スクリプトの実行結果が表示されます!

GitHub Actionsスケジュールの制限と解決策

GitHub Actionsは便利ですが、いくつかの制限があります:

  1. 時間精度:Microsoftのサーバーリソースは全世界の開発者で共有されるため、整時(例:0 0 * * *)には混雑します。スケジュールが5~15分遅れる可能性があります。秒単位の正確なタイミングが必要なタスクには不向きです。
    • 解決策:整時を避けましょう!17 0 * * *(UTC 0:17)などに設定すると、通常は正確に実行されます。
  2. 無料枠:プライベートリポジトリは月2000分の制限があります。1日1回、1分で終了するクローラーの場合、月30分しか消費しないので十分です。

GitHub Actionsのスケジュール機能をマスターすれば、自分でメンテナンス不要、無料の専用実行ホストを手に入れたことになります。これはマイクロSaaSや自動化ツールを作る上で最強の秘密兵器です!

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!