GitHub Actions の無料枠が足りなくなり、日次ジョブを VPS cron に移した
Angla の日次スコアを Actions の schedule から外し、VPS cron に移した理由と今の役割分担。
個人開発でも、定期バッチを GitHub Actions の schedule に載せたくなります。Angla でもそうしていました。日次の釣行スコア生成を Actions で回していたのですが、2026年8月に GitHub Free の月間分を使い切って止まりました。
結論から言うと、毎日必ず走る処理は VPS の cron に移し、Actions の schedule には戻しません。
何が枠を食っていたか
自分のアカウントは GitHub Free(月 2,000 分、超過は止めたい運用)です。Angla 周りで重かったのは、ざっくり次のようなものです。
- 日次スコア生成(当時は毎日まとまった分数が必要だった)
- 潮汐まわりのフル再ビルドを毎日回していた時期
- docs だけのコミットがデプロイやワークフローを叩いていたこと
- iOS 向け macOS ランナー(分が 10 倍)
「1日十数分」でも、毎日積み上がると月末に効きます。便利な自動化が、そのまま請求(または停止)になります。
残したもの / 外したもの
移したあとの役割分担はこうしています。
| 処理 | どこで回す |
|---|---|
| 日次スコア | VPS cron(Dart SDK のみ) |
| Web 本番デプロイ | GitHub Actions(コード変更時のみ) |
| Android AAB | 手動 workflow_dispatch |
| iOS TestFlight | 手元 Mac のスクリプトが正本 |
大事なのは、「無料枠が戻ったから schedule を復活」しないことです。同じ失敗を季節イベントのように繰り返すだけなので。
VPS cron 側の設計
VPS には Flutter フルセットを入れていません。日次スコアは Dart SDK だけで動くスクリプトに寄せています。メモリ 2GB クラスの VPSでも回せるようにした、という実務的な判断です。
運用上の注意もセットで覚えました。
- git push しただけでは、VPS 上のスクリプトコピーは更新されない(同期が別作業)
- cron 失敗しても GitHub の失敗メールは来ないので、ログを見る習慣が必要
- 潮汐の静的 HTML を毎日フルビルドする必要は薄く、端末計算+デプロイ時更新に寄せた
「自動化した瞬間に、監視と同期の手順も増える」のが個人開発のリアルです。
Actions に残す意味
Actions を全否定しているわけではありません。
- コード変更時のビルド/デプロイ
- たまにしか叩かない Android パッケージ作成
ここは PR やコミットと相性が良いです。一方で 毎日決まった時刻に必ず走る仕事は、分課金のクラウド CI より、月額固定の VPS cron の方が予測しやすい、というのが今回の学びです。
まとめ
- 便利な
scheduleでも、Free 枠は普通に死ぬ - 日次必須バッチは VPS cron へ
- 枠が戻っても、同じ schedule は戻さない
- CI は「変更時」と「手動」、定時は「自前サーバー」と役割を分ける
Angla 全体の話は Angla を公開するまで にあります。VPS に複数サービスを載せる話は、また別に書きます。