GitHub Actionsで毎日REST APIのデータを自動で取ってきて、バックアップしときたいときあるやん? DR(災害復旧)の基盤にしたいけど、自分で書くのめんどいってなるよね。 そんな時、これ投げとけばだいたいOKやで。
一番雑な投げ方
GitHub Actionsで毎日夜中にREST APIからデータ取ってきて、JSONで保存してくれへん?90日間残しといてほしいわ。
これだけで動くで。
もうちょい具体的に投げるパターン
もうちょっと詳しく指定したいときは、こんな感じで投げてみてな。 APIのエンドポイントとか認証とか、具体的な情報を足すんよ。
パターン1:URLと認証をしっかり指定する
GitHub Actionsで、指定したREST APIから日次でデータ取得してJSON保存するワークフロー作って。
APIエンドポイント: https://api.example.com/api/v1/data
HTTPメソッド: GET
認証: ヘッダーに `Authorization: Bearer ${{ secrets.API_TOKEN }}`
保存先: artifactに `backup-data-YYYY-MM-DD.json` の形式で保存
保持期間: 90日
実行タイミング: 毎日UTC午前0時
これで、必要なAPIエンドポイントとか認証情報をちゃんとしてくれるはず。secrets.API_TOKEN には、GitHub Actionsのリポジトリ設定でシークレットとしてAPIトークンを設定しといてな。
パターン2:特定のデータだけ欲しい時
GitHub Actionsで、毎日REST API叩いて必要なデータだけ取ってきてJSONでバックアップしてほしいねん。
APIエンドポイント: https://api.example.com/api/v1/items
欲しいデータ: `id`, `name`, `status`
認証: APIキーを `X-API-KEY` ヘッダーに設定
保存期間: 90日
実行時間: 毎日夜中の2時(JST)
特定のフィールドだけ抜き出して軽量化したい時とかに便利やね。これも認証方法を指定しとくと、ちゃんと対応してくれるで。
実践例 / 実録
うちの招待制レストラン推薦アプリ「くぐる」でも、日次のバックアップはGitHub Actionsで自動化しとるで。 例えば、レストランのおすすめ情報とか、ユーザーの招待状況とか、管理画面で使うようなデータを毎日REST APIから引っ張ってきてるんよ。
具体的には、こんな感じのYAMLファイルをClaude Codeに作らせて、.github/workflows ディレクトリに置いとるわ。
name: Daily API Data Backup
on:
schedule:
# 毎日UTC午前0時に実行 (JST午前9時)
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
backup_data:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y curl jq
- name: Fetch API Data
id: fetch_data
run: |
API_URL="https://api.your-app.com/api/v1/admin/dashboard-data"
AUTH_TOKEN="${{ secrets.API_TOKEN }}"
DATE=$(date +%Y-%m-%d)
OUTPUT_FILE="dashboard-data-${DATE}.json"
echo "Fetching data from $API_URL..."
curl -s -H "Authorization: Bearer $AUTH_TOKEN" $API_URL > $OUTPUT_FILE
if [ -s "$OUTPUT_FILE" ]; then
echo "Data fetched successfully. Saved to $OUTPUT_FILE"
echo "output_file=$OUTPUT_FILE" >> $GITHUB_OUTPUT
else
echo "Error: Failed to fetch data or file is empty."
exit 1
fi
- name: Upload backup as artifact
uses: actions/upload-artifact@v4
with:
name: api-backup-${{ steps.fetch_data.outputs.output_file }}
path: ${{ steps.fetch_data.outputs.output_file }}
retention-days: 90
これ何がええかっていうと、もし万が一DBが吹っ飛んだり、うっかりデータ消しても、Artifactから前の日のデータを取り出せるから安心やねん。まあ、DBのバックアップと併用するんが基本やけど、API叩くだけでさっと取れるデータはこれめっちゃ便利やわ。DR(災害復旧)の基盤としても、手間なくパッと作れるのが強いんよね。
つまずきポイント
APIの認証トークンをどう扱うか
secrets にAPIトークン入れるの、忘れがちやったりするんよ。間違って公開リポジトリにハードコードしたら、それもう大変やから気をつけてな。GitHub Actionsの Settings → Secrets and variables → Actions でちゃんと設定しといて。
APIのページネーションに対応する
叩くAPIが1回で全データを返してくれへん時、あるやん?そういうときは、Claude Codeに「ページネーションに対応して、全件取得するスクリプトを書いて」って具体的に頼むんよ。そしたら、ループ処理とか次ページへのリンク辿ってくれるコードを考えてくれるはずやで。
Artifactの容量制限
GitHub ActionsのArtifactには、保存できるファイルサイズに上限がある(デフォルトだと10GB)。あんまり大きいデータになると、保存できひんこともあるから、ファイルサイズは確認しといてな。もし大きすぎる場合は、S3とか外部ストレージに保存する方法も検討する必要があるかも。その場合もClaude Codeに相談したら、ええ感じのソリューション出してくるで。