筆者プロフィール: ソフトウェアエンジニア。「知った気にならない。いつまでも学び続ける」を信条に、業務と個人開発の両輪で技術を磨いています。AI 駆動開発で複数の個人開発アプリを構築・運用中。
👉 ポートフォリオ: 筆者ホームページ
この記事は約5分で読めます。
「個人開発はサーバ代がかかるから公開できない」 — そう思っていませんか?
私は現在 3 つのプロダクトをインターネット上に公開していますが、月額の運用コストは完全に 0 円です。この記事では、0 円を実現するために行った技術選定とトレードオフの判断をすべて公開します。
前提: 私のプロダクト構成
| プロダクト | 種別 | 技術スタック |
|---|---|---|
| ユメハシ | 夢を目標に分解するアプリ | Flutter Web / Drift (SQLite) / Riverpod |
| Defrago | 頭の断片化を解放するタスク管理 | Flutter Web / Drift (SQLite) / Riverpod |
| HomePage | ポートフォリオサイト | Astro / TypeScript |
3 つともブラウザで動作する Web アプリです。
「作っては使わない」ループにいた過去の自分
以前の私は個人でアプリを作っても、公開する手段を持っていませんでした。
「サーバを建てるにはお金がかかる」「AWS の料金体系が複雑で怖い」——そんな思い込みから、ローカルでしか動かないアプリを作っては放置するループを繰り返していました。
転機は Claude Code との出会いです。AI と対話しながらインフラ構築を進められるようになったことで、「サーバ構築」という心理的ハードルが一気に下がりました。そして辿り着いたのが運用コスト 0 円という制約駆動の設計思想です。
制約駆動設計: なぜ「0 円」を目指すのか
AWS や Azure を普通に使えば、技術的な制約はほぼなくなります。でも、それでは面白くない。
私が 0 円制約を自分に課している理由は 3 つあります。
- 設計力が鍛えられる — 制約があるからこそ、サービスの本質的な機能とコスト構造を深く理解できる
- 提案力が上がる — 「コストを抑えつつ要件を満たす設計」は実務でも求められるスキル
- 継続できる — 月額 0 円なら、モチベーションが落ちてもプロダクトを閉じる理由がない
技術選定のトレードオフ一覧
ホスティング
| 判断ポイント | 制約なしの選択 | 0 円制約での選択 | トレードオフ |
|---|---|---|---|
| 静的サイト | EC2 / CloudFront | GitHub Pages | カスタムサーバ処理不可。SSG で割り切る |
| SSR アプリ | ECS / Fargate | Vercel Free | 月 100GB 帯域 / 100 時間 Serverless。個人開発なら十分 |
GitHub Pages は GitHub リポジトリから直接ホスティングできる無料サービスです。Astro や Flutter Web のように、ビルド成果物が静的ファイル(HTML/CSS/JS)になるフレームワークとの相性が抜群です。
# .github/workflows/deploy.yml(GitHub Actions でビルド&デプロイ)
name: Deploy to GitHub Pages
on:
push:
branches: [main]
schedule:
- cron: "0 21 * * *" # 日次バッチ(UTC 21:00 = JST 6:00)
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci && npm run build
- uses: actions/upload-pages-artifact@v3
with:
path: dist/
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
runs-on: ubuntu-latest
steps:
- uses: actions/deploy-pages@v4
データベース
| 判断ポイント | 制約なしの選択 | 0 円制約での選択 | トレードオフ |
|---|---|---|---|
| RDB | RDS / Cloud SQL | Supabase Free | 500MB / 50K MAU。スケールには課金が必要 |
| 軽量ストレージ | DynamoDB | Drift (SQLite in Browser) | データはブラウザ内。デバイス間同期は別途設計が必要 |
ユメハシ と Defrago では、Drift(Flutter 用 SQLite ライブラリ)を使い、データをすべてブラウザの IndexedDB に保存しています。サーバサイドのデータベースが不要になるため、運用コストは 0 円です。
┌──────────────────┐
ユーザー ──────▶ │ Flutter Web App │
│ (GitHub Pages) │
└────────┬─────────┘
│
┌────────▼─────────┐
│ Drift (SQLite) │
│ on IndexedDB │ ← ブラウザ内で完結
└──────────────────┘
トレードオフ: デバイス間同期ができません。スマホで入力したデータを PC で見ることはできない。しかし「まず使ってもらう」ことを優先し、同期機能は将来の課金ユーザー向け機能として切り分けています。
認証
| 判断ポイント | 制約なしの選択 | 0 円制約での選択 | トレードオフ |
|---|---|---|---|
| 認証基盤 | Cognito / Auth0 | NextAuth.js + 自前実装 | マネージドサービスの恩恵なし。セキュリティは自己責任 |
| 簡易認証 | Firebase Auth | 認証なし(ローカル保存) | ユーザー登録不要で即使える。データ復旧は不可 |
ユメハシの Web 体験版は認証なしで設計しています。URL を開くだけで使える。これは「最初の一歩のハードルを下げる」という設計思想に基づいた判断です。
フォーム・メール
| 判断ポイント | 制約なしの選択 | 0 円制約での選択 | トレードオフ |
|---|---|---|---|
| お問い合わせ | SES + Lambda | Formspree(無料枠) | 月 50 件まで。個人サイトなら十分 |
| 通知メール | SendGrid | Resend(無料枠) | 月 3,000 通 / 1 ドメイン |
バッチ処理
| 判断ポイント | 制約なしの選択 | 0 円制約での選択 | トレードオフ |
|---|---|---|---|
| 定期実行 | Lambda + EventBridge | GitHub Actions cron | 最小間隔 5 分。精度にばらつきあり |
| データ取得 | Step Functions | ビルド時 fetch | リアルタイム性なし。日次更新で割り切る |
HomePage では、ブログの予約投稿と Qiita 記事の自動取得を GitHub Actions の cron で実現しています。
// 予約投稿の判定(ビルド時に実行)
export function isPublished(entry: { data: { draft?: boolean; date: Date } }): boolean {
if (entry.data.draft) return false;
if (import.meta.env.DEV) return true; // 開発時は全記事表示
// JST で日付を比較(GitHub Actions は UTC で動作するため)
const JST_OFFSET_MS = 9 * 60 * 60 * 1000;
const nowJST = new Date(Date.now() + JST_OFFSET_MS);
const todayJST = nowJST.toISOString().slice(0, 10);
const entryDate = entry.data.date.toISOString().slice(0, 10);
return entryDate <= todayJST;
}
ポイント: GitHub Actions は UTC で動作するため、JST との時差を考慮しないと「日本時間では今日なのに記事が公開されない」というバグが発生します(実際に踏みました)。
コスト比較: AWS 構成 vs 0 円構成
同等の機能を AWS で構築した場合の概算と比較します。
| サービス | AWS 構成 (月額概算) | 0 円構成 |
|---|---|---|
| ホスティング | CloudFront + S3: ~$1 | GitHub Pages: $0 |
| DB | RDS t3.micro: ~$15 | Drift (ブラウザ内): $0 |
| 認証 | Cognito: ~$0 (5万MAUまで) | 認証なし: $0 |
| バッチ | Lambda + EventBridge: ~$0.5 | GitHub Actions: $0 |
| メール | SES: ~$0.1 | Formspree: $0 |
| 合計 | ~$16.6/月 (~$200/年) | $0 |
個人開発の規模なら AWS でも大した金額ではありませんが、「0 円である」ということ自体が継続の保険になります。忙しくて半年放置しても、課金が発生しない安心感は大きいです。
メンテナンスフリーの設計
0 円に加えてもう一つ重要なのがメンテナンスフリーです。
個人開発で最大の敵は「運用の手間」です。手動デプロイが必要、手動でデータ更新が必要——こうした運用負荷はモチベーション低下に直結します。
私のプロダクトでは、以下をすべて自動化しています。
| 運用タスク | 自動化手段 | 頻度 |
|---|---|---|
| ビルド&デプロイ | GitHub Actions (push trigger) | push ごと |
| 予約投稿の公開 | GitHub Actions (cron) | 日次 |
| Qiita 記事の取得 | ビルド時 API fetch | 日次 |
| 依存パッケージ更新 | Dependabot | 週次 |
コストもゼロ、メンテナンスもゼロ。 記事を書いて push するだけで、あとは全自動です。
0 円制約で得られた設計力
運用コスト 0 円という制約のもとで開発を続けた結果、以下のスキルが鍛えられました。
| スキル | 具体的な学び |
|---|---|
| コスト設計 | 無料枠の上限・制約を正確に把握し、設計に反映する力 |
| トレードオフ判断 | 「何を諦めて何を得るか」を言語化する習慣 |
| SSG 設計 | サーバレスの制約内で動的な体験を提供する工夫 |
| CI/CD 設計 | GitHub Actions だけでバッチ処理・デプロイ・通知を組む力 |
| 顧客目線の提案 | 「コストを抑えたい」というお客様の要望に具体的な選択肢を示せる |
これらは AWS を自由に使っていたら身につかなかったスキルです。制約こそが最高の教材でした。
まとめ: 「サーバにお金はかからない」
| レイヤー | 0 円で使えるサービス | 制約 |
|---|---|---|
| ホスティング | GitHub Pages / Vercel / Cloudflare Pages | 静的 or Serverless。常駐プロセス不可 |
| DB | Supabase Free / ブラウザ内 SQLite | 容量・接続数に上限あり |
| 認証 | NextAuth.js / Supabase Auth | 自前運用の責任 |
| バッチ | GitHub Actions cron | 精度にばらつき。最小 5 分間隔 |
| メール | Formspree / Resend | 月間送信数に上限あり |
もし今、「作っても公開できない」と思っているなら、ぜひこの構成を試してみてください。サーバにお金はかかりません。公開する方法は、想像よりずっと簡単です。
最初の一歩を踏み出せれば、「作って放置する」の先に「作って届ける」という全く違う景色が待っています。
📌 関連記事
- マークダウン記法は奥深く、楽しい — テキストだけで「伝わるドキュメント」を作る技術
- 筆者のポートフォリオ: HomePage