無料で使える最強のクーロン!GitHub Actionsで定期実行スクリプトを動かす

無料で使える最強のクーロン!GitHub Actionsで定期実行スクリプトを動かす

2026/08/21

「毎日朝8時に天気の情報をLINEに送りたい」「毎月末にWebサイトのバックアップを取りたい」 ちょっとしたプログラムを書いた後、次にぶつかる壁が**「これをどうやって自動で定期実行させるか?」**です。

こんにちは!自宅のスマートホーム化(自動化)をやりすぎて、たまに家族から「電気が勝手に消える!」とクレームを受ける40代のWebエンジニアです。

今回は、自前のサーバー(VPSやラズパイなど)をわざわざ契約・構築しなくても、完全無料でプログラムを定期実行できる神サービス、「GitHub Actions」の超便利な使い方をご紹介します。

なぜ「GitHub Actions」なのか?

昔はプログラムを定期実行(スケジュール実行)させるとなると、Linuxサーバーを借りて「cron(クーロン)」という仕組みを設定するのが当たり前でした。しかし、そのためには毎月数百円〜数千円のサーバー代がかかり、セキュリティのメンテナンスも自分でやらなければなりません。

そこで登場するのがGitHub Actionsです。 本来はソフトウェア開発のテストやデプロイ(公開)を自動化するためのCI/CDツールですが、この機能の中に「スケジュール実行機能(cron)」が備わっています。

  • 完全無料(パブリックリポジトリなら無制限、プライベートでも月に一定時間まで無料)。
  • サーバーの保守管理が一切不要
  • Python、Node.js、Rubyなど、好きな言語のスクリプトを動かせる。

まさに個人開発者や自動化オタクにとっての救世主です。

定期実行の仕組み(Mermaid図解)

GitHub Actionsを使った定期実行のフローはとてもシンプルです。

graph TD
    A["GitHubサーバーの時間管理 (UTC)"] -->|指定した時刻に発火| B{"GitHub Actions 起動"}
    B --> C["仮想環境 (Ubuntuなど) を立ち上げ"]
    C --> D["必要な言語 (Pythonなど) をセットアップ"]
    D --> E["リポジトリ内のプログラムを実行"]
    E --> F["結果を出力 / 通知"]
    F --> G["仮想環境を破棄して終了"]

    style B fill:#eff6ff,stroke:#2563eb
    style G fill:#f8fafc,stroke:#475569

実践:毎日朝9時に「Hello World」を出力する

実際に、GitHub Actionsを使って定期実行を設定してみましょう。必要なのは、プロジェクトのルートディレクトリに .github/workflows/ というフォルダを作り、そこに設定ファイル(YAML形式)を置くだけです。

1. 実行したいスクリプトの準備

まずは実行したい簡単なPythonスクリプト(hello.py)を作成します。

# hello.py
import datetime

# 日本時間を取得
tz_jst = datetime.timezone(datetime.timedelta(hours=9))
now = datetime.datetime.now(tz_jst)

print(f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] 定期実行テスト: おはようございます!")

2. GitHub Actionsの設定ファイル (YAML) を書く

次に、本題のGitHub Actionsの設定ファイルです。.github/workflows/daily_run.yml という名前で以下の内容を作成します。

name: 毎朝9時の定期実行タスク

on:
  schedule:
    # ここが定期実行の設定 (cron記法)
    # 注意: GitHub Actionsの時間はUTC (協定世界時) なので、日本時間(JST)より9時間遅れています。
    # 日本時間の朝9時に動かしたい場合は、9 - 9 = 0 (UTC) と設定します。
    - cron: '0 0 * * *'  # 毎日UTC 0:00 (JST 9:00) に実行

  # 手動で実行できるボタンを表示する設定 (テストに便利です)
  workflow_dispatch:

jobs:
  run-script:
    runs-on: ubuntu-latest  # 実行環境は最新のUbuntu

    steps:
      # 1. リポジトリのコードをチェックアウト(取得)する
      - name: Checkout repository
        uses: actions/checkout@v4

      # 2. Pythonの環境をセットアップする
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'  # 使うPythonのバージョン

      # 3. 必要なパッケージがあればインストール (今回はなし)
      # - name: Install dependencies
      #   run: pip install requests

      # 4. 実際にスクリプトを実行する
      - name: Run Python script
        run: python hello.py

【超重要】時刻設定の罠:JSTとUTCの違い

ここで私が過去に何度もやらかした大きな失敗談を一つ。 GitHub Actionsのcron設定は、すべて「UTC(協定世界時)」で解釈されます

私が最初に「よし、毎朝8時に実行しよう!」と思って cron: '0 8 * * *' と設定したところ、実際に動いたのは夕方の17時でした。(日本時間はUTC+9時間のため、UTCの8時は日本の17時になります)。

日本時間(JST)で実行したい時刻から**「マイナス9時間」**した時刻をcronに設定することを絶対に忘れないでください。

まとめ:アイデア次第で広がる自動化の世界

GitHub Actionsの定期実行を覚えれば、もう無駄にサーバーを起動しっぱなしにする必要はありません。

  • APIを叩いて最新ニュースを取得し、Slackに投げる
  • スクレイピングで商品の在庫をチェックして、入荷したらLINEで通知
  • 静的サイトジェネレーター(Zolaなど)のビルドとデプロイを自動化

これらがすべて無料で、このYAMLファイルを1枚書くだけで実現できてしまいます。 最初はYAMLの書き方に戸惑うかもしれませんが、慣れれば数分で設定できます。ぜひ、あなただけの自動化システムを構築してみてください!