GitHub Actions で毎日データを自動収集する
「毎日決まった時間に、自動でデータを集めたい」。そんなとき、自分は GitHub Actions のスケジュール実行を使っています。Amazon売れ筋ランキングでも、この仕組みで毎日データを蓄積しています。この記事では、実際のワークフロー定義を見せながら、その作り方を具体的に紹介します。
サーバーを立てなくていい
定期的な処理というと、サーバーを用意して常駐させるイメージがあります。でも個人開発でそれをやると、管理も費用もそれなりに負担です。OSのアップデート、再起動への対応、止まっていないかの監視——本題ではない仕事が増えていきます。
GitHub Actions なら、決まった時刻に処理を走らせるだけならサーバーを持たずに済みます。リポジトリに設定ファイルを置いておけば、あとは GitHub 側が時間になったら勝手に実行してくれます。
実際のワークフロー定義
やっていることは、.github/workflows/ にこんな YAML を一つ置くだけです。
name: daily-collect
on:
schedule:
- cron: "0 0 * * *" # UTC 0:00 = JST 9:00
workflow_dispatch: # 手動実行もできるように
jobs:
collect:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: python collect.py
env:
API_KEY: ${{ secrets.API_KEY }}
ポイントを補足すると、
cronは UTC 基準です。JST 9:00 に動かしたいなら0 0 * * *(UTCの0時)と書きます。ここはよく間違えるところです。workflow_dispatchを足しておくと、GitHub の画面からボタン一つで手動実行できます。デバッグ時にとても便利です。- APIキーなどの秘密情報は、リポジトリの Settings → Secrets に登録して
${{ secrets.API_KEY }}で読みます。コードに直書きしないこと。
収集したデータをどこに置くか
取得したデータの保存先は、用途で使い分けています。
- データベースに入れる(Supabase など):履歴を貯めて後から集計したいとき
- リポジトリにコミットして戻す:JSON ファイルとして持ちたいとき
2 の「コミットして戻す」は、ワークフローの最後に git commit & git push を足すだけで実現できます。データ更新そのものが Git の履歴として残るので、いつ何が変わったか追えるのが地味に便利です。
「貯める」ことの価値
この手の自動収集で大事なのは、表示そのものよりもデータを貯め続けることだと感じています。スナップショットを毎日ためておけば、あとから「先週と比べてどう変わったか」を見せられるようになります。具体的な履歴テーブルの設計は「Amazon の API で「売れ筋ランキング」サイトを作ってみた」にまとめました。
最初に少し仕込んでおくだけで、あとからじわじわ効いてくる。しかも GitHub Actions は、こうした軽い定期処理なら無料枠の範囲で十分回ります。スケジュール実行は、個人開発ととても相性の良い仕組みです。