🕒

【毎朝自動更新】Vercel Cron Jobs × REST APIで作る、定時デプロイの仕組み

に公開

情報がなかなか見つからなかったので、備忘録としてまとめます。

毎朝決まった時間に、自動で最新情報を取得・デプロイして反映されるWebアプリをVercelの機能を活用して構築します。

今回は以下の構成で、自動デプロイの仕組みを作りました:

  • Vercel REST API:手動操作なしにデプロイを実行
  • フレームワークのAPIルート:デプロイ処理を実装
  • Vercel Cron Jobs:指定時刻にAPIを呼び出す

✅ やりたいこと

  • 毎日朝4時に自動デプロイを実行し、最新の情報を反映
  • デプロイ作業の自動化により、運用コスト削減
  • APIの呼び出しタイミングを制御して無駄なリクエストを削減

🔧 使用技術と要件

項目 内容
フレームワーク Astro
デプロイ Vercel
デプロイ方式 REST API
時刻指定 Cron Jobs

Astro以外でも「Vercelにデプロイ可能」「APIルートを持てる」構成であれば同様の仕組みを導入可能だと思います(未検証)。

🧩 自動更新の流れ

  1. Vercel Cron Jobsで決まった時間にAPIを呼び出す
  2. APIルート内でVercelのREST APIを叩いてデプロイを実行
  3. 最新情報が反映されたサイトが毎日自動更新される

https://vercel.com/docs/cron-jobs
https://vercel.com/docs/rest-api/reference/welcome

🧰 準備

※アプリケーションの実装は省略しております

必要なもの

  • Vercel アカウント
  • GitHub リポジトリ
  • Vercel API トークン(REST API 用)

① Vercelトークンの取得

  1. Vercel ダッシュボード右上 → Account Settings
  2. 「Tokens」タブで新規トークンを発行
  3. .envに設定

VERCEL_TOKEN=ここにトークン

② デプロイAPIの実装

こちらを参考にしながらデプロイを実装していきましょう
https://vercel.com/docs/rest-api/reference/examples/deployments-automation

// src/pages/api/deploy.ts
import type { APIRoute } from 'astro';
import { Vercel } from '@vercel/sdk';

const vercel = new Vercel({
  bearerToken: import.meta.env.VERCEL_TOKEN,
});

export const GET: APIRoute = async () => {
  try {
    const createResponse = await vercel.deployments.createDeployment({
      requestBody: {
        name: 'recent-developments-dashboard',
        target: 'production',
        gitSource: {
          type: 'github',
          repoId: '964910633', // GitHubのリポジトリID
          ref: 'main',
          org: 'morimorig3', // GitHubのユーザーID
        },
      },
    });

    return new Response(JSON.stringify({ success: true, createResponse }), {
      status: 200,
    });
  } catch (error) {
    return new Response(JSON.stringify({ error: String(error) }), {
      status: 500,
    });
  }
};

📌 リポジトリIDの確認方法:
リポジトリIDは次のGitHubAPIを呼び出すことで確認することができます

https://api.github.com/repos/{ユーザー名}/{リポジトリ名}
ex.) https://api.github.com/repos/morimorig3/recent-developments-dashboard

vercel.jsonの設定

プロジェクトルーチにvercel.jsonを作成して設定を記述します
pathには実装したAPIのパスを、scheduleにはcron式で希望の時間を記述します

{
  "crons": [
    {
      "path": "/api/deploy",
      "schedule": "0 19 * * *"
    }
  ]
}

これは JSTで午前4時(UTC+9)に実行される設定です

vercel.jsonを作成することで、Vercelのダッシュボード → Settingsタブ → Cron Jobsにタスクが表示されます

④ ローカル確認

npm run dev
curl http://localhost:4321/api/deploy -v

※URLの指定はご自身の環境に合わせて変更してください

Vercelのダッシュボード → Deployments タブで実行結果を確認。

成功した場合、新しくデプロイメントが実行されます

⑤ デプロイと環境変数の設定

⑥ Cron Job 実行確認

Project Settings > Cron Jobs > Run
から手動でタスクを実行してみましょう

成功した場合、新しくデプロイメントが実行されます

🚨 注意点

  • Hobbyプランでは時間通りに実行されない可能性があります
  • 厳密な時間管理が必要な場合は有料プランの検討を

参考:
https://vercel.com/docs/cron-jobs/usage-and-pricing#hobby-scheduling-limits

✅ まとめ

今回は、Vercel × Cron Jobs を使って、毎日定時にデプロイを実行する仕組みを構築しました。

「ちょっとした運用の自動化」 にはかなり手軽でおすすめです。
よければぜひ試してみてください!

📎 サンプルコード:
https://github.com/morimorig3/recent-developments-dashboard

Discussion