結論(おすすめ1つ)
乗り換え先は Render を推奨する。
Heroku との操作感の近さ、render.yaml による IaC 対応、PostgreSQL/Redis のマネージドサービスが一体化しており、移行工数が三択の中で最も少ない。無料枠は存在するが、Webサービスにスリープ動作がある点は押さえておく必要がある。Railway は DX が良いが料金体系が変動しやすく、Fly.io は Docker と運用知識が前提になるため、Ops リソースが限られるチームには過剰になりやすい。
比較表(料金/無料枠/移行コスト/対応言語)
| 項目 | Render | Railway | Fly.io |
|---|---|---|---|
| 料金モデル | サービス単位の月額制 | 使用量課金(シート料金あり) | 使用量課金(リソース単位) |
| 無料枠 | あり(Webサービスはスリープあり) | あり(トライアルクレジット制) | あり(一定リソースまで) |
| 具体的な金額 | 公式の料金ページで要確認 | 公式の料金ページで要確認 | 公式の料金ページで要確認 |
| 移行コスト | 低(Heroku と操作感が近い) | 低〜中(テンプレート整備が必要) | 高(Docker 化・flyctl 習得が前提) |
| 対応言語 | Node.js/Python/Ruby/Go/Rust/静的サイト等 | Node.js/Python/Ruby/Go/Rust 等 | Docker が動けば言語不問 |
| マネージド DB | PostgreSQL/Redis | PostgreSQL/MySQL/Redis | Fly Postgres(セルフホスト型) |
| カスタムドメイン SSL | 無料(Let's Encrypt) | 無料(Let's Encrypt) | 無料(Let's Encrypt) |
| GitHub 連携 | あり | あり | あり(Actions 組み込み推奨) |
移行手順
Node.js(Express)アプリを Render へ移行する例で示す。
1. render.yaml をリポジトリに追加する
# render.yaml
services:
- type: web
name: my-app
runtime: node
buildCommand: npm install && npm run build
startCommand: node dist/index.js
envVars:
- key: NODE_ENV
value: production
- key: DATABASE_URL
fromDatabase:
name: my-db
property: connectionString
databases:
- name: my-db
plan: free
2. Heroku の環境変数をエクスポートする
heroku config -a <your-heroku-app> --json > heroku_env.json
出力した JSON を確認し、Render ダッシュボードの「Environment」タブへ転記する。APIキー等のシークレットは Secret Files か環境変数欄に手動で設定する。
3. Render にデプロイする
# Render CLI をインストール(任意)
npm install -g @render-com/cli
render login
render deploy
CLI を使わない場合は、Render ダッシュボードから GitHub リポジトリを接続するだけでデプロイが完了する。render.yaml が存在すればサービス構成は自動で読み込まれる。
4. DB データを移行する
# Heroku 側からダンプを取得
heroku pg:backups:capture -a <your-heroku-app>
heroku pg:backups:download -a <your-heroku-app>
# Render 側の PostgreSQL へ復元
pg_restore --no-acl --no-owner \
-h <render-db-host> \
-U <render-db-user> \
-d <render-db-name> \
latest.dump
接続情報は Render ダッシュボードの Database 詳細ページから取得する。
5. カスタムドメインを切り替える
1. Render ダッシュボード → 対象サービス → Settings → Custom Domain
2. DNS の CNAME を Render が提示するホスト名へ変更
3. TTL 伝播を確認してから旧 Heroku アプリのトラフィックを停止
TTL を事前に短縮(例:300秒)しておくと切り替えロールバックが速くなる。
向き不向き
Render が向くチーム・規模
- Heroku の操作感に慣れており、移行コストを最小化したい
- PostgreSQL/Redis をアプリと同じプラットフォームで管理したい
- インフラ専任がいない小〜中規模チーム
-
render.yamlで構成をコード管理したい IaC 志向
Railway が向くチーム・規模
- プロトタイプ・ハッカソン・個人開発など素早く立ち上げたい場面
- Dockerfile を書かずに即デプロイしたいケース
- フルスタックテンプレートをそのまま使いたい初期フェーズ
Fly.io が向くチーム・規模
- グローバルエッジ配置でレイテンシを最小化したいアプリ
- Docker をすでに運用しておりコンテナ単位の制御が必要
- WebSocket や長時間接続が多いリアルタイムアプリ
- SRE/Ops リソースが確保できる中〜大規模チーム
避けるべきケース
- Heroku アドオン(Heroku Scheduler の設定 UI 等)に深く依存しており再設計が大規模になる場合 → 段階移行を計画してから着手すること
- 無料枠でスリープなし・24時間稼働を前提にしているケース → 各プラットフォームの制限を公式ページで必ず確認すること
- Fly.io で
flyctlや Docker の経験がないまま本番移行を急ぐケース → 学習コストを工数見積もりに明示的に含めること
Top comments (0)