Currency Converter Board のバックエンドを、Railway 上の FastAPI から Cloudflare Workers 上の Hono へ移行しました。
この記事では、次の内容をまとめています。
- なぜ Railway から Workers へ移したのか(コスト・速度・運用)
- 最初に検討した D1 + PyWrangler 案を見送った理由
- 実際に Hono へ移行した手順
「個人開発の API をエッジに寄せたい」「固定費を減らしたい」という方の参考になればうれしいです。
なぜ移したのか
理由はシンプルで、体感速度とコスト、そして Hono を使いたかったからです。
Railway ではホビープランを使っていて、月額はおおよそ 5ドル でした。
金額自体は大きくないものの、利用量が少ない月でも固定費が発生します。

このサービスはもともと 学習目的の個人開発 で、できるだけランニングコストを抑えたいプロジェクトです。
ユーザー数がまだ少ない段階で固定費だけ払い続けるのは、正直モヤモヤしていました。
加えてレスポンスも「めちゃくちゃ速い」とは言いにくく、有料を払い続ける理由としては弱かったです。
一方でフロントはすでに Cloudflare 側で動いていたので、バックエンドも同じエコシステムに寄せれば構成がシンプルになります。
この判断で、Workers への移行を進めました。
前提のアーキテクチャ(移行前)
- フロントエンド: Cloudflare 上で配信
- バックエンド(Railway): FastAPI で以下を担当
- データベース(ユーザー管理、履歴などの記録)
- Wise API まわりの処理
- Google ログイン(OAuth などの認証フロー)
今回移したのは、この バックエンド部分 です。フロントのデプロイ先は変えていません。
最初に考えていた案:D1 と PyWrangler で Worker 化
最初は、Cloudflare D1 を DB にして PyWrangler で Python Worker を動かす案を検討していました。
PyWrangler は Python を Workers で動かせる仕組みで、既存バックエンドが Python だった自分にとっては有力候補でした。
ただ、実際に試すと(当時ベータ版ということもあり)起動や応答の体感が重め でした。
無料枠運用を前提にすると、今回は厳しいと判断しました。
結果として PyWrangler 案は見送り、API は Hono + Workers(TypeScript) に切り替える方針にしました。
実際に採用した構成:Hono で API を Workers へ
最終的には、Hono で API を組み直して Cloudflare Workers にデプロイ しました。
FastAPI(Python)から TypeScript 側へロジックを移し、認証・外部 API・DB アクセスを順番に移植していく形です。
移行の流れ(ざっくり)
実作業としては、Claude と Cursor で移行プランを先に固めてから進めました。
規模が大きくなかったこともあり、移行自体は 1 日で完了しました。
- Railway 上の FastAPI 構成を棚卸し(エンドポイント、DB スキーマ、環境変数、外部依存)
- Workers 用プロジェクトを作成し、Hono で同等ルートを用意
- Wise API・Google OAuth・DB を Workers の実行モデル向けに再実装
- ローカルでフロントから新 API を叩いて動作確認
- 本番の API 参照先を段階的に切り替え
- Railway 側リソースを停止して課金停止を確認
つまずいた所(メモ・追記用)
大きくハマった点はありませんでした。
強いて言えば、AI と進めるときは 最初の移行計画(仕様の棚卸し)を丁寧にやること が重要でした。
今回は小規模だったので、生成された実装をレビューしてテストし、最後に自分でデプロイする流れで問題なく進みました。
技術的な作業でいうと、Railway 側 DB のデータをうまくエクスポートできず、D1 へ一部手作業で移したのは少し手間でした。
まとめ
- Hono + Workers への移行で、体感速度と運用コストのバランスが改善しました。
- フロントとバックエンドを Cloudflare に寄せたことで、構成・運用もシンプルになりました。
- 個人開発で「まずは無料枠中心で運用したい」ケースでは、試す価値がある選択肢だと感じています。
関連記事
- サービス本体の紹介: Currency Converter Boardを作った話