RenderなどのPaaS(Platform as a Service)を使ってWebアプリを公開した際、久しぶりにアクセスすると、Renderのロゴとともに「Starting up…」のような黒い待機画面が数十秒間表示されることがあります。「何か設定を間違えたのでは?」と不安になる方も多いこの現象。本記事では、この待機画面が表示される理由と、その付き合い方について解説します。
1. 無料プラン特有の「スリープ機能」
あの黒い待機画面の正体は、エラーや設定ミスではなく、Renderのプランに組み込まれた「スリープ(休眠)機能」による仕様です。 プランではクラウドサーバーの無駄なリソース消費を防ぐため、アプリに対して15分間誰もアクセスしない状態が続くと、システム側が自動的にサーバーの電源を落として(スピンダウンして)アプリを休眠させます。
2. 黒い画面は「サーバーを起こしている時間」
休眠状態のアプリに対して誰かがアクセスを行うと、Renderは慌ててサーバーを再起動(スピンアップ)させます。この再起動には最大で50秒ほどの時間がかかります。その間、アクセスしたユーザーに「通信エラー(Time Out)」を返さないよう、システム側が「今サーバーを起こしているので少し待ってね」という繋ぎとして表示しているのが、あの黒い画面なのです。一度アプリが起き上がれば、その後はサクサクと快適に動作します。
3. 完全に出なくするための解決策
根本的にこの待機画面をなくし、常に即座にアクセスできるようにするには、Renderを有料プランにアップグレードする必要があります。有料プランであれば24時間稼働させ続けることが可能になります。
まとめ
社内利用や個人開発のツールであれば、「しばらく使わなかった後の最初の一回だけ、数十秒待つ必要がある」と割り切ることで、一切のインフラ費用をかけずにアプリを運用し続けることができます。スリープ機能は、恩恵を受けるためのちょっとしたトレードオフと言えるでしょう。
編集後記
Herokuが無料枠を廃止して以降、Renderは開発者にとって非常にありがたいデプロイ先として定着しました。この「コールドスタート(スリープからの復帰)問題」は、AWSのLambdaなどのサーバーレス技術でも共通して直面するインフラ特有の現象です。クライアント向けの本番サービスとして提供する場合は即座のレスポンスが求められるため課金が必須ですが、社内DXのための小さな業務効率化ツールであれば、コーヒーを一口飲む間の数十秒を待つだけで現状維持できるわけですから、ビジネス要件に合わせて上手く使い分けていきたいですね。