【Heroku代替】Node.jsが無料・安定動作できるPaaSランキング!Expressサーバを作って試してみた


アイキャッチ画像

一般に静的ページの配信は無料で安定することが多いですが、Node.jsのホスティングはサーバーサイドなだけあって安定動作&無料なPaas (Platform as a Service)は中々見つけるのは困難です。

そこで、本記事では実際に、ソケット通信を実装したExpressで構築されたAPIを開発・デプロイしてみた結果、完全無料で安定動作するのかという点に重きを置いてランキング形式にてご紹介します。
※情報はすべて2022年3月15日現在

【検証条件】
・Node.js上で動作するAPIライブラリ「Express」で構築
・Socket.ioを用い、リアルタイム通信処理が安定に動作するかを調査
・基本的にクレジットカードは登録しない
・静的ページをホストする訳ではない

↓目次にランキングとして分かるようにしておきました

【第1位】Render

標準SSLで安定動作・Herokuの上位互換

SSLでの接続も問題無し。ソケット通信も特にエラーも吐かずに安定的に動作することを複数接続でも確認しました。

URLの形式はhttps://<App Name>.onrender.comが基本となっており、Cloudflare発行のSSL証明書を持ったHTTPS接続が可能です。
特にExpress側でSSL関連設定も不要でhttpの実装でも自動でHTTPSアクセスできるようになっていました。

フリープランは基本的に操作感や仕様はHerokuに似ており、上位互換であることが以下のドキュメントを見れば分かります。

クレカ登録不要で512MB・750時間運用可

但し、Herokuと決定的に違う点はクレジットカードの登録が不要で毎月31.5日の運用が可能であるということです。

サーバーも最も近いところでシンガポール(SouthAsia)リージョンが使えます。Herokuではヨーロッパとアメリカしか対応していないのでどうしても遅くなってしまいがちですがその心配もあまり不要です。

常時起動ではないが再起動は早め

唯一の欠点としては常時起動ではない点が挙げられます。公式ドキュメントによれば15分アクセスが無い場合にはサーバーが一時停止し、次アクセス時に叩き起こす必要がある旨が書いてあります。

そこで実際にAPIサーバの立ち上げに要した時間を図ってみるとExpress+Socket.ioの構成だと8秒ほど
今回の要件は「ソケット通信を行うAPIサーバー」であって、HTMLを返すサーバーではないため8秒程度の起動遅延は許容範囲内であると判断し、総合的に1位にしました。設定方法は以下のZennの記事が有用です。

【第2位】IBM Cloud Foundry

第2位はかつてIBM Bluemixと呼ばれてた動的ホスティングサービスです。

クレカ不要でサーバー常時起動!!!

IBM Cloudの動的サーバホスティングサービス「IBM Cloud Foundry」の特徴はなんと言っても完全無料プランで常時起動できるという点です。

時間デプロイという概念もなく、最小64MB・最大256MBのメモリ設定が可能で最大で4つのリソースを無料で共存できます。

ibmcloudのCLIからデプロイなどもできる他、GitHubと連携したCI/CD(継続的インテグレーション/継続的デリバリー)もフリープランで可能。Pushしたら自動でデプロイすることも可能。

ExpressでHTTPS接続したいんだけど…

欠点というより検証するにあたって知識不足で発生した問題かも知れないですが、ExpressがHTTPS接続してくれない点が挙げられます。

Let’s Encryptで証明書を発行してExpressで読み込ませたりポートを変えてみたり色々してみたが如何せん日本語・英語含め全く情報が無いためお蔵入りすることに。

どうやらカスタムドメインの設定をすると証明書を読み込めるらしいが、カスタムドメインを使うにはクレジットカード登録が必須の従量課金タイプへの移行が必要。
そこでも問題が発生し、クレジットカードの登録に失敗する。3枚位試したが全部失敗

【第2位タイ】Glitch

再起動が爆速

GlitchもHerokuに似ている常時起動が出来ないタイプのPaaSですが違う点は再起動が高速であるという点。
再起動は驚異の4秒程度。先程も説明しましたがAPIサーバーとしての運用を前提に検証しているのでこれは素晴らしい。

1000時間使えるが設定が独特すぎる

1000時間をクレジットカード不要で利用できる他、1Gのストレージも利用可能です。

一般にPaaSはプロジェクトフォルダにJSONファイルとしてビルド時・スタート時のコマンド設定を保存して、それらをGitで管理&デプロイのようなものが多いですが、どうやらGlitchはうまく行かない模様。

若干初期設定が面倒な点を加味して第2位です。

【第3位】Vercel

第3位は静的サイトをホスティングする際によく耳にするVercelです。三角おにぎりのアイコンが特徴です…ではなく、こちらも常時起動状態でホストできるのが特徴です。

常時起動するがSocket.ioがエラーを吐く

エラーを見てみるとどうやらWebhook関連で問題が発生しているよう。そのせいで接続が不安定。接続と切断が続いて30秒後に治る…のような現象が見られたため第3位です。

ですので、単純にExpressでリアルタイム通信をしないREST APIを動作させるなら圧倒的1位です!

メモリ容量については90MB?という話も聞いていて、頻繁に仕様変更があるとのこと。基本的にvercelコマンドで操作します。

Vercel特有のFunction設定に注意

Vercelは基本的に静的ホスティングのPaaSですので、サーバーサイド処理はあくまでおまけ程度に考えると良いでしょう。おまけにしては常時動作は凄い…と思ったのですがもしかしたらCGI的な動かし方をしているのかも知れません。

PHPファイルも/apiディレクトリに入れると動いたり動かなかったり、Node.jsの場合はそれの設定は不要だったり…と言った具合にネット上では色々混乱した情報が多いためかなり迷います。
今回Expressサーバーが動作したvercel.jsonの設定ファイルを置いておきます。

{
    "version": 2,
    "builds": [
        {
            "src": "./app.js",
            "use": "@vercel/node"
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/app.js"
        }
    ]
}

【第4位】Heroku

Herokuについては非常に多くの解説情報がありますので特に紹介はしません。以下の観点からRenderを使ったほうが圧倒的にメリットが多い上に常時起動でもないので第4位です。

  1. クレカを登録しないと450時間しか運用できない
  2. 再起動の起ち上げが遅い(14秒くらい)
  3. 物理的に日本からサーバが遠い(最寄りはアメリカ)

ただし初心者といった方に対しては情報が多い・簡単という点ではオススメです。

以上簡潔に2022年3月現在、主要なPaaSサービスの中で安定して無料でNode.jsサーバーを動作するものをランキング形式で紹介しました。公式ドキュメントなどを読んでみて各自要件にあったPaaSを採用してみて下さい!