
無料ツールだけで副業サイトを作るという話は一般論になりやすいテーマです。そこでこの記事では、実際にこのサイトで使っている構成に絞ります。公開はCloudflare Workers、データ保存はD1、定期取得はGAS、記事改稿や実装補助はCodex、画像は public/articles/ 配下の静的アセットとして扱っています。
役割分担
| 役割 | 使っているもの | このサイトでの使い方 |
|---|---|---|
| 公開ページ | Cloudflare Workers | D1から記事を取得し、HTML、RSS、sitemap、robotsを返す |
| データ保存 | Cloudflare D1 | posts、categories、tags、contact_messages、アクセス集計を保存 |
| 静的ファイル | Workers Assets | 記事図解やOGP画像を /assets/... で配信 |
| 定期処理 | Google Apps Script | 候補取得を管理画面向けに温存 |
| 開発補助 | Codex | 仕様整理、実装、テスト、README更新の補助 |
無料枠で気をつけること
無料枠は、最初の検証には向いています。ただし、上限や仕様は変わる可能性があるため、本文では具体的な数値を断定しません。このサイトでは、重い動画や大量画像を自前で抱え込まず、記事用の小さな図解だけを静的アセットとして配信しています。DBにも、記事本文と公開制御に必要な情報を中心に保存します。
固定費よりも復旧しやすさを見る
無料で動くことだけを重視すると、あとから復旧できない構成になりがちです。このリポジトリでは、DB変更は migrations/ に残し、公開条件は src/index.ts の関数で共通化し、運用メモはREADMEへ書いています。未来の自分が再開できることも、個人開発では重要な要件です。
採用しなかった考え方
すべてを静的HTMLとして生成する方法もあります。ただ、このサイトでは管理画面で記事を編集し、予約投稿やnoindex、review_statusを切り替えるため、リクエスト時にD1を読んでHTMLを返す構成にしています。逆に、画像の保存や大規模な分析ログまでD1に入れる構成は避けています。
公開前チェック
- 環境変数とSecretsをコードへ直書きしていないか
- 公開記事だけがRSSとsitemapへ出ているか
- 画像URLが
/assets/articles/...で200を返すか - 管理画面へのリンクを公開フッターへ置いていないか
- AdSense審査中の対象外URLが404または除外になっているか
無料枠中心の構成は、費用を抑えるためだけではありません。小さく作り、公開条件をコードで制御し、必要になった部分だけ後から強くするための構成です。