IVYXON
記事一覧に戻る
ワークフロー中級🧪 Recipe

GitHub Actionsで毎日バックアップ?めんどくさいこと全部やってって頼んでいい?

GitHub ActionsでAPIデータを日次でバックアップ、DRの基盤づくりも楽勝やで!

2026年6月1日5分で読めます

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の SettingsSecrets and variablesActions でちゃんと設定しといて。

APIのページネーションに対応する

叩くAPIが1回で全データを返してくれへん時、あるやん?そういうときは、Claude Codeに「ページネーションに対応して、全件取得するスクリプトを書いて」って具体的に頼むんよ。そしたら、ループ処理とか次ページへのリンク辿ってくれるコードを考えてくれるはずやで。

Artifactの容量制限

GitHub ActionsのArtifactには、保存できるファイルサイズに上限がある(デフォルトだと10GB)。あんまり大きいデータになると、保存できひんこともあるから、ファイルサイズは確認しといてな。もし大きすぎる場合は、S3とか外部ストレージに保存する方法も検討する必要があるかも。その場合もClaude Codeに相談したら、ええ感じのソリューション出してくるで。