株式会社ウルフアプリケーション

Rails+AWSからHono+Cloudflareへ移して、サーバー代を19分の1にした話

AWSで動いていた自社サービスを、Cloudflareへ移行した記録

吉田 涼(株式会社ウルフアプリケーション) 2026年9月14日

自社のプリントオンデマンド基盤であるPLAYTIOを、Rails+AWSからHono+Cloudflareへ移しました。声を波形にしてアクリルキーホルダーなどを作るWAVES, MADEの、ログインや注文、画像管理を支えているシステムです。

9月4日にCodex上のGPT-5.6 Solと書き換えを始め、数時間でアプリの大部分とテストができあがりました。そこから管理画面などを補い、既存のデータや接続先を一つずつ確かめて、9月10日に本番を切り替えました。

構成を変える

構成を変えようと思った理由

移行前はRailsとPostgreSQLをAWS上で動かしていました。注文がない時間も、サーバーやデータベース、ロードバランサーの料金はかかるので、今のサービス規模なら、毎月の費用をもう少し減らせないかとAWSから請求が来るたびに思っていました

そこで、円安の影響を受けにくいものにするか、VPSにするか悩んでいたところCloudflareが調子良しという話を聞き、なんかできそうだということで移行に踏み切りました。この時の僕の中でCloudflareは、CDNとか、人間かボットか確認するウィジェットを提供しているっくらいのイメージでした。なので、最初にやったのは、今のCloudflareで何ができるのかを調べることでした。

今のCloudflareでできること

一番ビックリしたのは、今ってwebアプリやAPIまで動かせるのですよね。データベースにはD1、画像やファイルの保存にはR2が使え、webページの配信やEmail Serviceでのメールの送受信もできます。

dockerコンテナを動かせるContainersもあり、メモリ4GB+CPU平均10%稼働で約34ドル/月。

これでも十分やすくなるのですが、今回は究極の低額運用を目指したかったので、コンテナ型よりも安いWorkersで動く形に書き換えることにしました。

BEFORE Rails + AWS EC2 / ECS / ALB / RDS
ECR / S3 / CloudWatch / SES
AFTER Hono + Cloudflare Workers / D1 / R2
Static Assets
+ AWS SES(メール)

WorkersならTypeScriptとHonoが相性良さそうということで、PLAYTIOをRailsからHonoへ書き換え、APIと管理画面、公開ページを同じWorkerから配信する構成にしました。(余談ですがHonoの作者は日本人でCloudflareに所属しているとのこと、そりゃ相性が良いわけだ)

メール送信のSESは設定が済んでいてメールも届いていたので、今回はそのまま残しました。

RailsからHonoへ書き換える

数時間で一気にやったのですが、AI慣れしているみなさんにとっては難しいことではありません。「AWSからCloudflareに移行したいので、RailsをHonoに書き換えてインフラを整えておいて」こういう指示で良いですよね。

前回の記事でも書きましたが、時間のかかる実装は、夜間、つまり寝ている間に進めることが僕はよくあります。

日中は判断や人と会う時間に使いたいので、寝るまでに必要な準備を済ませておいて、寝る時にプロンプト送信。当時つかっていたGPT-5.6 Solは長回しに向いていて、途中途中で確認しつつ慎重に進めるタイプだったので、今回のようにフレームワークごと移植する作業とは抜群の相性の良さでした。(現在はGPT-6 Astraを使ってます)

朝起きたら、数時間の作業がどういう感じに進んでいるか、うむうむと、目検で動作確認して、そのあと頭の中でインフラと移行スケジュールをたてつつ朝食をとりました。

データベース

PostgreSQLのデータをD1へ移す

DB、ここが僕にとって鬼門でして、AIは当たり前のようにD1がイイっすよと朝起きた状態で実装済みだったのですが、僕が普段使っているMySQLやPostgreSQLではない、なにものかわからないものにDBを任せて良いのだろうか、と。

ちょっと調べてみると、D1はSQLiteベースでMySQLやPostgreSQLと同じRDB、ローカルでもD1が使えるので開発でも困らない、PostgreSQLから移すにはテーブルを用意してデータを変換でOKそう。

SQLiteは、スマホアプリに内蔵されていてそっち系のものだと思っていたので、webサービスとして本当にまともに動くんかいと最初は思っていたのですが、実際にローカル実装済みのものがD1導入済みだったりしていたので、行けるだろう、と。

PostgreSQLへのデータ抽出用の接続を読み取り専用にし、抽出、D1用のSQL変換、取り込み、これで完了です。ステージングで確認できたらスクリプト発動するだけで本番も移行できたので、AIがデータの内容を見ずに移行できたのは大きかったです。

EXPORT PostgreSQL 読み取り専用で
必要なデータを抽出
IMPORT Cloudflare D1 データを変換して
SQLを取り込む

S3にあった画像本体もR2へ移し、これで移行準備完了です。

段階移行

段階的に本番へ切り替える

まずはステージングで、注文や画像を開くところから。メールが届くか、決済画面へ進めるかも試し、その後、本番でも同じように進めました。デプロイはgithub連携で。いやあ、Cloudflareすごい、うごくうごく。

そして最後にDNSの切り替え、AWSからCloudflareへ

料金

月々のサーバー代

2026年8月のAWS料金は約95ドルでした。Rails製のサービス、日本リージョン&クラウドにすると、このくらいかかってしまうのですよね。移行後は、月5ドルのCloudflare Workers Paidプランで今のところいけそうです。

約95ドル/月 → 約5ドル/月
移行後は初回請求前の概算。税・追加利用料・メール送信料は別途とのこと。

ドル円の変動があってもさすがに5ドルなら、、!

参考: Workersの料金D1の料金R2の料金Containersの料金

移行を終えて

今の規模に合う構成へ

移行後は、毎月の固定費を抑えられるうえ、Dockerやら何やらの構成や更新を考える必要もなくなりました。今のPLAYTIOの規模で続けやすい形になった、良い経験となりました。現在は月5ドルで運用しています。

ここまでお読みいただきありがとうございます。AIと一緒に進めて、サービスの書き換えから本番切替まで1週間。サーバー代を安くしたい方は、ウルフアプリケーションへご相談ください