アーキテクチャの全体像
使うサービスはシンプルに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エラーになります。
コスト内訳(実際の数字)
- Vercel無料プラン:$0(1日1記事まで)
- Vercel Proプラン:$20/月(複数記事・複数サイト)
- Gemini 2.5 Flash API:$0.075/100万トークン(記事1本≒$0.005〜0.01)
- GitHub:$0(無料プランで十分)
