個人開発のインフラ選定は悩ましい。無料で始めたいが、スケールも考えたい。運用も楽したい。

半年間、3つの環境を並行運用してみた結果をまとめる。

比較対象

  1. Fly.io: コンテナベースのPaaS
  2. VPS: ConoHa、さくらVPSなど
  3. Cloudflare Workers: エッジコンピューティング

Fly.io

良い点

  • 無料枠が実用的(256MB RAM × 3台)
  • デプロイが楽(fly deploy 一発)
  • PostgreSQL、Redisもマネージド提供

課題

  • 無料枠を超えると急に高くなる
  • リージョン選択が限定的(東京はある)
  • Dockerイメージのビルドが遅い時がある
# fly.toml
[http_service]
  internal_port = 8080
  force_https = true
  auto_start_machines = true
  auto_stop_machines = true  # コスト削減に効く

VPS

良い点

  • 月額固定で予算が読みやすい
  • 何でもできる自由度
  • 複数サービスを1台に同居可能

課題

  • 運用は全部自分
  • セキュリティパッチ、証明書更新、監視...

現実的な構成

# docker-compose.yml(Traefik + アプリ)
services:
  traefik:
    image: traefik:v3.0
    command:
      - "--providers.docker=true"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
    ports:
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  app:
    image: myapp:latest
    labels:
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.routers.app.tls.certresolver=letsencrypt"

Cloudflare Workers

良い点

  • 無料枠が太い(10万リクエスト/日)
  • コールドスタートがほぼない
  • グローバルエッジで自動分散

課題

  • 実行時間制限(CPU 10ms〜50ms)
  • Node.js互換だが完全ではない
  • D1(DB)はまだ発展途上
// Hono on Workers
import { Hono } from 'hono';

const app = new Hono();

app.get('/api/articles', async (c) => {
  const db = c.env.DB;
  const articles = await db.prepare('SELECT * FROM articles').all();
  return c.json(articles);
});

export default app;

使い分けの結論

ユースケース 推奨
静的サイト + API少量 Cloudflare Workers
中規模Webアプリ Fly.io
複数サービス同居 VPS
機械学習推論 VPS (GPU) or Modal

おわり

「最適解」は要件次第。ただ、個人開発で最初に試すならFly.ioが無難。Cloudflare Workersは制約を理解してから。