アーキテクチャの全体像

使うサービスはシンプルに3つです。

Vercel Cron → API Route(Next.js)→ Gemini API
                                      ↓
                              GitHub API(記事保存)
                                      ↓
                          Vercel 自動ビルド・公開

記事はMarkdownファイルとしてGitHubリポジトリに保存されます。Vercelがリポジトリの変更を検知して自動デプロイするため、「生成→保存→公開」が完全自動化されます。

vercel.json のCron設定

{
  "crons": [
    {
      "path": "/api/generate-article",
      "schedule": "0 7,13,19 * * *"
    }
  ]
}

上記はUTC 7:00/13:00/19:00(JST 16:00/22:00/翌4:00)に記事生成APIを呼び出す設定です。Vercel無料プランはCronが1日1回のみ。複数回実行にはProプラン(月$20)が必要です。

GitHub APIで記事をコミットするコード

// GitHub API経由でMarkdownファイルをコミット
const response = await fetch(
  `https://api.github.com/repos/{owner}/{repo}/contents/content/articles/${slug}.md`,
  {
    method: 'PUT',
    headers: {
      'Authorization': `token ${process.env.GITHUB_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      message: `feat: auto-generate article - ${slug}`,
      content: Buffer.from(markdownContent).toString('base64'),
      sha: existingSha || undefined, // 更新時はSHAが必要
    }),
  }
);

注意点:既存ファイルを更新する場合は事前にファイルのSHAを取得する必要があります。取得せずにPUTすると409 Conflictエラーになります。

コスト内訳(実際の数字)

⚙️ このパイプラインを御社に実装したい方へ

記事生成パイプラインの設計から実装・運用まで承ります。

⚡ MediaForge AI に無料相談 →