投稿日: 2023年7月4日
最終更新日: 2024年5月1日
Heroku難民を救いたい
まずは、改めてHeroku離れが進んでいる理由を考えてみます。
フリープランの廃止
2022年の途中までは、無料で使えるプランがあったのですが、現在は廃止されており、Railsをデプロイするのに最低でも毎月5ドルかかるようになりました。親会社であるSalesforceの業績の悪化に伴う改悪だと思います。
GitHubのOAuthトークンの漏洩
2022年に、Herokuが管理していたGitHubのOauthトークンが漏洩しました。その後、このトークンが悪用され、ユーザのハッシュ化されたパスワードが漏洩しました。
RailsをデプロイできるPaaS
Herokuと同様に、簡単にデプロイできるサービスを使いたいという方もいらっしゃると思います。実際のところ私もそうです。
そこで、デプロイの手間を最小限に抑えるために、PaaSに限定して候補とその利点と欠点をまとめました。
Railway
Railwayは、Nixpacksという自社製のソフトウェアを利用してアプリをデプロイします。NixとDockerを組み合わせたものだそうです。
利点
無料で使用できるリソースがある
クレジットカードを登録すると、毎月5ドルまで無料でリソースを使用できます。目安としては、Railsとsqliteの組み合わせであれば1アプリまで無料でデプロイできます。
無料の範囲内で使ってもアプリが勝手にスリープしない
これはかなり大きい特徴だと思います。いくら趣味のアプリだとはいえ、スリープから復帰するまで待つのはだるいですからね。
欠点
アプリのデプロイに時間がかかる
デプロイする際に、rbenvを使ってRubyがインストールされるためデプロイが遅いです。加えて、Dokcerイメージのビルドでキャッシュが利用されません。そのため、Railsアプリの毎回のデプロイにおよそ5分かかります。
サービスが比較的不安定
普通にデプロイするだけでも5分かかるのですが、障害が発生してデプロイに10分以上かかることがここ数ヶ月で2回ありました。
デプロイ先のリージョンがアメリカ西部しかない
日本のクライアントとアメリカ西部のサーバの間で通信すると遅延(RTT)が0.4秒くらいになります。そのため、Hotwireを使ってRailsアプリをSPA風にした場合にイベント発生からアニメーション開始までの時間が長くなり、ユーザ体験が少し悪くなります。CloudflareなどのCDNを利用すれば遅延を軽減できますが、素早いレスポンスが求められるアプリをデプロイする場合は注意が必要です。
Fly.io
Fly.ioは、Dockerfileなどのデプロイ用のファイルをプロジェクトディレクトリに生成してデプロイします。
利点
無料で使用できるリソースがある
クレジットカードを登録すると、共有CPU1コア、メモリ256MBのインスタンスを3つまで無料で使用できます。
無料の範囲内で使ってもアプリが勝手にスリープしない
デフォルトの設定では、一定時間アクセスが来ないと勝手にスリープしてしまいますが、設定を変更することでアプリを常に起動させておくことができます。
日本のリージョンがある
アプリのデプロイ先として東京リージョンを選択できます。
欠点
CloudflareのDNSとの相性が悪い
CloudflareのDNSを使って独自ドメインでアプリを公開する際に、SSL証明書の問題が原因でオリジンサーバとの接続が確立できず、エラーが発生することがあります。私の場合は、Cloudflareのプロキシをオフにした状態であっても、SSL証明書を発行するためのFly.io側の処理が行われず、代わりにCloudflareが発行したエッジのSSL証明書を使おうとしてもうまく行きませんでした。
Render
RenderはRailwayやFly.ioに比べてデプロイ環境の癖が少ないです。初心者でも扱いやすいと思います。
利点
無料で使用できるリソースがある
クレジットカードを登録せずに、一部のリソースを無料で使用できます。Railsアプリ1個、PostgreSQL1個、Redisインスタンス1個まで無料で使用できますが、15分間アクセスが無いアプリは自動的にスリープするなどの制約があります。
有料でデプロイするという条件で比較すると、RailwayやFly.ioよりもデプロイが速い
毎月7ドルかかるプランであるStarterプランでRailsアプリをデプロイしてみたところ、デプロイに1分30秒しかかかりませんでした!
Railwayは5分、Fly.ioは3分くらいかかっていたので今回比較したサービスの中で、デプロイが一番速いです。
欠点
無料で使えるリソースの制約が大きい
一部の制約は先ほど述べましたが、無料の範囲内で使おうとすると、アプリが最後のアクセスから15分後に勝手にスリープしたり、PostgreSQLが90日後に利用できなくなったり、Redisを再起動するとRedis上のデータが全て削除されてしまったりします。
そのため、実質的には、中長期的に運用するアプリを無料でデプロイすることができません。
RenderのStarterプランがおすすめ
Railsアプリを無料でデプロイしたいという方には本当に申し訳ないのですが、RenderのStarterプランを使ってRailsとPostgreSQLのインスタンス代としてそれぞれ月7ドル払うことをおすすめします。前述したように、RailwayもFly.ioも深刻なバグを抱えています。また、Renderはデプロイが3つの中で一番速いです。以上のことから、RenderのStarterプランはかなりコスパがいいと思いました。